我正在尝试创建一个Twitter机器人,让我从一条推文中获取一个youtube视频链接。发布的链接变成专门的链接https://t.co/...
我可以将此链接恢复为原始的YouTube链接吗?
我正在使用Python模块tweepy
这里是带有链接的Twitter状态JSON示例:https://pastebin.com/PZCE9v2cTwitter状态:https://twitter.com/redditdota2/status/1237997630216712193
提取文本时,您得到:
"text":"Everyone 2-0 @Cloud9 at @DOTA2 Summit 12 https://t.co/...#dota2 https://t.co/..."
text
包含t.co
链接。但是,在json对象中,您可以检索display_url
和expanded_url
。
"urls":[
{
"display_url":"redd.it/fh7i27",
"expanded_url":"https://redd.it/fh7i27",
"indices":[
41,
64
],
"url":"https://t.co/..."
}
]
这样,您可以使用正确的URL轻松调整text
。
for url in urls:
text.replace(url['url'], url['expanded_url'])
这里有一个类似的项目:https://github.com/nntin/discord-twitter-bot
PS:我删除了完整的t.co链接,因为StackOverflow不允许我以其他方式发布答案。
twitter链接将打开一个空白网站,该网站使用javascript将您立即重定向到目标网站。
所以我们可以简单地对URL发出GET请求,并借助一些正则表达式来提取URL
import requests
import re
def get_original_twitter_url(twitter_url):
# without masking it as a browser request, it wont work properly
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
r = requests.get(url = twitter_url,headers=headers)
data = r.text
url = re.search("(?P<url>https?://[^\s]+)\"", data).group("url")
return url
print(get_original_twitter_url(<pass twitter url here>))