#!/usr/bin/env python
# Figure out how you might know people by examining their follower, following
# lists compared with yours
#
# David Warde-Farley (@dwf), based on code by Andrey Petrov (@shazow)

import urllib
import simplejson
import sys

def handle_exception(e, json):
    if 'error' in json and type(e) == AttributeError:
        print >>sys.stderr, 'API Error:', json['error']
    else:
        print >>sys.stderr, type(e), str(e)
        print >>sys.stderr, json
    sys.exit(1)
    
def get_followers(login, password, user="", page=1):
    if user != "":
        user = "/%s" % user
    s = 'http://%s:%s@twitter.com/statuses/followers%s.json?page=%d' % \
    (login, password, user, page)
    #print "Opening %s" % s
    u = urllib.urlopen(s)
    data = u.read()
    #print data
    json = simplejson.loads(data)
    try:
        d = [i.get('screen_name') for i in json]
    except Exception, e:
        handle_exception(e, json)
    if len(d) == 100:
        d += get_followers(login, password, user=user[1:], page=page+1)
    return d

def get_friends(login, password, user="", page=1):
    if user != "":
        user = "/%s" % user
    s = 'http://%s:%s@twitter.com/statuses/friends%s.json?page=%d' % \
    (login, password, user, page)
    #print "Opening %s" % s
    u = urllib.urlopen(s)
    data = u.read()
    #print data
    json = simplejson.loads(data)
    try:
        d = [i.get('screen_name') for i in json]
    except Exception, e:
        handle_exception(e, json)
    if len(d) == 100:
        d += get_friends(login, password, user=user[1:], page=page+1)
    return d


def usage_and_exit():
    print >> sys.stderr, "usage: %s login otheruser" % sys.argv[0]
    #sys.exit(1)
    
if __name__ == "__main__":
    try:
        login, otheruser = sys.argv[1:]
    except:
        usage_and_exit()
    import getpass
    password = getpass.getpass("Password for Twitter account '%s': " % login)
    my_follows = set(get_friends(login, password))
    my_followers = set(get_followers(login, password))
    their_follows = set(get_friends(login,password,otheruser))
    their_followers = set(get_followers(login,password,otheruser))
    
    print "People that @%s and I both follow: " % otheruser
    for name in my_follows.intersection(their_follows):
        print " * %s" % name
    print "\n\nPeople who follow both of us:"
    for name in my_followers.intersection(their_followers):
        print " * %s" % name
    print "\n\nPeople who follow @%s who I also follow:" % otheruser
    for name in my_follows.intersection(their_followers):
        print " * %s" % name
    print "\n\nPeople who @%s follows who also follow me:" % otheruser
    for name in my_followers.intersection(their_follows):
        print " * %s" % name
