2014-12-22 7 views
6

Jak wyszukiwać obrazy Bing przy użyciu słów kluczowych?Wyszukiwanie Bing za pośrednictwem interfejsu API Azure za pomocą języka Python

jestem w stanie za pomocą wyszukiwarki Google:

import urllib2 
import json 

credentialGoogle = '' # Google credentials from: https://console.developers.google.com/ 
searchString = 'Xbox%20One' 
top = 20 
offset = 0 
while offset < top: 
    url = 'https://ajax.googleapis.com/ajax/services/search/images?' + \ 
      'v=1.0&q=%s&start=%d&userip=%s' % (searchString, offset, credentialGoogle) 

    request = urllib2.Request(url) 
    response = urllib2.urlopen(request) 
    results = json.load(response) 

    # process results 

    offset += 4  # since Google API only returns 4 search results at a time 

Jaki byłby równoważny dla Bing? Prawdopodobnie zaczynałoby się od:

keyBing = ''  # Bing key from: https://datamarket.azure.com/account/keys 
credentialBing = '' # same as key? 
searchString = '%27Xbox+One%27' 
top = 20 
offset = 0 

url = 'https://api.datamarket.azure.com/Bing/Search/Image?' + \ 
     'Query=%s&$top=%d&$skip=%d&$format=json' % (searchString, top, offset) 

, ale w jaki sposób konfiguruje się referencje?

+2

http://www.guguncube.com/2771/python-using-the-bing-search-api –

+0

@Camron_Go to było pomocne. – jensph

+0

Dla interfejsu API Google: "Ten interfejs API nie jest już dostępny." –

Odpowiedz

4

Równowartość Bing będzie:

keyBing = ''  # get Bing key from: https://datamarket.azure.com/account/keys 
credentialBing = 'Basic ' + (':%s' % keyBing).encode('base64')[:-1] # the "-1" is to remove the trailing "\n" which encode adds 
searchString = '%27Xbox+One%27' 
top = 20 
offset = 0 

url = 'https://api.datamarket.azure.com/Bing/Search/Image?' + \ 
     'Query=%s&$top=%d&$skip=%d&$format=json' % (searchString, top, offset) 

request = urllib2.Request(url) 
request.add_header('Authorization', credentialBing) 
requestOpener = urllib2.build_opener() 
response = requestOpener.open(request) 

results = json.load(response) 

# process results 

Rozwiązanie dzięki: http://www.guguncube.com/2771/python-using-the-bing-search-api

+1

Wygląda na to, że wzorzec adresu URL nieco się zmienił ... Ciągle otrzymywałam 403, dopóki nie wstawię tam '/ v1': np. 'https: //api.datamarket.azure.com/Bing/SearchWeb/v1/Web? Query = ...' Nie ma tego w dokumentacji, ale w eksploratorze zbioru danych, np. https://datamarket.azure.com/dataset/8818F55E-2FE5-4CE3-A617-0B8BA8419F65 Pamiętaj też, że musisz nie tylko zarejestrować się w usłudze Azure Marketplace, ale musisz również zarejestrować się w odpowiedniej usłudze danych, np. Wyszukaj lub SearchWeb. – LarsH

+0

guguncube używa '[: -1]' po base64-encoding klucza bing, aby usunąć końcowy znak nowej linii. Musiałem to również zrobić (chociaż użyłem '.rstrip()'). Dlaczego masz '[:]'? Czy to nie jest tylko kopia napisu? – LarsH

+1

Nie pamiętam, dlaczego usunąłem -1, ale w tym czasie użyłem powyższego działa ... Dzięki za aktualizację adresu URL. – jensph

2

W Pythonie 3.0+ to wygląda:

from urllib.parse import quote_plus 
import json 
import requests 

def bing_search(query): 
    # Your base API URL; change "Image" to "Web" for web results. 
    url = "https://api.datamarket.azure.com/Bing/Search/v1/Image" 

    # Query parameters. Don't try using urlencode here. 
    # Don't ask why, but Bing needs the "$" in front of its parameters. 
    # The '$top' parameter limits the number of search results. 
    url += "?$format=json&$top=10&Query=%27{}%27".format(quote_plus(query)) 

    # You can get your primary account key at https://datamarket.azure.com/account 
    r = requests.get(url, auth=("","YOUR_AZURE_API_PRIMARY_ACCOUNT_KEY")) 
    resp = json.loads(r.text) 
    return(resp) 

ta opiera się mój funkcji wyszukiwarki internetowej here.

2

Istnieje pakiet python o nazwie PyBingSearch do tego (ok, przyznaję, napisałem kawałek pakietu).

zainstalować:

pip install py-bing-search 

W Pythonie 2 *..

from py_bing_search import PyBingImageSearch 
bing_image = PyBingImageSearch('Your-Api-Key-Here', "x-box console") 
first_fifty_results = bing_image.search(limit=50, format='json') #1-50 
print (first_fifty_results[0].media_url) 

Musisz zdobyć klucz API z Bing (zwolnić do 5k/miesiąc). Pakiet umożliwia wyszukiwanie w Internecie, obrazie, wideo i wiadomościach.

Teraz pracuje dla Python3 * jak dobrze, wystarczy zainstalować z:.

pip3 install py-bing-search 

Jest teraz nowy Microsoft Cognitive Service który przejmuje starego API. Nowy pakiet python, który może ci w tym pomóc, to PyMsCognitive.

+0

@Tristen Tao moduł wydaje się świetny, ale kiedy próbuję uruchomić wiersz, który deklaruje 'first_fifity_result', otrzymuję komunikat o błędzie: Żądanie zwrócone z kodem 401, komunikat o błędzie: Podany typ autoryzacji nie jest obsługiwany. Obsługiwane są tylko podstawowe i OAuth. " – Jstuff

+0

@Jstuff możesz wysłać raport o błędzie na stronie problemów github. Proszę podać wersję modułu + wersję pythona, dokładny kod (bez waszego autoryzacji oczywiście) i przyjrzę się :) –

+0

@Tristen Tao Czy mamy szansę omówić to tutaj? Jestem w pracy i nie mogę zalogować się na github. Używam Pythona 3.5 i po prostu próbuję użyć przykładu w https://github.com/tristantao/py-bing-search, aby zwrócić wyniki wyszukiwania internetowego i uzyskać błąd, o którym wspomniałem powyżej w powyższej linii. – Jstuff

1

Bing równoważne dla Pythona 3:

import http.client, urllib.request, urllib.parse, urllib.error, base64 
headers = { 
    # Request headers 
    'Ocp-Apim-Subscription-Key': '{subscription key}', 
} 

params = urllib.parse.urlencode({ 
    # Request parameters 
    'q': 'bill gates', 
    'count': '10', 
    'offset': '0', 
    'mkt': 'en-us', 
    'safesearch': 'Moderate', 
}) 

try: 
    conn = http.client.HTTPSConnection('api.cognitive.microsoft.com') 
    conn.request("GET", "/bing/v5.0/search?%s" % params, "{body}", headers) 
    response = conn.getresponse() 
    data = response.read() 
    print(data) 
    conn.close() 
except Exception as e: 
    print("[Errno {0}] {1}".format(e.errno, e.strerror)) 

klucz subskrypcji można znaleźć here

Powiązane problemy