Daf*_*der 6 twitter python-3.x twitterapi-python
一直在玩 Twitter API。事情进展顺利,直到我添加了开始和结束时间以及搜索的粒度。我相当有信心字符串值是正确的,按照 Twitter api 文档,并正确添加到参数中。但是我的参数做错了,有人可以帮助我吗?
有效的代码,IE 会产生 200 响应和推文:
keywords = 'telsa'
api, query = 'https://api.twitter.com/2', '/tweets/search/recent'
request = f'{api}{query}'
params = {'query': keywords,
'tweet.fields': 'created_at,lang', # no space before lang
'max_results': '10'}
header = {'authorization':f'Bearer {bearer_token}'}
response = requests.get(request, headers=header, params=params)
if response: # boolean True if response is 200,
print(response.response.json())
else:
print(response)
print(params)
Run Code Online (Sandbox Code Playgroud)
不起作用的代码:400 响应:添加 start_time、end_time、粒度
<snip>
header = {'authorization':f'Bearer {bearer_token}'}
**************** NEW CODE **************************
# Get datetime for now and 7 days ago, correctly formatted for Twitter API
dtformat = '%Y-%m-%dT%H:%M:%SZ'
from datetime import datetime, timedelta
time = datetime.now()
start_time = time - timedelta(days=7)
# convert to strings
start_time, end_time = start_time.strftime(dtformat), time.strftime(dtformat)
# Add new parameters to params dict
params['start_time'] = start_time
params['end_time'] = end_time
params['granularity'] = 'HOUR'
****************************************************
response = requests.get(request, headers=header, params=params)
<snip>
Run Code Online (Sandbox Code Playgroud)
..以及最后打印的参数:
params: {'query': 'telsa', 'tweet.fields': 'created_at,lang', 'max_results': '10', 'start_time': '2021-03-14T14:14:44Z', 'end_time': '2021-03-21T14:14:44Z', 'granularity': 'HOUR'}
Run Code Online (Sandbox Code Playgroud)
Twitter API 文档显示了 start_time、end_time 示例值。它们的格式相同。
最近发布的使用 API v2 的教程以相同的方式附加新参数。
添加 3 个新时间变量的任意组合都会导致 400 响应。
Windows 10、64(如果有的话)
我想你会收到这个错误。
Twitter API 使用 UTC 时间,该时间可能早于或晚于您的当地时间。
尝试从此改变
# Get datetime for now and 7 days ago, correctly formatted for Twitter API
dtformat = '%Y-%m-%dT%H:%M:%SZ'
from datetime import datetime, timedelta
time = datetime.now()
start_time = time - timedelta(days=7)
# convert to strings
start_time, end_time = start_time.strftime(dtformat), time.strftime(dtformat)
Run Code Online (Sandbox Code Playgroud)
对此
# Get datetime for now and 7 days ago, correctly formatted for Twitter API
dtformat = '%Y-%m-%dT%H:%M:%SZ'
from datetime import datetime, timedelta
# time = datetime.now() gives you the local time whereas time = datetime.utcnow()
# gives the local time in UTC. Hence now() may be ahead or behind which gives the
# error
time = datetime.utcnow()
start_time = time - timedelta(days=7)
# Subtracting 15 seconds because api needs end_time must be a minimum of 10
# seconds prior to the request time
end_time = time - timedelta(seconds=15)
# convert to strings
start_time, end_time = start_time.strftime(dtformat),
end_time.strftime(dtformat)
Run Code Online (Sandbox Code Playgroud)
不确定这是否有帮助,但我收到了以下 URL 的良好响应(我也在使用不记名令牌)并传递了 start_time、end_time 和粒度:
url_link = "https://api.twitter.com/2/tweets/counts/recent?query=(%23ethereum OR %23eth)&granularity=day&start_time=2021-11-23T00:00:00Z&end_time=2021-11-23T23:59:59Z"
def connect_to_endpoint(url, params):
response = requests.get(url, auth=bearer_oauth, params=params)
print(response.status_code)
if response.status_code != 200:
raise Exception(response.status_code, response.text)
return response.json(
def main():
json_response = connect_to_endpoint(url_link, {})
print(json.dumps(json_response, indent=4, sort_keys=True))
Run Code Online (Sandbox Code Playgroud)
收到回复:200
| 归档时间: |
|
| 查看次数: |
2493 次 |
| 最近记录: |