Archive for the ‘bit.ly’ Category
bit.ly for the win
I got my Google App Engine library featured on the list of entries for bit.ly’s competition see bit.ly competition. Admittedly its a small bit of code but I hope someone might find a use for it.
But I`m still waiting for swag
Twitter Bot
While bored I wrote the following python twitter bot. It gets the rss feed from uk hot deals and then tweets the deals. Its pretty basic as it just checks the top item on the list instead of doing dates and times. It uses python-twitter-0.5.
The script is run by cron currently every minute.
#!/usr/bin/env python
import twitter
import urllib
from xml.dom import minidom
import simplejson
api = twitter.Api(username='username', password='passwd')
def shorten(param):
""" Using bit.ly to shorten the url """
url = param
request = "http://api.bit.ly/shorten?version=2.0.1&longUrl="
request += url
request += "&login=username&apiKey=APIKEY"
# fire off request for bit.ly
sock = urllib.urlopen(request)
json = sock.read()
sock.close()
# get the json
json = simplejson.loads(json)
return json['results'][url]['shortUrl']
# get the rss feed
sock = urllib.urlopen("http://www.hotukdeals.com/rss/hot")
rss = sock.read()
sock.close()
# parse the rss into ready xml
xmldoc = minidom.parseString(rss)
# eextract our results
items = xmldoc.getElementsByTagName('item')
result = items[0].getElementsByTagName('title')[0].childNodes[0].nodeValue
result += " " +shorten(items[0].getElementsByTagName('link')[0].childNodes[0].nodeValue)
# open the temp file and read in old value
f = open('/tmp/workfile', 'w+')
existing = f.read()
existing = existing.replace('\n', '')
unicode_result = unicode(result)
# if the new value from the top of the rss feed is different tweet and record it
if unicode_result.encode('utf-8') != existing:
unicode_string = unicode(result)
f.write(unicode_string.encode('utf-8'))
if len(result) > 0:
api.PostUpdate(result)
f.close()
Twitter Bot using bit.ly
On the back of my App Engine bit.ly library I have created Deal Chimp. Hes a twitter bot that updates from UK Hot Deals RSS feed so that you can keep up with the bargains.
bit.ly Competition Entry
Below is the raw code to make a Google App Engine application with the really basic bit.ly api. Theres currently no error checking etc.
If you just want the functionality use the BitLy class in your App Engine code. Currently is just returns simple for you to use. So for example with shorten to access the the hash you would use: json['results'][urlentered]['hash']. Replace the url entered with the url you supplied.
Any questions please email ch at chrishannam dot co dot uk
import cgi
from django.utils import simplejson
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
from google.appengine.api import urlfetch
class Index(webapp.RequestHandler):
def get(self):
EXPAND = "expand"
SHORTEN = "shorten"
INFO = "info"
STATS = "stats"
ERRORS = "errors"
bitly = BitLy('your_login','your_apikey')
self.response.out.write('')
self.response.out.write(bitly.expand('31IqMl'))
self.response.out.write(bitly.shorten('http://www.chrishannam.co.uk'))
self.response.out.write(bitly.info('31IqMl'))
self.response.out.write(bitly.stats('http://bit.ly/31IqMl'))
self.response.out.write(bitly.errors())
self.response.out.write('')
class BitLy():
def __init__(self, login, apikey):
self.login = login
self.apikey = apikey
def expand(self,param):
request = "http://api.bit.ly/expand?version=2.0.1&shortUrl=http://bit.ly/"
request += param
request += "&login=" + self.login + "&apiKey=" +self.apikey
result = urlfetch.fetch(request)
json = simplejson.loads(result.content)
return json
def shorten(self,param):
url = "http://" + param
request = "http://api.bit.ly/shorten?version=2.0.1&longUrl="
request += url
request += "&login=" + self.login + "&apiKey=" +self.apikey
result = urlfetch.fetch(request)
json = simplejson.loads(result.content)
return json
def info(self,param):
request = "http://api.bit.ly/info?version=2.0.1&hash="
request += param
request += "&login=" + self.login + "&apiKey=" +self.apikey
result = urlfetch.fetch(request)
json = simplejson.loads(result.content)
return json
def stats(self,param):
request = "http://api.bit.ly/stats?version=2.0.1&shortUrl="
request += param
request += "&login=" + self.login + "&apiKey=" +self.apikey
result = urlfetch.fetch(request)
json = simplejson.loads(result.content)
return json
def errors(self):
request += "http://api.bit.ly/errors?version=2.0.1&login=" + self.login + "&apiKey=" +self.apikey
result = urlfetch.fetch(request)
json = simplejson.loads(result.content)
return json
application = webapp.WSGIApplication(
[('/', Index)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()

