我遇到了正确编码查询字符串以使用Bing图像搜索API的问题。
我获得了使用Bing API的帐户密钥,其中包含“/”和“+”。所以当我尝试Bing示例查询时
http://api.bing.net/json.aspx?AppId=MY_APP_ID&Query=xbox site:microsoft.com&Sources=Image
我得到的答复是我的AppId值无效:
{"SearchResponse":{"Version":"2.2","Query":{"SearchTerms":"xbox site\u003amicrosoft.com"},"Errors":[{"Code":1002,"Message":"Parameter has invalid value.","Parameter":"SearchRequest.AppId","Value":"*******\u002*****\u002b***","HelpUrl":"http\u003a\u002f\u002fmsdn.microsoft.com\u002fen-us\u002flibrary\u002fdd251042.aspx"}]}}
*** ***是我的帐户密钥的有效字符
我尝试了所有可能出现在脑海中并在网络中找到的方法,但仍未能解决问题。所以我尝试了:
import requests
url = "http://api.bing.net/json.aspx?AppId=****/***+***&Query=xbox site:microsoft.com&Sources=Image"
r = requests.get(url)
我收到错误,该值无效“**** \ u002 *** ***”
我尝试使用urllib2做同样的事情,尝试编码并引用整个查询和帐户密钥。分别引用请求的每个部分的代码如下:
import urllib2
urlStart = u"http://api.bing.net/json.aspx?AppId=%s&Query=xbox"
quotedUrlStart = urllib2.quote(urlStart.encode("utf8"), safe="%/:=&?~#+!$,;'@()*[]")
urlEnd = u" site:microsoft.com&Sources=Image"
quotedUrlEnd = urllib2.quote(urlEnd.encode("utf8"), safe="")
key = u"**/**+**"
quotedKey = urllib2.quote(key.encode("utf8") , safe="%:=&?~#!$,;'@()*[]")
fullUrl = (quotedUrlStart % quotedKey) + quotedUrlEnd
reply = urllib2.urlopen(fullUrl).read()
print reply
我还尝试用%2F替换“/”,用%2B替换“+”,但错误是相同的。 对我来说什么是混乱是我必须引用的,什么不是。到目前为止,我对这些事情的工作原理并不清楚。我想我必须对所有内容进行编码并以不同的方式引用 - 在一个地方插入斜线而不要在另一个地方进行搜索。
此问题解决了同一问题:XCODE Swift Replacing HTTP-Get App-ID with a space 关于逃避符号的SO也有很多问题,但它们对我没有帮助
我感谢你们的时间