Echec d'une requête API Bing sur l'authentification

Pourtant, je m'authentifie

L'auteur de ce sujet a trouvé une solution à son problème.
Staff
Auteur du sujet

Bonjour à tous

J'ai un besoin simple : j'ai un nombre assez léger de mot clefs (disons 200, c'est vraiment cet ordre d'idée), pour chacun de ces mots, je veux mettre une thumbnail que j'ai trouvé sur le web.

Comme je ne suis pour l'instant qu'à la phase de POC, je me dis "tiens, je vais automatiser tout ça et je vais trouver des images sur le web".

Je fais donc un script python qui doit aller chercher des images sur l'API Bing. Seulement, j'ai sans cesse cette erreur :

urllib.error.HTTPError: HTTP Error 401: The authorization type you provided is not supported. Only Basic and OAuth are supported

Pourtant, comme vous pouvez le constater, j'utilise bien une Auth basique :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# coding: utf-8
from os.path import isfile as is_file
import urllib.request as urllib2
import json
import random
import base64

def get_first_bing_image(product):

    product_split = product.split(" ")
    if(len(product_split) > 3):
        product = " ".join(product_split[0:3])
    key = 'mon vrai nom n est pas artragis'
    query = product
    query = urllib2.quote(query)
    # create credential for authentication
    user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FDM; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)'
    credentials = base64.b64encode(bytes(':%s' % key, 'ascii'))[:-1]
    auth = 'Basic %s' % credentials
    url = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/Image?Query=%27'+query+'%27&$top=5&$format=json'
    request = urllib2.Request(url)
    request.add_header('Authorization', auth)
    request.add_header('User-Agent', user_agent)
    request_opener = urllib2.build_opener()
    response = request_opener.open(request) 
    response_data = response.read()
    json_result = json.loads(response_data)
    result_list = json_result['d']['results']
    print(result_list)
    return result_list[0]['MediaUrl']
+0 -0
Staff
Auteur du sujet

Mon sauveur ! C'est effectivement ça !

Du coup je me suis reporté sur une lib opensource qui se base sur requests.

https://github.com/xthepoet/pyBingSearchAPI/blob/master/bing_search_api.py

je vais la forker pour la rendre py3 compatible et améliorer la simplicité de l'API. Merci en tout cas.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte