我有 Twitter 的基本付费套餐。我正在尝试使用此代码获取用户信息:
import requests
import json
import config
bearer_token = config.bearer_token
url = "https://api.twitter.com/2/users"
params = {'ids': '[4919451, 14151086]',
'user.fields':'name,description,location,public_metrics,username,created_at,'
}
def bearer_oauth(r):
"""
Method required by bearer token authentication.
"""
r.headers["Authorization"] = f"Bearer {bearer_token}"
r.headers["User-Agent"] = "v2UserLookupPython"
return r
def connect_to_endpoint(url,params):
response = requests.request("GET", url, auth=bearer_oauth, params=params)
print(response.status_code)
if response.status_code != 200:
raise Exception(
"Request returned an error: {} {}".format(
response.status_code, response.text
)
)
return response.json()
def main():
url = create_url()
json_response = connect_to_endpoint(url,params)
json_response = flatten(json_response)
d = json.dumps(json_response, indent=4, sort_keys=True)
return d
if __name__ == "__main__":
main()
我收到此错误:
异常:请求返回错误:400 {"errors":[{"parameters":{"ids":["4919451, 14151086"]},"message":"`ids` 查询参数值 [14151086] 是无效"},{"parameters":{"user.fields":["name,description,location,public_metrics,username,created_at,"]},"message":"`user.fields` 查询参数值 [ ] 不是 [connection_status,created_at,description,entities,id,location,most_recent_tweet_id,name,pinned_tweet_id,profile_image_url,protected,public_metrics,receives_your_dm,subscription_type,url,用户名,verified,verified_type,withheld]"}],"标题之一":"请求无效","detail":"您请求的一个或多个参数无效。","type":"https://api.twitter.com/2/problems/invalid-request"}
你能帮我改进 connect_to_endpoint 函数使其正常工作吗? 提前感谢您的回答。
根据您收到的错误消息,您需要更正您的请求数据。您传递的
ids
不是您可能认为的 list
,而是普通字符串 [id,id]
,因此应删除 [
和 ]
字符。另外 user_fields
似乎包含太多 ,
(在最后),这使得 API 期望另一个字段。由于没有任何内容,您会收到空的文件名错误。一旦改正,这个应该会让 API 更加满意:
params = {
'ids': '4919451,14151086',
'user.fields': 'name,description,location,public_metrics,username,created_at'
}