Introduction
L'API officielle de Bing Search sera bientôt retirée le 11 août 2025. (ou a déjà pris sa retraite selon le moment où vous lisez ceci) et vous recherchez peut-être un remplaçant approprié.
Chez SerpApi, nous fournissons notre propre API de recherche Bing qui peut être facilement intégrée pour minimiser les interruptions de votre service une fois les API officielles retirées.
Dans cet article de blog, je vais décrire les modifications de base que vous devrez apporter pour passer à l'API Bing Search de SerpApi.

Étape 1 : Compte SerpApi
Si vous n'avez pas encore de compte chez nous, votre première étape sera de créer un compte. (nous proposons un compte gratuit avec 100 recherches gratuites par mois).
Une fois que vous avez inscrit et vérifié votre compte, vous devrez prendre note de votre clé API SerpApi trouvée sur votre tableau de bord afin de pouvoir l'utiliser dans les étapes suivantes.

Étape 2 : point de terminaison et authentification
Nous allons d'abord commencer par modifier le point de terminaison et l'authentification pour passer de l'utilisation du point de terminaison officiel Bing et de la clé d'abonnement Azure à l'utilisation du point de terminaison SerpApi et d'une clé API SerpApi.
Une version trop simplifiée de votre configuration actuelle pourrait ressembler à ceci :
# environment
subscription_key = 'AZURE-SUBSCRIPTION-KEY'
endpoint="https://api.bing.microsoft.com/v7.0/search"
# search params
query = 'Bing Search API'
mkt="en-US"
headers = { 'Ocp-Apim-Subscription-Key': subscription_key }
params = { 'q': query, 'mkt': mkt }
# request
response = requests.get(endpoint, headers=headers, params=params)
response.raise_for_status()
print("\nJSON Response:\n")
pprint(response.json())
Vous devrez d'abord modifier les variables d'environnement dont nous disposons pour utiliser votre clé API SerpApi et notre point de terminaison :
# environment
- subscription_key = 'AZURE-SUBSCRIPTION-KEY'
+ subscription_key = 'SERPAPI-API-KEY'
- endpoint="https://api.bing.microsoft.com/v7.0/search"
+ endpoint="https://serpapi.com/search.json"
Nous allons ensuite nous authentifier via le api_key paramètre de requête et supprimez entièrement les en-têtes car ils ne sont pas nécessaires pour tout appel à notre point de terminaison.
Nous allons également ajouter 'engine': 'bing' comme paramètre afin que nous utilisions toujours Bing pour les résultats de recherche.
# search params
query = 'Bing Search API'
mkt="en-US"
- headers = { 'Ocp-Apim-Subscription-Key': subscription_key }
- params = { 'q': query, 'mkt': mkt }
+ params = { 'engine': 'bing', 'q': query, 'mkt': mkt, 'api_key': subscription_key }
# request
- response = requests.get(endpoint, headers=headers, params=params)
+ response = requests.get(endpoint, params=params)
response.raise_for_status()
Si votre implémentation est relativement simple et utilise uniquement le q et mkt paramètres, alors lorsque vous effectuez ces modifications, vous devriez voir une réponse complète revenir de notre point de terminaison à ce stade. Le format de réponse de l'API officielle diffère du nôtre, il y a donc encore des modifications à apporter, mais nous sommes à mi-chemin.
SerpApi n'utilise pas d'en-têtes pour les recherches, mais les fonctionnalités fournies par les en-têtes de requête API officiels suivants peuvent être largement reproduites par d'autres moyens :
Accept-Language– Langue à utiliser pour l'interface renvoyée. Vous ne pouvez pas définir cela directement dans notre API, mais nous le déduisons dumktcode fourniOcp-Apim-Subscription-Key– Authentification par clé API. Comme décrit précédemment, nous utilisons le paramètre de requêteapi_keypour l'authentificationPragma– Bascule l'état du cache, par exempleno-cache. Nous utilisons le paramètre de requêteno_cache=truepour désactiver la mise en cache, sinon les recherches sont mises en cache par défautUser-Agent– L'agent utilisateur à utiliser pour la recherche peut être utilisé pour obtenir des résultats par appareil. Nous utilisons le paramètre de requêtedeviceavec optionsdesktop,tabletetmobilepour y parvenirX-Search-Location– Emplacement à utiliser pour la recherche, par exemple (lat:55;long:-111;re:22oudisp:Seattle, Washington)- Pour
latetlongnous utilisons les paramètres de requêtelatetlon - Pour
dispnous utilisons le paramètre de requêtelocation - Tous les autres types de valeurs tels que le rayon ou l'horodatage ne sont pas pris en charge par notre API
- Pour
L'API officielle prend en charge un certain nombre d'en-têtes, les suivants ne sont absolument pas pris en charge par notre API :
Accept– Utilisé pour spécifier soitapplication/jsonouapplication/ld+json. Utilisation du paramètre de requêteoutputnotre API ne peut être basculée qu'entrejsonouhtmlX-MSEdge-ClientID– Utilisé par Bing pour attribuer le trafic sur un itinéraire cohérentX-MSEdge-ClientIP– Utilisé par Bing pour déduire la localisation de l'utilisateur
Nous n'utilisons aucun en-tête de réponse pour transmettre des informations sur un résultat de recherche. Par conséquent, les en-têtes de réponse officiels de l'API suivants ne seront pas visibles lors de l'utilisation de notre API :
BingAPIs-Market– Marché utilisé par la demandeBingAPIs-TraceId– ID utilisé par Bing pour établir une corrélation avec leurs journauxRetry-After– Informations sur la limitation du débitX-MSEdge-ClientID– ID client attribué/utilisé
Pour illustrer avec un exemple, si vous avez utilisé des en-têtes dans votre script et qu'ils ressemblaient à ceci :
headers = {
'Ocp-Apim-Subscription-Key': 'AZURE-SUBSCRIPTION-KEY',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML; like Gecko) Mobile/10B142 iPhone4;1 BingWeb/3.03.1428.20120423',
'X-Search-Location': 'lat:55;long:-111;re:22',
'X-MSEdge-ClientIP': '202.89.233.101',
'Pragma': 'no-cache',
}
params = {
'q': 'Bing Search API',
'mkt': 'en-US',
}
Vous pourrez alors conserver la plupart de ces fonctionnalités autres que l'attribution d'adresse IP avec les modifications suivantes :
headers = {
- 'Ocp-Apim-Subscription-Key': 'AZURE-SUBSCRIPTION-KEY',
- 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML; like Gecko) Mobile/10B142 iPhone4;1 BingWeb/3.03.1428.20120423',
- 'X-Search-Location': 'lat:55;long:-111;re:22',
- 'X-MSEdge-ClientIP': '202.89.233.101',
- 'Pragma': 'no-cache',
}
params = {
+ 'engine': 'bing',
'q': 'Bing Search API',
'mkt': 'en-US',
+ 'lat': '55',
+ 'lon': '-111',
+ 'device': 'mobile',
+ 'no_cache': 'true',
+ 'api_key': 'SERPAPI-API-KEY',
}
Étape 4 : Paramètres de requête
Les paramètres de requête suivants se comportent de la même manière dans l'API officielle et dans notre API, vous n'avez donc pas besoin de les ajuster :
q– Le terme de requête de recherchemkt– Le marché des résultats de recherchecc– Le pays pour les résultats de la recherchecount– Le nombre de résultats à retournersafeSearch– Le mode à utiliser pour une recherche sécurisée
Le paramètre de requête suivant se comporte de la même manière, mais porte un nom différent dans notre API :
offset– Le nombre de résultats à ignorer avant de renvoyer les résultats de la recherche. Ceci s'appellefirstdans notre API
Les paramètres de requête suivants peuvent être pris en charge par d'autres moyens dans notre API :
freshness– Contrôle l'âge ou la plage de dates des résultats de recherche. Ceux-ci peuvent être atteints en utilisant lefilterparamètre dans notre API avec les valeurs suivantes :- Valeur
Daydevientex1:"ez1"(dernières 24 heures) - Valeur
Weekdevientex1:"ez2"(7 derniers jours) - Valeur
Monthdevientex1:"ez3"(le mois dernier) - L'année (non prise en charge par l'API officielle) devient
ex1:"ez4"(l'année dernière) - Date unique (par ex.
2019-02-04) devientex1:"ez5_17931_17931"(nombre de jours depuis le 01/01/1970) - Plage de dates (par exemple
2019-02-04..2019-02-06) devient semblable àex1:"ez5_17931_17933"(nombre de jours depuis le 01/01/1970)
- Valeur

