Опубликовать твит с YouTube Video URL, используя Tweepy - PullRequest
4 голосов
/ 13 февраля 2020

Я замечаю, что если я обычно чирикаю (из браузера) сообщением, сопровождаемым ссылкой на видео YouTube, Twitter отображает миниатюру видео следующим образом:

enter image description here

Однако, если я вместо этого использую следующий код для отправки твита:

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

, я получаю что-то вроде этого:

enter image description here

Как видите, Twitter не показывает предварительный просмотр URL-адреса даже через несколько дней. Я не понимаю, почему это так. Как я могу исправить свой код, чтобы в твите, отправленном через API, отображался предварительный просмотр ссылки на видео YouTube?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Как указывалось , проблема заключалась в том, что URL использовал две косые черты для пути, как это видно на скриншоте.

0 голосов
/ 17 февраля 2020
  1. См. Пост переполнения стека о том, как структурирован URL-адрес эскиза YouTube.

  2. Использование этого сообщения чтобы увидеть, как вы можете программно загрузить миниатюру локально с помощью библиотеки requests.

  3. Затем вы можете использовать update_with_media () Tweepy, чтобы загрузить его как часть твит.

Конечный результат будет выглядеть примерно так:

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