Skip to content

Instantly share code, notes, and snippets.

@tdsmith
Last active December 12, 2015 03:08
Show Gist options
  • Save tdsmith/4704526 to your computer and use it in GitHub Desktop.
Save tdsmith/4704526 to your computer and use it in GitHub Desktop.
A tool to help with Twitter list management. Shows you: a) people who are in your list who you don't follow and b) who you follow (newest first-ish), and whether your follows are in your list or not. To start, go to https://dev.twitter.com/apps, create a new app, and get app tokens. Use the dev web interface to create an OAuth token. Put those i…
#!/usr/bin/env python
import twython, secrets
from math import ceil
def cursored_request(method, sequence, *args, **kwargs):
myseq = []
nextCursor = -1
while nextCursor != 0:
kwargs['cursor'] = nextCursor
response = method(*args, **kwargs)
nextCursor = response['next_cursor']
myseq.extend(response[sequence])
return myseq
t = twython.Twython(
app_key = secrets.consumer_key,
app_secret = secrets.consumer_secret,
oauth_token = secrets.access_token,
oauth_token_secret = secrets.access_secret,
version='1.1')
# get 'a' list members
members = cursored_request(t.getListMembers, 'users', slug=secrets.list_slug, owner_screen_name=secrets.username, skip_status=True, include_entities=False)
# build our user database
users = {}
for member in members:
users[member['id']] = member
member_ids = set([member['id'] for member in members])
# get friend IDs
ordered_friend_ids = cursored_request(t.getFriendsIDs, 'ids', username=secrets.username)
friend_ids = set(ordered_friend_ids)
# make a list of user objects we need to fetch with lookup
# users who ARE friends but are NOT members of the list
difference = list( friend_ids.difference(member_ids) )
# and fetch them
for i in range(int(ceil(len(difference)/100.0))):
user_id = ','.join([str(id) for id in difference[i*100:(i+1)*100]])
response = t.lookupUser(user_id=user_id, include_entities=False)
for user in response:
users[user['id']] = user
# now print a table
print 'Name\tIn list?\tFriend?'
# not-followeds first, because weird
for id in member_ids.difference(friend_ids):
print '%s\t%s\t%s' % (users[id]['screen_name'], 'Yes', 'No')
for id in ordered_friend_ids:
print '%s\t%s\t%s' % (users[id]['screen_name'], ['No', 'Yes'][id in member_ids], 'Yes')
# your values go here
consumer_key = None
consumer_secret = None
access_token = None
access_secret = None
username = None
list_slug = None
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment