Last active
December 16, 2018 19:46
-
-
Save gdsaxton/9037367 to your computer and use it in GitHub Desktop.
Twitter User Information
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
""" | |
Use Twitter API to grab user information from list of organizations; | |
export text file | |
Uses Twython module to access Twitter API | |
""" | |
import sys | |
import string | |
import simplejson | |
from twython import Twython | |
#WE WILL USE THE VARIABLES DAY, MONTH, AND YEAR FOR OUR OUTPUT FILE NAME | |
import datetime | |
now = datetime.datetime.now() | |
day=int(now.day) | |
month=int(now.month) | |
year=int(now.year) | |
#FOR OAUTH AUTHENTICATION -- NEEDED TO ACCESS THE TWITTER API | |
t = Twython(app_key='APP_KEY', #REPLACE 'APP_KEY' WITH YOUR APP KEY, ETC., IN THE NEXT 4 LINES | |
app_secret='APP_SECRET', | |
oauth_token='OAUTH_TOKEN', | |
oauth_token_secret='OAUTH_TOKEN_SECRET') | |
#REPLACE WITH YOUR LIST OF TWITTER USER IDS | |
ids = "4816,9715012,13023422, 13393052, 14226882, 14235041, 14292458, 14335586, 14730894,\ | |
15029174, 15474846, 15634728, 15689319, 15782399, 15946841, 16116519, 16148677, 16223542,\ | |
16315120, 16566133, 16686673, 16801671, 41900627, 42645839, 42731742, 44157002, 44988185,\ | |
48073289, 48827616, 49702654, 50310311, 50361094," | |
#ACCESS THE LOOKUP_USER METHOD OF THE TWITTER API -- GRAB INFO ON UP TO 100 IDS WITH EACH API CALL | |
#THE VARIABLE USERS IS A JSON FILE WITH DATA ON THE 32 TWITTER USERS LISTED ABOVE | |
users = t.lookup_user(user_id = ids) | |
#NAME OUR OUTPUT FILE - %i WILL BE REPLACED BY CURRENT MONTH, DAY, AND YEAR | |
outfn = "twitter_user_data_%i.%i.%i.txt" % (now.month, now.day, now.year) | |
#NAMES FOR HEADER ROW IN OUTPUT FILE | |
fields = "id screen_name name created_at url followers_count friends_count statuses_count \ | |
favourites_count listed_count \ | |
contributors_enabled description protected location lang expanded_url".split() | |
#INITIALIZE OUTPUT FILE AND WRITE HEADER ROW | |
outfp = open(outfn, "w") | |
#outfp.write(string.join(fields, "\t") + "\n") # header | |
outfp.write("\t".join(fields) + "\n") # header | |
#THE VARIABLE 'USERS' CONTAINS INFORMATION OF THE 32 TWITTER USER IDS LISTED ABOVE | |
#THIS BLOCK WILL LOOP OVER EACH OF THESE IDS, CREATE VARIABLES, AND OUTPUT TO FILE | |
for entry in users: | |
#CREATE EMPTY DICTIONARY | |
r = {} | |
for f in fields: | |
r[f] = "" | |
#ASSIGN VALUE OF 'ID' FIELD IN JSON TO 'ID' FIELD IN OUR DICTIONARY | |
r['id'] = entry['id'] | |
#SAME WITH 'SCREEN_NAME' HERE, AND FOR REST OF THE VARIABLES | |
r['screen_name'] = entry['screen_name'] | |
r['name'] = entry['name'] | |
r['created_at'] = entry['created_at'] | |
r['url'] = entry['url'] | |
r['followers_count'] = entry['followers_count'] | |
r['friends_count'] = entry['friends_count'] | |
r['statuses_count'] = entry['statuses_count'] | |
r['favourites_count'] = entry['favourites_count'] | |
r['listed_count'] = entry['listed_count'] | |
r['contributors_enabled'] = entry['contributors_enabled'] | |
r['description'] = entry['description'] | |
r['protected'] = entry['protected'] | |
r['location'] = entry['location'] | |
r['lang'] = entry['lang'] | |
#NOT EVERY ID WILL HAVE A 'URL' KEY, SO CHECK FOR ITS EXISTENCE WITH IF CLAUSE | |
if 'url' in entry['entities']: | |
r['expanded_url'] = entry['entities']['url']['urls'][0]['expanded_url'] | |
else: | |
r['expanded_url'] = '' | |
print r | |
#CREATE EMPTY LIST | |
lst = [] | |
#ADD DATA FOR EACH VARIABLE | |
for f in fields: | |
lst.append(unicode(r[f]).replace("\/", "/")) | |
#WRITE ROW WITH DATA IN LIST | |
#outfp.write(string.join(lst, "\t").encode("utf-8") + "\n") | |
outfp.write("\t".join(lst).encode('utf-8') + '\n') | |
outfp.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Useful code here .