Les paramètres de requête restants ne sont pas pris en charge dans notre API, mais vous pouvez obtenir un résultat similaire par programmation :
answerCount– Nombre de types de réponses à inclure dans les résultats de recherche. Vous devrez ignorer/inclure de manière sélective les types de résultats après avoir reçu une réponse pour y parvenir.promote– Types de réponses à promouvoir dans les résultats de recherche. Vous devrez promouvoir ou rétrograder de manière sélective les types de résultats après avoir reçu une réponse pour y parvenir.responseFilter– Types de réponses à recevoir pour être renvoyés ou exclus dans les résultats de recherche. Vous devrez inclure/rejeter de manière sélective les types de résultats après avoir reçu une réponse pour y parvenir.setLang– Langue à utiliser pour l'interface renvoyée. Vous ne pouvez pas définir cela directement dans notre API, mais nous le déduisons dumktcode fournitextDecorations– Si les extraits doivent ou non contenir des décorations de mise en évidence. Notre API fournira toujours un texte brutsnippetattribut et un secondairesnippet_highlighted_wordsattribut de tableau lorsque cela est possibletextFormat– Format des décorations du texte (brut ou HTML). Vous devrez créer manuellement le format souhaité en utilisantsnippetet lesnippet_highlighted_wordstableau si présent
Exemples de modifications des paramètres de requête
Voici un exemple pour illustrer où divers paramètres de requête ont été utilisés avec l'API officielle :
params = {
'q': 'Bing Search API',
'mkt': 'en-US',
'offset': 10,
'count': 5,
'freshness': '2019-02-04',
'textDecorations': 'false',
'textFormat': 'raw',
}
Tous les paramètres de requête ci-dessus, à l'exception de textDecorations et textFormat peut être utilisé tel quel ou porté pour être utilisé avec notre API.
Voici les modifications qui devraient être apportées à l’exemple pour y parvenir :
params = {
+ 'engine': 'bing',
'q': 'Bing Search API',
'mkt': 'en-US',
- 'offset': 10,
+ 'first': 10,
'count': 5,
- 'freshness': '2019-02-04',
+ 'filters': 'ex1:"ez5_17931_17931"',
- 'textDecorations': 'false',
- 'textFormat': 'raw',
}
Étape 5 : Format de réponse
Bien que les étapes précédentes aient toutes été assez simples, les modifications apportées à la gestion du format de réponse seront probablement les plus importantes pour vous, en fonction de la quantité de données que vous avez utilisée.
En raison du grand nombre d'objets de réponse possibles disponibles, je ne vais en aborder que quelques-uns directement dans cet article de blog.
Pages Web
Revenu dans le webPages.value clé (un tableau de résultats) dans l'API officielle, notre API renvoie l'équivalent au niveau supérieur organic_results clé (un tableau de résultats).

