Bing 认知网络搜索 API 与 Python 3
Bing Congitive Web Search API with Python 3
嗨 Whosebug 社区
我正在尝试通过 Python 3 脚本访问新的 Bing 认知搜索 API。我能够找到使用 Bing Search 2.0(自贬值以来)的威胁,但无法识别新 API 和 Python 3 的示例。我使用了以下代码:
import urllib.parse
import urllib.request
import json
import base64
def bing_search(query):
key = 'mysubscription_key'
query = urllib.parse.quote(query)
#Create credentials 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)'
encoded = base64.b64encode(bytes(':%s' % key, 'utf-8'))
credentials = encoded[:-1] # the "-1" is to remove the trailing "\n" which encode adds
print(credentials)
auth = 'Basic %s' % credentials
print(auth)
url = 'https://api.cognitive.microsoft.com/bing/v5.0/search?q=' + query + '&mkt=en-us'
print(url)
#Create the API request
urlrequest = urllib.request.urlopen(url) # in Python3 urllib.request(...) becomes urllib.request.open(...)
urlrequest.add_header('Authentication', auth)
urlrequest.add_header('User Agent', user_agent)
request_opener = urllib.request.build_opener()
# Handle the response
response = request_opener.open(urlrequest)
results = json.load(response)
result_list = results['webPages']['values']
print(result_list)
bing_search('good news')
不幸的是,我收到以下 'Access denied' 错误。谁能给我指出正确的方向?
C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\python.exe C:/Users/Admin/PycharmProjects/momely/placementarchitect/bingtest.py
b'OmZhNTlmNTBlMmFmMjQyZjhhYmE5MTZlNmZkYThhMDM'
Basic b'OmZhNTlmNTBlMmFmMjQyZjhhYmE5MTZlNmZkYThhMDM'
https://api.cognitive.microsoft.com/bing/v5.0/search?q=good%20news&mkt=en-us
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/bingtest.py", line 34, in <module>
bing_search('good news')
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/bingtest.py", line 22, in bing_search
urlrequest = urllib.request.urlopen(url) # in Python3 urllib.request(...) becomes urllib.request.open(...)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 162, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 471, in open
response = meth(req, response)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 581, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 509, in error
return self._call_chain(*args)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 443, in _call_chain
result = func(*args)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 589, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 401: Access Denied
谢谢你
M.
认证不是通过基本认证而是通过自定义认证header Ocp-Apim-Subscription-Key
:
Subscription key which provides access to this API.
可以在您的 subscriptions
中找到
在 https://www.microsoft.com/cognitive-services/en-us/bing-web-search-api
查看完整详情
假设 key
变量保存订阅密钥,您需要做的只是 urlrequest.add_header('Ocp-Apim-Subscription-Key', key)
作为一个小建议,使用 python-requests 可以大大简化您的代码。一个最小的例子可以是:
import requests
def bing_search(query):
url = 'https://api.cognitive.microsoft.com/bing/v5.0/search'
# query string parameters
payload = {'q': query}
# custom headers
headers = {'Ocp-Apim-Subscription-Key': 'xxxxxxxxxxxxx'}
# make GET request
r = requests.get(url, params=payload, headers=headers)
# get JSON response
return r.json()
j = bing_search('good news')
print(j.get('webPages', {}).get('value', {}))
您还应该检查 py-ms-cognitive 包 Python。它是认知服务 API 的包装器,目前支持网络搜索。我也在寻找反馈/合作者,所以请随时提出问题,进行 PR 等
要安装:
pip install py-ms-cognitive
使用:
from py_ms_cognitive import PyMsCognitiveWebSearch
web_bing = PyMsCognitiveWebSearch('api_key', "xbox")
first_fity_results = web_bing.search(limit=50)
second_fity_results = web_bing.search(limit=50)
print second_fifty_results[0].url
嗨 Whosebug 社区
我正在尝试通过 Python 3 脚本访问新的 Bing 认知搜索 API。我能够找到使用 Bing Search 2.0(自贬值以来)的威胁,但无法识别新 API 和 Python 3 的示例。我使用了以下代码:
import urllib.parse
import urllib.request
import json
import base64
def bing_search(query):
key = 'mysubscription_key'
query = urllib.parse.quote(query)
#Create credentials 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)'
encoded = base64.b64encode(bytes(':%s' % key, 'utf-8'))
credentials = encoded[:-1] # the "-1" is to remove the trailing "\n" which encode adds
print(credentials)
auth = 'Basic %s' % credentials
print(auth)
url = 'https://api.cognitive.microsoft.com/bing/v5.0/search?q=' + query + '&mkt=en-us'
print(url)
#Create the API request
urlrequest = urllib.request.urlopen(url) # in Python3 urllib.request(...) becomes urllib.request.open(...)
urlrequest.add_header('Authentication', auth)
urlrequest.add_header('User Agent', user_agent)
request_opener = urllib.request.build_opener()
# Handle the response
response = request_opener.open(urlrequest)
results = json.load(response)
result_list = results['webPages']['values']
print(result_list)
bing_search('good news')
不幸的是,我收到以下 'Access denied' 错误。谁能给我指出正确的方向?
C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\python.exe C:/Users/Admin/PycharmProjects/momely/placementarchitect/bingtest.py
b'OmZhNTlmNTBlMmFmMjQyZjhhYmE5MTZlNmZkYThhMDM'
Basic b'OmZhNTlmNTBlMmFmMjQyZjhhYmE5MTZlNmZkYThhMDM'
https://api.cognitive.microsoft.com/bing/v5.0/search?q=good%20news&mkt=en-us
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/bingtest.py", line 34, in <module>
bing_search('good news')
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/bingtest.py", line 22, in bing_search
urlrequest = urllib.request.urlopen(url) # in Python3 urllib.request(...) becomes urllib.request.open(...)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 162, in urlopen
return opener.open(url, data, timeout)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 471, in open
response = meth(req, response)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 581, in http_response
'http', request, response, code, msg, hdrs)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 509, in error
return self._call_chain(*args)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 443, in _call_chain
result = func(*args)
File "C:\Users\Admin\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 589, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 401: Access Denied
谢谢你 M.
认证不是通过基本认证而是通过自定义认证header Ocp-Apim-Subscription-Key
:
Subscription key which provides access to this API.
可以在您的 subscriptions
中找到在 https://www.microsoft.com/cognitive-services/en-us/bing-web-search-api
查看完整详情假设 key
变量保存订阅密钥,您需要做的只是 urlrequest.add_header('Ocp-Apim-Subscription-Key', key)
作为一个小建议,使用 python-requests 可以大大简化您的代码。一个最小的例子可以是:
import requests
def bing_search(query):
url = 'https://api.cognitive.microsoft.com/bing/v5.0/search'
# query string parameters
payload = {'q': query}
# custom headers
headers = {'Ocp-Apim-Subscription-Key': 'xxxxxxxxxxxxx'}
# make GET request
r = requests.get(url, params=payload, headers=headers)
# get JSON response
return r.json()
j = bing_search('good news')
print(j.get('webPages', {}).get('value', {}))
您还应该检查 py-ms-cognitive 包 Python。它是认知服务 API 的包装器,目前支持网络搜索。我也在寻找反馈/合作者,所以请随时提出问题,进行 PR 等
要安装:
pip install py-ms-cognitive
使用:
from py_ms_cognitive import PyMsCognitiveWebSearch
web_bing = PyMsCognitiveWebSearch('api_key', "xbox")
first_fity_results = web_bing.search(limit=50)
second_fity_results = web_bing.search(limit=50)
print second_fifty_results[0].url