Wyszukiwanie zdjęć w Bing za pomocą Power Query i wizualizacja zdjęć w Power BI Desktop

Power Query jest niezwykle użyteczny i może być wykorzystywany do realizacji wielu, różnych celów. Dzisiaj chciałbym pokazać w jaki sposób można wykorzystać aplikację dostępne w Azure Marketplace – w tym przypadku aplikację Bing Search. Pobrane zdjęcia następnie zostaną pokazane na raporcie w Power Bi Desktop.

W Power Bi Desktop, w Power Query dodajmy nową funkcję, która pozwala będzie pobierać zdjęcia.

let
    ImageUrl = 
        let LoadSingleData = (Query as text) as text=>
    
            let
                WebResults = Marketplace.Subscriptions()
                {
                    [ServiceUrl="https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/"]
                }
                [Feeds]
                {
                        [
                            Name="Image"
                            ,Signature="function (Query as text, Options as nullable text, Market as nullable text, Adult as nullable text, Latitude as nullable number, Longitude as nullable number, ImageFilters as nullable text) as table"            ]
                }
                [Data]
                (
                        Query       // Query
                        , null      // Options
                        , null      // Market
                        , null      // Adult
                        , null      // Latitude
                        , null      // Longiture
                        , "Size:Small"      // ImageFilters
                )  ,
                JpegImages = Table.SelectRows(WebResults, each ([ContentType] = "image/jpeg")),
                ImageUrls = Table.SelectColumns(JpegImages, "MediaUrl"),
                FirstImageUrl = Table.FirstN(ImageUrls,1),
                FirstImageUrlValue = FirstImageUrl{0}[MediaUrl]
              
            in FirstImageUrlValue 
    in
        LoadSingleData
in
    ImageUrl

Zmieńmy teraz nazwę funkcji na: “fFindImageForQuery”. Aby przetestować funkcję wystarczy użyć przycisku “Invoke”.

Teraz wystarczy wprowadzić parametry funkcji – w tym przypadku szukana fraza dla zdjęc i zaakceptować wybór.

Przy wykonywaniu funkcji po raz pierwszy Power Query poprosi o autentykację z Azure Marketplace – w tym przypadku wystarczy tylko podać dane logowania i na ekranie pojawi się rezultat dla danego zapytania – pojedynczy adres url obrazka dla danej frazy:

Aby przetestować funkcję w rzeczywistości utwórzmy plik txt oraz dodajmy listę fraz, które chcielibyśmy wyszukać, na przykład nazwy zwierząt:

fox
giraffe
dog
horse
elephant
snake
cat
buffalo
butterfly
camel
cow
shark
bird
zebra
crocodile
fish
frog
bear
dolphin
duck
gorilla
iguana
koala
lion
monkey

Teraz pobierzmy dane z przygotowanego pliku oraz w jednym z kroków wyweołajmy funkcję, która pobierze adresy zdjęć. Na przykład:

let
    Source = Table.FromColumns({Lines.FromBinary(File.Contents("C:UsersAdministratorDesktopanimals.txt"),null,null,1252)}),
    RenameHeader = Table.RenameColumns(Source,{{"Column1", "animal"}}),
    FindImageForAnimal = Table.AddColumn(RenameHeader, "Custom", each fFindImageForQuery([animal])),
    RenameImageUrl = Table.RenameColumns(FindImageForAnimal,{{"Custom", "AnimalImageUrl"}}),
    AddImageUrl = Table.DuplicateColumn(RenameImageUrl, "AnimalImageUrl", "AnimalImageUrlSource")
in
    AddImageUrl

Teraz można zamknąć zapytanie. Przed utworzniem raportu musimy jednak wykonać jeszcze jeden krok, który pozwoli pokazać zdjęcia w Power Bi Desktop. Aby wyświetlić zdjęcia należy okreslić odpowiednią kategorię dla kolumny. W tym celu należy przejść do zakładki “Data” oraz zmienić “Data Category” na “Image URL”. Dodatkowo w podanym przykładzie kolumna została zduplikowana i można ustalić jej kategorię na “Web URL”. Pozwoli to oprócz wyświetlenia zdjęć wyświetlenie źródła pobranego zdjęcia oraz pozwoli na przejście do źródła.

Teraz można przygotować raport, a zdjęcia zostaną pobrane z internetu za pomocą Bing Search Api oraz automatycznie pokazane na raporcie w Power Bi Desktop.

Slawomir Drzymala
Follow me on

Leave a Reply