Switched back to Tweepy, tweet streaming works, archival of media files from non-retweets *should* be functional.

This commit is contained in:
Alex Huddleston 2020-04-25 03:19:32 -05:00
parent c66da02f2b
commit f51506cb02
6 changed files with 48 additions and 35 deletions

1
.gitignore vendored
View file

@ -12,3 +12,4 @@ data/*.webp
data/*.gif data/*.gif
data/*.mp4 data/*.mp4
data/*.mov data/*.mov
data/*.json

11
lib/TweetStreamer.py Normal file
View file

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

View file

@ -1,24 +1,28 @@
#!/usr/bin/python3 #!/usr/bin/python3
from twitter.twitter_utils import parse_media_file from twitter.twitter_utils import parse_media_file
from twitter import Api # from twitter import Api
def archive_media_status(media_object):
try: def archive_media(media_url):
temp_media_file, filename, size, media_type = parse_media_file(media_object.media_url) temp_media_file, filename, size, media_type = parse_media_file(
media_url)
with open(f'data/{filename}', 'bw+') as archive_file: with open(f'data/{filename}', 'bw+') as archive_file:
archive_file.writelines(temp_media_file.readlines()) archive_file.writelines(temp_media_file.readlines())
archive_file.close() archive_file.close()
temp_media_file.close() temp_media_file.close()
def archive_media_status(status):
try:
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: except Exception as e:
print(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)

View file

@ -1,16 +1,11 @@
#!/usr/bin/python3 #!/usr/bin/python3
#from tweepy import OAuthHandler, API from tweepy import OAuthHandler, API
from twitter import Api
def authenticate_twitter(config): def authenticate_twitter(config):
# auth = OAuthHandler(config['api_key'], config['api_key_secret']) auth = OAuthHandler(config['api_key'], config['api_key_secret'])
# auth.set_access_token(config['access_token'], config['access_token_secret']) auth.set_access_token(config['access_token'],
# api = API(auth) config['access_token_secret'])
twitter_api = Api( twitter_api = API(auth)
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 return twitter_api

View file

@ -1,5 +1,4 @@
{ {
"authenticated_user":"",
"api_key":"", "api_key":"",
"api_key_secret":"", "api_key_secret":"",
"access_token":"", "access_token":"",

View file

@ -1,15 +1,18 @@
#!/usr/bin/python3 #!/usr/bin/python3
from time import sleep
from lib.setup import import_config_file from lib.setup import import_config_file
from lib.authentication import authenticate_twitter from lib.authentication import authenticate_twitter
from lib.archival import twitter_archive_stream from lib.TweetStreamer import TweetStreamer
from tweepy import Stream
def main(): def main():
config = import_config_file() config = import_config_file()
twitter_api = authenticate_twitter(config) twitter_api = authenticate_twitter(config)
authenticated_user = twitter_api.GetUser(screen_name=config['authenticated_user']) tweet_stream_listener = TweetStreamer(twitter_api)
twitter_archive_stream(twitter_api, authenticated_user) tweet_stream = Stream(auth=twitter_api.auth,
listener=tweet_stream_listener)
tweet_stream.filter(follow=[twitter_api.me()._json['id_str']])
if(__name__ == '__main__'): if(__name__ == '__main__'):