如何在带有 Twitter API v2 的 Tweepy 中使用 3-legged OAuth 来读取受保护的推文?

How to use 3-legged OAuth in Tweepy with Twitter API v2 to read protected Tweets?

我正在尝试使用 Tweepy 和 Twitter API v2 从 Twitter 句柄访问受保护的推文。为此,我知道我必须使用 3-legged OAuth。我已经完成并成功生成了访问令牌和访问令牌机密。但是使用这些访问密钥,当我使用同一帐户进行授权时,我无法看到我自己受保护帐户的受保护推文。

有谁知道我做错了什么吗?

这是一个login.py文件,具有授权功能

#!/usr/bin/env python
import tweepy 


def authrize():

    CONSUMER_KEY = "XXXXXXXXXXXxx"

    CONSUMER_SECRET = "XXXXXXXXXXXXXXXXx"

    BEARER_TOKEN = "XXXXXXXXXXXXXXXX"

    auth = tweepy.OAuth1UserHandler(CONSUMER_KEY, CONSUMER_SECRET,callback="oob")

    print(auth.get_authorization_url())

    verifier = input("Input PIN: ")
    ACCESS_TOKEN, ACCESS_TOKEN_SECRET = auth.get_access_token(verifier)

    print(ACCESS_TOKEN,"******",ACCESS_TOKEN_SECRET)
    return (CONSUMER_KEY,CONSUMER_SECRET,BEARER_TOKEN,ACCESS_TOKEN,ACCESS_TOKEN_SECRET)

我的tweepy代码app.py如下

import tweepy
import login

def get_client(CONSUMER_KEY,CONSUMER_SECRET,BEARER_TOKEN,ACCESS_TOKEN,ACCESS_TOKEN_SECRET):
    client = tweepy.Client(bearer_token=BEARER_TOKEN,
                           consumer_key=CONSUMER_KEY,
                           consumer_secret=CONSUMER_SECRET,
                           access_token=ACCESS_TOKEN,
                           access_token_secret=ACCESS_TOKEN_SECRET, wait_on_rate_limit=True)
    return client


def get_user_id(username):
    user = client.get_user(username=username)
    return user.data.id
    


def pagination(user_id):
    responses = tweepy.Paginator(client.get_users_tweets, user_id,
                                 exclude='replies,retweets',
                                 max_results=100,
                                 expansions='referenced_tweets.id',
                                 tweet_fields=['created_at', 'public_metrics', 'entities'])
    return responses

def get_original_tweets(user_id):
    tweet_list = []
    responses = pagination(user_id)
    for response in responses:
        if response.data ==None:
            continue
        else:
            for tweets in response.data:
                tweet_list.append([tweets.text,
                                tweets['public_metrics']['like_count'],
                                tweets['public_metrics']['retweet_count'],
                                tweets['created_at'].date()])

    return tweet_list


def user_details(username):
    user = {}
    user_response = client.get_user(username=username, user_fields=['public_metrics', 'description', 'url'])
    user_metrics = user_response.data['public_metrics']
    user['description'] = user_response.data['description']
    user['followers'] = user_metrics['followers_count']
    user['following'] = user_metrics['following_count']
    return user

keys = login.authrize()
client = get_client(*keys)
username = input("Username:")
userid = get_user_id(username)
print(user_details(username))
print(get_original_tweets(userid))

默认情况下,Client.get_users_tweets 使用您的不记名令牌而不是 OAuth 1.0a 用户上下文进行身份验证。您需要将 user_auth 参数设置为 True