如何使用 Twitter API V2 和 Tweepy Python 发布带有媒体(图片)的推文?

Gia*_*ynh 9 python twitter tweepy

我正在尝试使用 Twitter API V.2 和 Tweepy 创建我的第一个 Twitter 机器人。所以我可以发布简单的文本推文,但我还没有找到如何使用媒体(图片)发布推文,那么我该怎么做?(我看到有人说“你不能使用 twitter API v2 发布媒体推文...你需要使用 API V 1.1”,所以如果这是真的,我如何使用 Twitter API V1.1 而不是 API V2 ?)

如果你能帮助我的话谢谢你^^

这是我的实际代码:

from io import BytesIO
from PIL import Image
import tweepy
from tweepy import API

consumer_key = "APP_KEY"
consumer_secret = "APP_SECRET_KEY"
access_token = "TOKEN"
access_token_secret = "SECRET_TOKEN"

client = tweepy.Client(
 consumer_key=consumer_key,
 consumer_secret=consumer_secret,
 access_token=access_token,
 access_token_secret=access_token_secret
)

response = client.create_tweet(
  text="Just a dummy tweet",
  # in_reply_to_tweet_id= 1484105392598749186 <--- Reply to a tweet by ID

)

print(f"https://twitter.com/user/status/{response.data['id']}")
Run Code Online (Sandbox Code Playgroud)

ima*_*mak 13

对于 v2 免费版本,tweepy.API (v1.1)没有权限再发送推文(至少在我的情况下),但仍然可以上传媒体并检索 media_id。

tweepy.Client为此,您可以同时使用 v1.1 和 v2 ( )。

代码如下:

def get_twitter_conn_v1(api_key, api_secret, access_token, access_token_secret) -> tweepy.API:
    """Get twitter conn 1.1"""

    auth = tweepy.OAuth1UserHandler(api_key, api_secret)
    auth.set_access_token(
        access_token,
        access_token_secret,
    )
    return tweepy.API(auth)

def get_twitter_conn_v2(api_key, api_secret, access_token, access_token_secret) -> tweepy.Client:
    """Get twitter conn 2.0"""

    client = tweepy.Client(
        consumer_key=api_key,
        consumer_secret=api_secret,
        access_token=access_token,
        access_token_secret=access_token_secret,
    )

    return client

client_v1 = get_twitter_conn_v1(api_key, api_secret, access_token, access_token_secret)
client_v2 = get_twitter_conn_v2(api_key, api_secret, access_token, access_token_secret)

media_path = "path_to_media"
media = client_v1.media_upload(filename=media_path)
media_id = media.media_id

client_v2.create_tweet(text="Tweet text", media_ids=[media_id])
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!


jos*_*baq 6

如果您正在管理 Essential 项目,则需要在 Twitter 开发者门户上的项目中申请 Elevated(免费),这是因为 Elevated 项目可以同时使用 v1.1 和 v2(仅限 Essential v2)。

一旦您的提交被接受,您必须验证以允许在您的项目上读取和写入功能(开发人员平台 -> 项目和应用程序 -> YOUR_PROJECT -> 开发 -> 用户身份验证设置),选择“OAuth 1.0a”并选择“读取和写入” ”。

现在,您可以使用以下代码发送媒体推文:

    auth = tweepy.OAuth1UserHandler(
       consumerKey,
       consumerSecret,
       accessToken,
       accessTokenSecret
    )

    api = tweepy.API(auth)

    media = api.media_upload(filename="./assets/twitter-logo.png")
    print("MEDIA: ", media)

    tweet = api.update_status(status="Image upload", media_ids= 
    [media.media_id_string])
    print("TWEET: ", tweet)
Run Code Online (Sandbox Code Playgroud)

对于上传媒体,您需要使用函数 media_upload (update_status_with_media 已弃用)。该函数返回一个具有 media_id_string 属性的 Media 对象,这是使用图片制作推文所需的元素。