Upgraded Tweepy to v4.1.0 and added video support

This commit is contained in:
spla 2021-10-13 13:32:26 +02:00
pare acb3f81d31
commit 471da32b11
S'han modificat 3 arxius amb 73 adicions i 10 eliminacions

Veure arxiu

@ -23,4 +23,6 @@ Within Python Virtual Environment:
5. Use your favourite scheduling method to set `python mastotuit.py` to run every minute. 5. Use your favourite scheduling method to set `python mastotuit.py` to run every minute.
29.9.2021 **New Feature** Added support to media files! mastotuit now gets all media files from Mastodon's post (if any) and publish them to Twitter together with your status update. 29.9.2021 **New Feature** Added support to media files! mastotuit now gets all media files from Mastodon's post (if any) and publish them to Twitter together with your status update.
7.10.2021 **New Feature** Added thread support! If you create a thread in Mastodon mastotuit will create the same thread on Twitter. 7.10.2021 **New Feature** Added thread support! If you create a thread in Mastodon mastotuit will create the same thread on Twitter.
13.10.2021 Upgraded Tweepy library to v4.1.0
13.10.2021 **New Feature** Added video upload support! If video properties are according Twitter rules it will be uploaded.

Veure arxiu

@ -8,8 +8,10 @@ import time
import requests import requests
import shutil import shutil
import tweepy import tweepy
from tweepy import TweepError from tweepy import TweepyException
import logging import logging
import filetype
import ffmpeg
import pdb import pdb
logger = logging.getLogger() logger = logging.getLogger()
@ -98,8 +100,7 @@ def create_api():
auth = tweepy.OAuthHandler(api_key, api_key_secret) auth = tweepy.OAuthHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret) auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True, api = tweepy.API(auth)
wait_on_rate_limit_notify=True)
try: try:
api.verify_credentials() api.verify_credentials()
logged_in = True logged_in = True
@ -278,8 +279,40 @@ if __name__ == '__main__':
i = 0 i = 0
while i < len(images_list): while i < len(images_list):
media = api.media_upload('images/' + images_list[i]) kind = filetype.guess('images/' + images_list[i])
images_id_lst.append(media.media_id) if kind.mime == 'video/mp4':
probe = ffmpeg.probe('images/' + images_list[i])
duration = probe['streams'][0]['duration']
if float(duration) > 139:
print(f'video duration is too large: {duration}')
else:
media = api.media_upload('images/' + images_list[i], media_category='tweet_video')
if media.processing_info['state'] == 'succeeded':
images_id_lst.append(media.media_id)
else:
print(media.processing_info)
else:
media = api.media_upload('images/' + images_list[i])
if media.processing_info['state'] == 'succeeded':
images_id_lst.append(media.media_id)
else:
print(media.processing_info)
i += 1 i += 1
if is_reply: if is_reply:
@ -300,7 +333,7 @@ if __name__ == '__main__':
tweet = api.update_status(tuit_text) tweet = api.update_status(tuit_text)
except TweepError as err: except TweepyException as err:
print('\n') print('\n')
sys.exit(err) sys.exit(err)
@ -326,8 +359,34 @@ if __name__ == '__main__':
i = 0 i = 0
while i < len(images_list): while i < len(images_list):
media = api.media_upload('images/' + images_list[i]) kind = filetype.guess('images/' + images_list[i])
if kind.mime == 'video/mp4':
probe = ffmpeg.probe('images/' + images_list[i])
duration = probe['streams'][0]['duration']
if float(duration) > 139:
print(f'video duration is too large: {duration}')
else:
media = api.media_upload('images/' + images_list[i], media_category='tweet_video')
if media.processing_info['state'] == 'succeeded':
images_id_lst.append(media.media_id)
else:
print(media.processing_info)
else:
media = api.media_upload('images/' + images_list[i])
images_id_lst.append(media.media_id) images_id_lst.append(media.media_id)
i += 1 i += 1
if is_reply: if is_reply:
@ -352,7 +411,7 @@ if __name__ == '__main__':
tweet = api.update_status(tuit_text2, in_reply_to_status_id=first_tweet.id) tweet = api.update_status(tuit_text2, in_reply_to_status_id=first_tweet.id)
except TweepError as err: except TweepException as err:
print('\n') print('\n')
sys.exit(err) sys.exit(err)

Veure arxiu

@ -3,4 +3,6 @@ psycopg2>=2.9.1
feedparser>=6.0.8 feedparser>=6.0.8
bs4>=0.0.1 bs4>=0.0.1
Mastodon.py>=1.5.1 Mastodon.py>=1.5.1
tweepy==3.10.0 tweepy==4.1.0
filetype>=1.0.8
ffmpeg-python>=0.2.0