Tweet echoer implemented.
This commit is contained in:
parent
de2be0b7af
commit
c7a90f1e80
4 changed files with 114 additions and 96 deletions
BIN
__pycache__/tweet_converter.cpython-37.pyc
Normal file
BIN
__pycache__/tweet_converter.cpython-37.pyc
Normal file
Binary file not shown.
41
tweet_converter.py
Normal file
41
tweet_converter.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# TODO: Clean this up and write comments.
|
||||||
|
def convert_tweets(tweets):
|
||||||
|
|
||||||
|
recent_tweets = tweets
|
||||||
|
|
||||||
|
outtweets = []
|
||||||
|
|
||||||
|
for tweet in recent_tweets:
|
||||||
|
|
||||||
|
try:
|
||||||
|
outtweets.insert(0, {
|
||||||
|
'id':str(tweet.id_str),
|
||||||
|
'date':str(tweet.created_at),
|
||||||
|
'retweet':('RT @' in tweet.text),
|
||||||
|
'text':str(tweet.text.encode('utf-8'))[1:],
|
||||||
|
'hashtags':tweet.entities.get('hashtags'),
|
||||||
|
'mentions':tweet.entities.get('user_metions')
|
||||||
|
})
|
||||||
|
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
outtweets.insert(0, {
|
||||||
|
'id':str(tweet.id_str),
|
||||||
|
'date':str(tweet.created_at),
|
||||||
|
'retweet':('RT @' in tweet.full_text),
|
||||||
|
'text':str(tweet.full_text.encode('utf-8'))[1:],
|
||||||
|
'hashtags':tweet.entities.get('hashtags'),
|
||||||
|
'mentions':tweet.entities.get('user_metions')
|
||||||
|
})
|
||||||
|
|
||||||
|
except:
|
||||||
|
outtweets.insert(0, {
|
||||||
|
'id':str(tweet.id_str),
|
||||||
|
'date':str(tweet.created_at),
|
||||||
|
'retweet':True,
|
||||||
|
'text':str(tweet.retweeted_status.text.encode("utf-8"))[1:],
|
||||||
|
'hashtags':tweet.entities.get('hashtags'),
|
||||||
|
'mentions':tweet.entities.get('user_metions')
|
||||||
|
})
|
||||||
|
|
||||||
|
return outtweets
|
|
@ -1,96 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# encoding: utf-8
|
|
||||||
|
|
||||||
# Some legacy code I wrote for a project in college. It's ugly and messy. I'll clean it up and repurpose it later.
|
|
||||||
|
|
||||||
import tweepy #https://github.com/tweepy/tweepy
|
|
||||||
import json
|
|
||||||
from time import sleep
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_tweets(screen_name):
|
|
||||||
#Twitter only allows access to a users most recent 3240 tweets with this method
|
|
||||||
with open('keys.txt', 'r') as f:
|
|
||||||
#Twitter API credential
|
|
||||||
consumer_key = f.readline().rstrip()
|
|
||||||
consumer_secret = f.readline().rstrip()
|
|
||||||
access_key = f.readline().rstrip()
|
|
||||||
access_secret = f.readline().rstrip()
|
|
||||||
|
|
||||||
#authorize twitter, initialize tweepy
|
|
||||||
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
|
|
||||||
auth.set_access_token(access_key, access_secret)
|
|
||||||
api = tweepy.API(auth)
|
|
||||||
|
|
||||||
#initialize a list to hold all the tweepy Tweets
|
|
||||||
recent_tweets = []
|
|
||||||
|
|
||||||
#make initial request for most recent tweets (200 is the maximum allowed count)
|
|
||||||
new_tweets = api.user_timeline(screen_name = screen_name,count=10,tweet_mode = 'extended')
|
|
||||||
|
|
||||||
#save most recent tweets
|
|
||||||
recent_tweets.extend(new_tweets)
|
|
||||||
'''
|
|
||||||
|
|
||||||
#save the id of the oldest tweet less one
|
|
||||||
oldest = alltweets[-1].id - 1
|
|
||||||
|
|
||||||
#keep grabbing tweets until there are no tweets left to grab
|
|
||||||
while len(new_tweets) > 0 and len(alltweets) < 3000:
|
|
||||||
print("getting tweets before %s" % (oldest))
|
|
||||||
|
|
||||||
#all subsiquent requests use the max_id param to prevent duplicates
|
|
||||||
new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest)
|
|
||||||
|
|
||||||
#save most recent tweets
|
|
||||||
alltweets.extend(new_tweets)
|
|
||||||
|
|
||||||
#update the id of the oldest tweet less one
|
|
||||||
oldest = alltweets[-1].id - 1
|
|
||||||
|
|
||||||
print("...%s tweets downloaded so far" % (len(alltweets)))
|
|
||||||
|
|
||||||
'''
|
|
||||||
#transform the tweepy tweets into a 2D array that will populate the csv
|
|
||||||
outtweets = []
|
|
||||||
for tweet in recent_tweets:
|
|
||||||
try:
|
|
||||||
if tweet.retweeted or ('RT @' in tweet.text):
|
|
||||||
outtweets.append([tweet.id_str, tweet.created_at, "True", tweet.retweeted_status.text.encode("utf-8"), tweet.entities.get('hashtags'), tweet.entities.get('user_mentions')])
|
|
||||||
except:
|
|
||||||
try:
|
|
||||||
outtweets.append([tweet.id_str, tweet.created_at, ('RT @' in tweet.full_text), tweet.full_text.encode("utf-8"), tweet.entities.get('hashtags'), tweet.entities.get('user_mentions')])
|
|
||||||
except:
|
|
||||||
outtweets.append([tweet.id_str, tweet.created_at, ('RT @' in tweet.text), tweet.text.encode("utf-8"), tweet.entities.get('hashtags'), tweet.entities.get('user_mentions')])
|
|
||||||
|
|
||||||
for t in outtweets:
|
|
||||||
print(t[3])
|
|
||||||
|
|
||||||
'''
|
|
||||||
#write the csv
|
|
||||||
with open('%s_tweets.csv' % screen_name, 'w') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(["id","created_at","retweet","text","hashtags","user_mentions"])
|
|
||||||
writer.writerows(outtweets)
|
|
||||||
|
|
||||||
pass
|
|
||||||
'''
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
with open('users.txt', 'r') as f:
|
|
||||||
for l in f:
|
|
||||||
get_all_tweets(l.rstrip())
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
#pass in the username of the account you want to download
|
|
||||||
counter = 0
|
|
||||||
with open("users.txt", "r") as f:
|
|
||||||
for line in f:
|
|
||||||
get_all_tweets(line.rstrip())
|
|
||||||
counter = counter + 1
|
|
||||||
if (counter % 5) == 0:
|
|
||||||
sleep(15*60)
|
|
||||||
|
|
||||||
'''
|
|
73
tweet_echoer.py
Normal file
73
tweet_echoer.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# encoding: utf-8
|
||||||
|
|
||||||
|
# Tweet echoing works. I just need this to be refactored into something more useful...
|
||||||
|
from tweet_converter import convert_tweets
|
||||||
|
from time import sleep
|
||||||
|
import tweepy
|
||||||
|
|
||||||
|
# Tentative... Might just settle with line-by-line with encryption
|
||||||
|
# TODO: Import and utilize encryption methods.
|
||||||
|
import json
|
||||||
|
|
||||||
|
# TODO: Major clean up.
|
||||||
|
def echo_recent_tweets(screen_name):
|
||||||
|
|
||||||
|
# TODO: Encrypt this file for extra security?
|
||||||
|
# TODO: Probably move all of this to its own function.
|
||||||
|
with open('keys.txt', 'r') as f:
|
||||||
|
#Twitter API credential
|
||||||
|
consumer_key = f.readline().rstrip()
|
||||||
|
consumer_secret = f.readline().rstrip()
|
||||||
|
access_key = f.readline().rstrip()
|
||||||
|
access_secret = f.readline().rstrip()
|
||||||
|
|
||||||
|
# Authorize twitter, initialize tweepy
|
||||||
|
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
|
||||||
|
auth.set_access_token(access_key, access_secret)
|
||||||
|
api = tweepy.API(auth)
|
||||||
|
|
||||||
|
last_tweet = 0
|
||||||
|
|
||||||
|
# TODO: Don't do while(True). Use another safer method.
|
||||||
|
while(True):
|
||||||
|
|
||||||
|
# Request the last 10 tweets, since I'm assuming I won't have made 10 tweets in 30 seconds...
|
||||||
|
new_tweets = api.user_timeline(screen_name = screen_name,count=10,tweet_mode = 'extended')
|
||||||
|
|
||||||
|
recent_tweets = []
|
||||||
|
|
||||||
|
# Only bother processing new tweets.
|
||||||
|
for tweet in new_tweets:
|
||||||
|
if(tweet.id > last_tweet):
|
||||||
|
recent_tweets.append(tweet)
|
||||||
|
|
||||||
|
# Only do this if there are new tweets.
|
||||||
|
if recent_tweets:
|
||||||
|
outtweets = convert_tweets(recent_tweets)
|
||||||
|
last_tweet = int(outtweets[len(outtweets) - 1]['id'])
|
||||||
|
|
||||||
|
# Debugging purposes...
|
||||||
|
# TODO: Clean this up probably.
|
||||||
|
for t in outtweets:
|
||||||
|
print(t['date'] + '\t' + t['text'])
|
||||||
|
|
||||||
|
sleep(30)
|
||||||
|
|
||||||
|
# TODO: Stop reading users from a file, unnecessary.
|
||||||
|
if __name__ == '__main__':
|
||||||
|
with open('users.txt', 'r') as f:
|
||||||
|
for l in f:
|
||||||
|
echo_recent_tweets(l.rstrip())
|
||||||
|
|
||||||
|
# Clean these up lmao
|
||||||
|
|
||||||
|
'''
|
||||||
|
#write the csv
|
||||||
|
with open('%s_tweets.csv' % screen_name, 'w') as f:
|
||||||
|
writer = csv.writer(f)
|
||||||
|
writer.writerow(["id","created_at","retweet","text","hashtags","user_mentions"])
|
||||||
|
writer.writerows(outtweets)
|
||||||
|
|
||||||
|
pass
|
||||||
|
'''
|
Reference in a new issue