From f51506cb02fc7b0276b4f9eaecd04c0e47541b29 Mon Sep 17 00:00:00 2001 From: Alex Huddleston Date: Sat, 25 Apr 2020 03:19:32 -0500 Subject: [PATCH] Switched back to Tweepy, tweet streaming works, archival of media files from non-retweets *should* be functional. --- .gitignore | 3 ++- lib/TweetStreamer.py | 11 +++++++++++ lib/archival.py | 38 +++++++++++++++++++++----------------- lib/authentication.py | 19 +++++++------------ template_config.json | 1 - twitter_media_tool.py | 11 +++++++---- 6 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 lib/TweetStreamer.py diff --git a/.gitignore b/.gitignore index afeebeb..83b3f92 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ data/*.bmp data/*.webp data/*.gif data/*.mp4 -data/*.mov \ No newline at end of file +data/*.mov +data/*.json \ No newline at end of file diff --git a/lib/TweetStreamer.py b/lib/TweetStreamer.py new file mode 100644 index 0000000..99712a0 --- /dev/null +++ b/lib/TweetStreamer.py @@ -0,0 +1,11 @@ +#!/usr/bin/python3 + +from tweepy import StreamListener +from lib.archival import archive_media_status + + +class TweetStreamer(StreamListener): + def on_status(self, status): + print(status._json) + archive_media_status(status) + return super().on_status(status) diff --git a/lib/archival.py b/lib/archival.py index 35a036a..f6c640a 100644 --- a/lib/archival.py +++ b/lib/archival.py @@ -1,24 +1,28 @@ #!/usr/bin/python3 from twitter.twitter_utils import parse_media_file -from twitter import Api +# from twitter import Api -def archive_media_status(media_object): + +def archive_media(media_url): + temp_media_file, filename, size, media_type = parse_media_file( + media_url) + with open(f'data/{filename}', 'bw+') as archive_file: + archive_file.writelines(temp_media_file.readlines()) + archive_file.close() + temp_media_file.close() + + +def archive_media_status(status): try: - temp_media_file, filename, size, media_type = parse_media_file(media_object.media_url) - with open(f'data/{filename}', 'bw+') as archive_file: - archive_file.writelines(temp_media_file.readlines()) - archive_file.close() - temp_media_file.close() + if(not ('retweeted_status' in status._json.keys())): + if('extended_entities' in status._json.keys()): + if('media' in status.extended_entities.keys()): + for media_dict in status.extended_entities['media']: + if(media_dict['type'] == 'photo'): + archive_media(media_dict['media_url']) + elif(media_dict['type'] == 'video'): + archive_media( + media_dict['video_info']['variants'][-1:][0]['url']) except Exception as e: print(e) - exit(1) - -def twitter_archive_stream(twitter_api, authenticated_user): - tweet_stream = twitter_api.GetUserStream(replies='none', withuser='user') - # try: - # status_media_list = tweet_stream.status.media - # for media_file in status_media_list: - # archive_media_status(media_file) - # except Exception as e: - # print(e) \ No newline at end of file diff --git a/lib/authentication.py b/lib/authentication.py index 8dd3e2a..6650b10 100644 --- a/lib/authentication.py +++ b/lib/authentication.py @@ -1,16 +1,11 @@ #!/usr/bin/python3 -#from tweepy import OAuthHandler, API -from twitter import Api +from tweepy import OAuthHandler, API + def authenticate_twitter(config): - # auth = OAuthHandler(config['api_key'], config['api_key_secret']) - # auth.set_access_token(config['access_token'], config['access_token_secret']) - # api = API(auth) - twitter_api = Api( - consumer_key=config['api_key'], - consumer_secret=config['api_key_secret'], - access_token_key=config['access_token'], - access_token_secret=config['access_token_secret'] - ) - return twitter_api \ No newline at end of file + auth = OAuthHandler(config['api_key'], config['api_key_secret']) + auth.set_access_token(config['access_token'], + config['access_token_secret']) + twitter_api = API(auth) + return twitter_api diff --git a/template_config.json b/template_config.json index 1b8ed09..7ea0cb4 100644 --- a/template_config.json +++ b/template_config.json @@ -1,5 +1,4 @@ { - "authenticated_user":"", "api_key":"", "api_key_secret":"", "access_token":"", diff --git a/twitter_media_tool.py b/twitter_media_tool.py index 7c652ab..7e6c582 100644 --- a/twitter_media_tool.py +++ b/twitter_media_tool.py @@ -1,15 +1,18 @@ #!/usr/bin/python3 -from time import sleep from lib.setup import import_config_file from lib.authentication import authenticate_twitter -from lib.archival import twitter_archive_stream +from lib.TweetStreamer import TweetStreamer +from tweepy import Stream + def main(): config = import_config_file() twitter_api = authenticate_twitter(config) - authenticated_user = twitter_api.GetUser(screen_name=config['authenticated_user']) - twitter_archive_stream(twitter_api, authenticated_user) + tweet_stream_listener = TweetStreamer(twitter_api) + tweet_stream = Stream(auth=twitter_api.auth, + listener=tweet_stream_listener) + tweet_stream.filter(follow=[twitter_api.me()._json['id_str']]) if(__name__ == '__main__'):