Python 使用Tweepy通过YouTube视频URL发布推文

Python 使用Tweepy通过YouTube视频URL发布推文,python,python-3.x,twitter,youtube,tweepy,Python,Python 3.x,Twitter,Youtube,Tweepy,我注意到,如果我正常地(从浏览器)在推特上发送一条消息,然后是一个YouTube视频链接,推特会显示视频的缩略图,如下所示: 但是,如果我使用以下代码发送推文: import tweepy import json youtube_url = r'https://www.youtube.com/watch?v=tj-fmOnbBpU&t=0s' # account tokens twitter_keys = json.load(open('twitter_keys.json')) aut

我注意到,如果我正常地(从浏览器)在推特上发送一条消息,然后是一个YouTube视频链接,推特会显示视频的缩略图,如下所示:

但是,如果我使用以下代码发送推文:

import tweepy
import json
youtube_url = r'https://www.youtube.com/watch?v=tj-fmOnbBpU&t=0s'
# account tokens
twitter_keys = json.load(open('twitter_keys.json'))
auth = tweepy.OAuthHandler(twitter_keys["consumer_key"], twitter_keys["consumer_secret"]) # authentication of consumer key and secret
auth.set_access_token(twitter_keys["access_token"], twitter_keys["access_token_secret"]) # authentication of access token and secret
api = tweepy.API(auth)
twitter_text = "My message " + youtube_url 
api.update_status(status ="{}".format(twitter_text)) # send a tweet
我得到这样的东西:

import tweepy
import json
import requests

# video info
youtube_id = "tj-fmOnbBpU"
youtube_url = f"https://www.youtube.com/watch?v={youtube_id}&t=0s"

# account tokens
twitter_keys = json.load(open('twitter_keys.json'))
auth = tweepy.OAuthHandler(twitter_keys["consumer_key"], twitter_keys["consumer_secret"]) # authentication of consumer key and secret
auth.set_access_token(twitter_keys["access_token"], twitter_keys["access_token_secret"]) # authentication of access token and secret
api = tweepy.API(auth)
twitter_text = f"My message: {youtube_url}"


# downloading thumbnail
url = f"https://img.youtube.com/vi/{youtube_id}/1.jpg"

filename = url.split("/")[-1]
r = requests.get(url, timeout=0.5)

if r.status_code == 200:
    with open(filename, 'wb') as f:
        f.write(r.content)

# Send tweet
api.update_with_media(filename, status=twitter_text)

如您所见,Twitter甚至在几天后也不会显示URL的预览。我不明白这是为什么如何修复代码,使通过API发送的Tweet显示YouTube视频链接的预览?

  • 有关youtube缩略图URL的结构,请参见此

  • 用于查看如何使用
    请求
    库以编程方式本地下载缩略图

  • 然后你可以使用Tweepy's将其作为tweet的一部分上传

  • 最终结果如下所示:

    import tweepy
    import json
    import requests
    
    # video info
    youtube_id = "tj-fmOnbBpU"
    youtube_url = f"https://www.youtube.com/watch?v={youtube_id}&t=0s"
    
    # account tokens
    twitter_keys = json.load(open('twitter_keys.json'))
    auth = tweepy.OAuthHandler(twitter_keys["consumer_key"], twitter_keys["consumer_secret"]) # authentication of consumer key and secret
    auth.set_access_token(twitter_keys["access_token"], twitter_keys["access_token_secret"]) # authentication of access token and secret
    api = tweepy.API(auth)
    twitter_text = f"My message: {youtube_url}"
    
    
    # downloading thumbnail
    url = f"https://img.youtube.com/vi/{youtube_id}/1.jpg"
    
    filename = url.split("/")[-1]
    r = requests.get(url, timeout=0.5)
    
    if r.status_code == 200:
        with open(filename, 'wb') as f:
            f.write(r.content)
    
    # Send tweet
    api.update_with_media(filename, status=twitter_text)
    

    ,问题是URL使用了两个斜杠作为路径,如屏幕截图所示。

    我知道这是一年前提出的问题,但最近我遇到了问题,找到了一个适合我的解决方案

    例如,此YouTube视频:

    需要格式化为:


    不幸的是,这并没有达到预期的效果。相反,我收到了一条类似这样的tweet:。这只是将缩略图的(低分辨率)图片直接嵌入推文中,这不是目标。我想把YouTube视频播放器本身嵌入推文中。正常情况下,当我发布tweet时会自动发生这种情况,而不是在使用API时。请永远不要将update_与_媒体一起使用,这在几年前就被弃用了。我无法复制这种情况。即使使用您的示例代码,Twitter也能正确地将YouTube链接转换为一张卡片。您的屏幕截图显示的消息与示例代码不同。这是你所有的代码吗?你刚才说的帮助我意识到了这个问题。关键的区别在于URL的结构方式。它在我的示例代码中起作用,因为URL的youtube.com/watch部分只有一个正斜杠。在我的其他推文中,它没有工作,我有两个斜杠(你可以在图片中看到这一点)。