I'm heavily basing my code off of this excellent tutorial at Ars Technica, so I am able to track my own new followers because my login information is hard-coded in. However, I'd like to track new followers of other people's accounts too. How can I do this without their passwords?
import pycurl, json, StringIO
STREAM_URL = "http://stream.twitter.com/1/statuses/filter.json?follow=[userid1],[userid2]&track=[keyword1],[keyword2]"
REST_URL = "http://api.twitter.com/1/"
class Client:
def __init__(self):
self.friends = []
self.buffer = ""
self.userid = None
self.conn = pycurl.Curl()
def authenticate(self, username, password):
output = StringIO.StringIO()
self.conn.setopt(pycurl.USERPWD, "%s:%s" % (username, password))
self.conn.setopt(pycurl.URL, REST_URL + "account/verify_credentials.json")
self.conn.setopt(pycurl.WRITEFUNCTION, output.write)
self.conn.perform()
data = json.loads(output.getvalue())
if "error" in data: return False
self.userid = data["id"]
return True
def connect(self):
self.conn.setopt(pycurl.URL, STREAM_URL)
self.conn.setopt(pycurl.WRITEFUNCTION, self.on_receive)
self.conn.perform()
def on_receive(self, data):
self.buffer += data
if data.endswith("\r\n") and self.buffer.strip():
content = json.loads(self.buffer)
self.buffer = ""
print content
if "friends" in content:
self.friends = content["friends"]
elif "event" in content and content["event"] == "follow":
id_list = ['[userid1]','[userid2]']
print "NEW FOLLOWER!!"
print "target id:", content["target"]["id"]
if content["target"]["id"] in id_list:
print content
print "New follower:", content["source"]["name"], "(@" + content["source"]["screen_name"] + ")"
elif content["source"]["id"] == self.userid:
self.friends.append(content["target"]["id"])
elif "text" in content:
to = content["in_reply_to_user_id"]
if to and to != self.userid and to not in self.friends: return
if to == self.userid: print "(REPLY)",
print u"{0[user][name]}: {0[text]}".format(content)
client = Client()
if client.authenticate("[username]", "[password]"):
client.connect()
else:
print "Login credentials aren't valid!"
Taylor Singletary of Twitter responded to the same question on the Google group for Twitter Development Talk: