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

9
我正在尝试使用 Twitter API V.2 和 Tweepy 创建我的第一个 Twitter 机器人。我可以发布简单文本推文,但我还没有找到如何发布带有媒体(图片)的推文。那么我该怎么做呢?(我看到有些人说:“你不能使用 Twitter API v2 发布媒体推文...你需要使用 API V1.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']}")

你能帮忙解决一个类似的问题吗?https://dev59.com/UVEZsIgBPY-HTNNjg9GJ - Leonardo Alonso
2个回答

11

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

你可以同时使用v1.1和v2(tweepy.Client)来实现这个功能。

代码如下:

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])

希望有所帮助!

这对我来说很有效,我只需要从get_connections中删除"self."。不确定那是干什么用的。 - Melchester
啊,太好了,这只是我之前的一部分课程,所以忘记删除自己。在这个例子中,我修改了答案,谢谢。 - imak
1
@imak 非常感谢你。你帮我省了很多麻烦! - iamzeid

6
如果您正在管理一个Essential项目,您需要在Twitter开发者门户网站上申请提升权限(免费),因为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)

上传媒体文件时,需要使用函数media_upload(update_status_with_media已被弃用)。该函数返回一个Media对象,其中包含属性media_id_string,这是你需要用图片发推文的元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接