Photo by S~Revenge
Whenever a user changes their picture on Twitter the URL changes. This is a massive pain for applications like twitter.mailana.com that show user's image since it requires a lot of code to handle checking and updating the links. In an ideal world Twitter would offer a permanent URL for every user's portrait. That's on their roadmap, but until they update their API, Shannon Whitley's SPIURL project offers the next best thing.
You can either download the Python code and host it on your own free AppSpot account, or use Shannon's public http://purl.org/net/spiurl/ link. Josh Fraser extended the code to support large portraits and added some other useful tweaks like a content-type for browser viewing.
I've been happily using my own copy of SPIURL for the last couple of weeks, but a few days ago I started noticing broken image links again. After a bit of investigating, I found I was hitting a limit of 100 requests per hour. This never used to happen, so I assume something changed on the Twitter side. To fix this I've added authentication to the API call (along with some more error reporting). Here's the main change:
…
import base64
…
#Enter your own account details here
authString = "Basic " + base64.encodestring("yourusername:yourtwitterpassword")
response = urlfetch.fetch("http://twitter.com/users/show/" + _screen_name + ".xml", payload=None, method=urlfetch.GET, headers={"AUTHORIZATION" : authString}, allow_truncated=False, follow_redirects=False)
You can download the full code here. You'll need to change the authorization details to your own account, and ensure the account is white-listed. I'm still waiting for my rate limit to be bumped, so I'm not totally certain it's working, I'll update this when I am.