from urllib import urlencode from os import makedirs from os.path import dirname import json from datetime import datetime def lookup(screenname=False, user_id=False): if screenname is False and user_id is False: raise ValueError("Suppy either screenname or user_id") params = {} if screenname: params["screen_name"] = screenname else: params["user_id"] = user_id return call_twitter_api("users/lookup.json",params) def call_twitter_api(endpoint, params): """ Calls twitter api, and parses returned json, than returns. string, {"string": ?} -> ? """ query = "%s?%s" % (endpoint, urlencode(params,doseq=1)) print query try: makedirs(dirname(query)) except OSError: pass try: with open(query,"r") as dosya: raw_json = dosya.read() return json.loads(raw_json) except IOError: url = "https://api.twitter.com/1/%s" % (query) conn = urlopen(url) raw_json = conn.read() conn.close() parsed = json.loads(raw_json) if "error" not in parsed: with open(query,"w") as dosya: dosya.write(raw_json) else: raise TwitterError(parsed["error"]) return parsed def get_follower_ids(screenname=False, user_id=False): if screenname is False and user_id is False: raise ValueError("Suppy either screenname or user_id") params = {} if screenname: params["screen_name"] = screenname else: params["user_id"] = user_id return call_twitter_api("followers/ids.json",params)["ids"] def export_users(filename, user_ids): columnheaders = [ "userid", "screenname", "fullname", "statusses", "friends", "followers", "favourites", "url", "lang", "location", "created", "timezone", ] headerline = ",".join("\"%s\"" % i for i in columnheaders) + "\n" lineformat = ",".join(["\"%s\""] * len(columnheaders)) + "\n" print lineformat with open(filename, "w") as dosya: dosya.write(headerline) now = datetime.now() for id in user_ids: try: user = lookup(user_id=id)[0] except IOError: continue except KeyError: continue dosya.write( (lineformat % ( user["id_str"], user["screen_name"], user["name"], user["statuses_count"], user["friends_count"], user["followers_count"], user["favourites_count"], user["url"], user["lang"], user["location"], user["created_at"], user["time_zone"], )).encode("utf-8"))