Post 使用 Tweepy 使用 YouTube 视频发推 URL

Post Tweet with YouTube Video URL using Tweepy

我注意到,如果我正常发推文(从浏览器)后跟 YouTube 视频 link,Twitter 会显示视频的缩略图,如下所示:

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

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

我得到这样的结果:

如您所见,即使在几天后,Twitter 也不会显示 URL 的预览。我不明白这是为什么。 如何修复我的代码,以便通过 API 发送的推文显示 YouTube 视频的预览 link?

  1. 查看此 Stack Overflow post 了解 YouTube 缩略图 URL 的结构。

  2. 使用 this post 查看如何使用 requests 库以编程方式在本地下载缩略图。

  3. 然后你可以使用 Tweepy 的 update_with_media() 将其作为推文的一部分上传。

最终结果将如下所示:

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 在路径中使用了两个正斜杠,如屏幕截图所示。

我知道大约一年前有人问过这个问题,但我最近遇到了这个问题,并找到了一个适合我的解决方案。

http://youtube.com/watch?v=[YOUR VIDEO ID]&feature=emb_title

例如,这个 YouTube 视频:

https://www.youtube.com/watch?v=KUh2O8HylUM

需要格式化为:

http://youtube.com/watch?v=KUh2O8HylUM&feature=emb_title