Python:Foursquare API 和请求需要 cookie 和 javascript

问题


我正在尝试联系 Foursquare API,特别是 checkin/resolve 端点。在过去,这是可行的,但最近我被一条错误消息阻止,说我是机器人,并且无法读取 cookie 和 javascript。


代码


response = "Swarmapp URL" # from previous functions, this isn't the problem

checkin_id = response.split("c/")[1] # To get shortID

url = "https://api.foursquare.com/v2/checkins/resolve"

params = dict(

 client_id = "client_id",

 client_secret = "client_secret",

 shortId = checkin_id,

 v = "20180323")

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}

time.sleep(8.5) # Limit of 500 requests an hour

resp = requests.get(url = url, params=params, headers = headers)


data = json.loads(resp.text)


此代码适用于大约 30-40 个请求,然后出错并返回一个 HTML 文件,其中包括:“请验证您是人类”、“访问此页面已被拒绝,因为我们认为您正在使用自动化工具浏览该网站。” 、“您的浏览器不支持cookies”等。


我试过谷歌搜索并在这个网站上搜索类似的错误,但我找不到任何有帮助的东西。Foursquare API 也没有说明这一点。


有什么建议么?


一只斗牛犬
浏览 115回答 1
1回答

繁星淼淼

回答 根据 Foursquare API 文档,这段代码应该可以工作:import json, requestsurl = 'https://api.foursquare.com/v2/checkins/resolve'params = dict(  client_id='CLIENT_ID',  client_secret='CLIENT_SECRET',  v='20180323',  shortId = 'swarmPostID')resp = requests.get(url=url, params=params)data = json.loads(resp.text)然而,Foursquare 使用的机器人检测显然与 API 的功能相矛盾。我发现try except使用等待计时器实现捕获解决了这个问题。import json, requestsurl = 'https://api.foursquare.com/v2/checkins/resolve'params = dict(  client_id='CLIENT_ID',  client_secret='CLIENT_SECRET',  v='20180323',  shortId = 'swarmPostID')try:    resp = requests.get(url=url, params=params)except:    time.sleep(60) # Avoids bot detection    resp = requests.get(url=url, params=params)    try:        resp = requests.get(url=url, params=params)    except:        print("Post is private or deleted.")        continuedata = json.loads(resp.text)这似乎是一个非常奇怪的修复。Foursquare 要么实施了与其自身功能相矛盾的 DDoS 预防系统,要么他们的checkin/resolve端点被破坏。无论哪种方式,代码都有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python