Python 使用Tweepy通过YouTube视频URL发布推文
我注意到,如果我正常地(从浏览器)在推特上发送一条消息,然后是一个YouTube视频链接,推特会显示视频的缩略图,如下所示: 但是,如果我使用以下代码发送推文: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
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视频链接的预览?
请求
库以编程方式本地下载缩略图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部分只有一个正斜杠。在我的其他推文中,它没有工作,我有两个斜杠(你可以在图片中看到这一点)。