L'URL de recherche Bing qui se trouverait sous webPages.webSearchUrl dans l'API officielle peut être trouvé sous search_metadata.bing_url dans notre API.
Lorsqu'il est disponible, le nombre estimé de résultats précédemment trouvés sous webPages.totalEstimatedMatches sera disponible sous search_information.total_results dans notre API.
Cartographie des résultats de pages Web
Les attributs suivants sur les objets de résultat de la page Web peuvent être mappés et utilisés sans modification :
name– Nom de la page Web. Devienttitlesur notre APIurl– URL de la page Web. Devientlinksur notre APIdisplayUrl– URL affichée de la page Web. Devientdisplayed_linksur notre APIsnippet– Extrait décrivant la page Web. Aucun changement de nom.- Afin de conserver la fonctionnalité de surbrillance, vous devez également utiliser le
snippet_highlighted_wordstableau (si disponible) depuis notre API pour le mettre en évidence dans votre application
- Afin de conserver la fonctionnalité de surbrillance, vous devez également utiliser le
Le dateLastCrawled et datePublished les attributs ne sont pas disponibles et n'ont pas d'équivalent, cependant, les datePublishedDisplayText a une propriété similaire dans notre résultat nommé date.
Le date L'attribut de notre API renverra la date affichée dans le résultat, bien qu'elle puisse être sous la forme d'une date formatée (par exemple Oct 29, 2020) ou une date relative (par exemple 3 days ago).
Le deepLinks L'attribut dans l'API officielle peut être quelque peu cartographié en lisant le sitelinks.inline et sitelinks.expanded attributs qui contiennent chacun des objets avec au moins les attributs title, linket tracking_link en eux.
Beaucoup plus est disponible sur ces résultats organiques lorsque vous utilisez notre API, alors n'oubliez pas de consulter la page de documentation de l'API Bing Organic Results.
Recherches associées
Revenu dans le relatedSearches.value key (tableau de recherches associées) dans l'API officielle, notre API renvoie l'équivalent au niveau supérieur related_searches clé (tableau de recherches associées).
Mappage des résultats de recherche associés
Les attributs suivants sur les objets de résultats de recherche associés peuvent être mappés et utilisés sans modification :
displayText– Afficher le texte de la recherche associée. Devientquerysur notre API, toujours non formatétext– Texte non formaté de la recherche associée. Devientquerysur notre APIwebSearchUrl– URL pour la recherche Bing. Devientlinksur notre API
Images
Revenu dans le images.value clé (tableau d'images) dans l'API officielle, notre API renvoie l'équivalent dans le inline_images.items clé (tableau d’images).

L'URL de recherche Bing trouvée sur images.webSearchUrl dans l'API officielle peut être trouvé à l'adresse inline_images.see_more_link dans le nôtre.
Le images.readLink L'attribut de l'API officielle qui fournit l'URL pour la recherche d'images API équivalente peut être trouvé à l'adresse inline_images.serpapi_link dans notre API.
Le isFamilyFriendly L'attribut dans l'API officielle n'a pas d'équivalent dans notre API.
Mappage des résultats d’image
Les attributs suivants sur les objets de résultat d'image peuvent être mappés et utilisés sans modification :
name– Nom de l'image résultat. Devienttitlesur notre APIthumbnailUrl– URL vers la vignette de l'image. Devientthumbnailsur notre APIwebSearchUrl– URL pour afficher l'image dans la recherche Bing. Devientlinksur notre APIhostPageUrl– URL sur laquelle se trouve l'image. Devientsource.linksur notre API
Quelle est la prochaine étape
Si vous avez pu faire le pas en utilisant tout ce que nous avons couvert dans cet article de blog, excellent travail, vous n'avez plus rien à faire !
Sinon, si vous utilisiez beaucoup plus de l'API officielle de recherche Bing que ce que nous avons pu couvrir ici, vous voudrez alors jeter un œil à notre documentation sur l'API de recherche Bing et à tout ce que nous fournissons pour combler le reste des lacunes.
Cela vaut également la peine de jeter un œil à notre Bing Playground et d'effectuer quelques recherches pour tout voir en action.
C'est tout pour le moment, j'espère que cela vous a été utile pour démarrer votre transition vers notre API de recherche Bing !




