如何在python中使用tweepy访问带有承载令牌的tweet ?



当我注册TwitterAPI用于研究,他们给了我3个密钥:API密钥,API密钥和承载令牌。但是在Hello Tweepy的例子中,使用了4个密钥:consumer_key, consumer_secret, access_token, access_token_secret。显然,前两个密钥是相互映射的,但是我没有看到consumer_secret和access_token是如何映射到Bearer Token的。我正在使用这个:

CONSUMER_KEY = 'a'
CONSUMER_SECRET = 'b'
ACCESS_TOKEN = 'c'
ACCESS_TOKEN_SECRET = 'd'
BEARER_TOKEN='e'

# Set Connection
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True)

我应该在哪里使用不记名令牌?由于

我认为混淆在于变量的不同术语和这些变量的使用。

<<p>

术语/strong>下面首先解释一下,术语澄清,不同的术语指的是同一件事:

客户端凭证:

1. App Key === API Key === Consumer API Key === Consumer Key === Customer Key === oauth_consumer_key
2. App Key Secret === API Secret Key === Consumer Secret === Consumer Key === Customer Key === oauth_consumer_secret
3. Callback URL === oauth_callback

临时凭证:

1. Request Token === oauth_token
2. Request Token Secret === oauth_token_secret
3. oauth_verifier

标记凭证:

1. Access token === Token === resulting oauth_token
2. Access token secret === Token Secret === resulting oauth_token_secret

接下来,这些的使用。请注意,承载令牌代表您的开发应用程序对请求进行身份验证。由于此方法特定于应用程序,因此不涉及任何用户。因此,您可以在用户级别或应用级别处理请求,如下所示:

使用

用户级别(OAuth 1.0a):

api_key = "hgrthgy2374RTYFTY"  # CONSUMER_KEY
api_secret_key = "hGDR2Gyr6534tjkht"  # CONSUMER_SECRET
access_token = "HYTHTYH65TYhtfhfgkt34"  # ACCESS_TOKEN
access_token_secret = "ged5654tHFG"  # ACCESS_TOKEN_SECRET
auth = tweepy.OAuthHandler(api_key, api_secret_key)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)  

应用程序级别(OAuth 2.0):

bearer_token = "ABDsdfj56nhiugd5tkggred"  # BEARER_TOKEN
auth = tweepy.Client(bearer_token)
api = tweepy.API(auth)

或者:

auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)

[1] https://developer.twitter.com/en/docs/authentication/oauth-1-0a/obtaining-user-access-tokens[2] https://docs.tweepy.org/en/latest/authentication.html twitter-api-v2

不幸的是,此时您将无法使用Tweepy访问新的完整存档搜索端点,以进行学术研究。他们正在开发对v2的支持,但是现在,你最终会碰到v1.1标准搜索API。

如果您正在使用Python,我建议您查看一下Twitter API v2示例代码,或者Twitter提供的search_tweets客户端。然后,您可以通过将其作为环境变量添加来使用BEARER TOKEN,或者如果您愿意,可以将其直接添加到代码中,但是如果您这样做,请注意不要意外地将其提交到源代码控制中,以免其他人可以访问它。

回答关于消费者密钥/秘密vs访问令牌/秘密vs承载令牌的问题:

  • 承载令牌是基于消费者密钥和秘密授予的,并且仅代表应用程序身份和凭据
  • 访问令牌和密钥代表用户身份。如果您正在使用这些,则不使用承载令牌,而是将该对与消费者密钥和secret组合使用。

用Tweepy术语来说,承载令牌将由AppAuthHandler自动检索,在这种情况下,OAuthHandler不会被使用。

您不需要使用无记名密钥。你可以找到入口钥匙& &;你可以在不记名密钥下使用的秘密,在这里你可以通过登录你的Twitter开发者帐户获得密码。

@ScriptCode

但目前还不清楚在哪里使用承载令牌在tweepy的OAuthHandler和access_token?

twitter 3.10.0 at https://buildmedia.readthedocs.org/media/pdf/tweepy/latest/tweepy.pdf的文档说明3.3 OAuth 2身份验证(使用承载令牌)

auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)

所以你使用AppAuthHandler省略了步骤:

auth.set_access_token(key, secret)

当然,你必须确保你已经在Twitter开发后端为只读应用程序注册了一个承载令牌。

我试过了,它工作了…

Tweepy已经更新到4.4.0,支持Twitter API v2。这里是一个示例代码,如果你有学术研究帐户[更多示例]:

import tweepy
client = tweepy.Client(bearer_token="add_your_Bearer_Token")
# Replace with your own search query
#replace place_country with the code of your country of interest or remove.
query = 'COVID19 place_country:GB'
# Starting time period YYYY-MM-DDTHH:MM:SSZ (max period back is March 2006)
start_time = '2018-01-01T00:00:00Z'
# Ending time period YYYY-MM-DDTHH:MM:SSZ
end_time = '2018-08-03T00:00:00Z'
#I'm getting the geo location of the tweet as well as the location of the user and setting the number of tweets returned to 10 (minimum) - Max is 100
tweets = client.search_all_tweets(query=query, tweet_fields=['context_annotations', 'created_at', 'geo'], place_fields=['place_type', 'geo'], user_fields=['location'], expansions='author_id,geo.place_id', start_time=start_time, end_time=end_time, max_results=10)
# Get list of places and users
places = {p["id"]: p for p in tweets.includes['places']}
users = {u["id"]: u for u in tweets.includes['users']}
#loop through the tweets to get the tweet ID, Date, Text, Author ID, User Location and Tweet Location
for tweet in tweets.data:
print(tweet.id)
print(tweet.created_at)
print(tweet.text)
print(tweet.author_id)
if users[tweet.author_id]:
user = users[tweet.author_id]
print(user.location) #note that users can add whatever they want as location
if places[tweet.geo['place_id']]:
place = places[tweet.geo['place_id']]
print(place.full_name)
print("================")

From Tweepy documentation (OAuth 2 Authentication)

Tweepy还支持OAuth 2认证。OAuth 2是身份验证时,应用程序发出的API请求没有用户上下文。如果您只需要对的只读访问,请使用此方法公共信息。

基本上,因为你的应用只需要只读访问,你不需要&;access token &;,访问令牌保密;并且可以忽略第三个& &;第四步骤。此解决方案的简单代码如下:

auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
api = tweepy.API(auth)
for tweet in tweepy.Cursor(api.search, q='cool').items(3):
print(tweet.text)

最新更新