我第一次使用python请求库,我很困惑。当我在for循环中使用不同的基本URL运行下面的函数时,它似乎收到响应,但两个URL返回的内容相同。
如果我在浏览器中查看API网址,那么我发现它是两次返回的第一个网址的内容。我错过了什么?
base_urls = ['http://kaweki.wikia.com/','http://solarmovie.wikia.com/']
def getEdits(wikiObj, limit=500):
payload = {'limit': limit}
r = requests.get('{}api/v1/Activity/LatestActivity'.format(wikiObj),
params=payload)
edits = r.json()
return edits['items']
for url in base_urls:
print getEdits(url)
答案 0 :(得分:3)
API端点被打破"。重复刷新浏览器中的两个端点会使它们在两个响应之间来回切换。您可以通过刷新一次请求六次来复制它,然后刷新另一个请求六次并且每六次请求来回切换。
请求A:
http://solarmovie.wikia.com/api/v1/Activity/LatestActivity
请求B:
http://kaweki.wikia.com/api/v1/Activity/LatestActivity
回应1:
{
items: [
{
article: 1461,
user: 26127114,
revisionId: 14,
timestamp: 1424389645
},
{
article: 1461,
user: 26127114,
revisionId: 13,
timestamp: 1424389322
},
{
article: 1461,
user: 26127114,
revisionId: 12,
timestamp: 1424389172
},
{
article: 1461,
user: 26127114,
revisionId: 5,
timestamp: 1424388924
}
],
basepath: "http://kaweki.wikia.com"
}
回应2:
{
items: [
{
article: 1461,
user: 26127165,
revisionId: 14,
timestamp: 1424389107
},
{
article: 1461,
user: 26127165,
revisionId: 7,
timestamp: 1424388706
}
],
basepath: "http://solarmovie.wikia.com"
}
答案 1 :(得分:3)
是服务器端的错误,它会忽略缓存控制标头等一段时间。
引入5秒(甚至更短的时间段)的睡眠可以解决这个问题。我已经标记了下面添加的行:
import requests
import json
from time import sleep #ADDED
base_urls = ['http://kaweki.wikia.com/', 'http://solarmovie.wikia.com/']
def getEdits(wikiObj, limit=500):
payload = {'limit': limit}
url = '{}api/v1/Activity/LatestActivity'.format(wikiObj)
r = requests.get(url, params=payload)
edits = json.loads(r.content)
return edits['items']
for url in base_urls:
print getEdits(url)
sleep(5) # ADDED
<强>输出强>
[{u'article': 1461, u'revisionId': 14, u'user': 26127114, u'timestamp': 1424389645}, {u'article': 1461, u'revisionId': 13, u'user': 26127114, u'timestamp': 1424389322}, {u'article': 1461, u'revisionId': 12, u'user': 26127114, u'timestamp': 1424389172}, {u'article': 1461, u'revisionId': 5, u'user': 26127114, u'timestamp': 1424388924}]
[{u'article': 1461, u'revisionId': 14, u'user': 26127165, u'timestamp': 1424389107}, {u'article': 1461, u'revisionId': 7, u'user': 26127165, u'timestamp': 1424388706}]
答案 2 :(得分:0)
我下载并运行了脚本并获得了明显相同的输出。但是,脚本似乎没有任何问题!出于某种原因,我认为输出完全相同。尝试将return edits['items']
更改为仅return edits
,并且您会在这种情况下看到输出不同。如果代码中确实存在错误,那么应该可以帮助您隔离它;如果没有,那么也许你可以弄清楚为什么真正的输出是这样的。