Pythonでbit.lyの短いURLを作成するスクリプト
以前、こちらの記事で「PythonでTinyURLを作成するスクリプト」を作成したので、最近人気の「bit.ly」でも短いURLを作成するスクリプトを作成しました。
「TinyURL」から短いURLを手に入れる場合は、特定のURLにパラメータを付けるだけで良かったのですが、「bit.ly」の場合はAPIを使うためのアカウントとAPI Keyが必要なようです。
また、送信した後のデータ・フォーマットとしては、XML形式とJSON形式を選べまして、今回の例はXML形式を返すようにした場合のスクリプトになります。
#!/usr/bin/evn python # coding: utf-8 import urllib2 import re class Bitly: def __init__(self): self.re_node = re.compile('<nodeKeyVal>(.+?)</nodeKeyVal>', re.DOTALL) self.re_key = re.compile('<nodeKey>(.+?)</nodeKey>', re.DOTALL) self.re_url = re.compile('<shortUrl>(.+?)</shortUrl>', re.DOTALL) self.re_cdata = re.compile('<\!\[CDATA\[(.+?)\]\]', re.DOTALL) def get_short_url(self, url_list = []): api_url = 'http://api.bit.ly/shorten?version=2.0.1' api_url += '&format=' + 'xml' # xml or json for url in url_list: api_url += '&longUrl=' + url # original URL api_url += '&login=' + YOUR_LOGIN_NAME # your login name api_url += '&apiKey=' + YOUR_API_KEY # your api key #print 'API URL: %s' % (api_url) short_url_list = [] result_xml = '' # access network try: result_xml = urllib2.urlopen(api_url).read() except urllib2.HTTPError, e: sys.stderr.write('%s: %s\n' % (e, api_url)) except urllib2.URLError, e: sys.stderr.write('%s: %s\n' % (e, api_url)) except: sys.stderr.write('Unexpected error: %s\n' % (sys.exc_info()[1])) for node in self.re_node.finditer(result_xml): # original url original_url = '' key_match = self.re_key.search(node.group()) if None != key_match: cdata_match = self.re_cdata.search(key_match.group()) if None != cdata_match: original_url = cdata_match.group()[9:-2] # short url short_url = '' url_match = self.re_url.search(node.group()) if None != url_match: short_url = url_match.group()[10:-11] if '' != original_url and '' != short_url: short_url_list.append((original_url, short_url)) return short_url_list if __name__ == '__main__': b = Bitly() short_url_list = b.get_short_url(['http://www.google.co.jp/', 'http://www.yahoo.co.jp/']) print short_url_list
ちなみに、このAPIは一度に複数のURLを調べることができるようです。
今回のように正規表現を使うよりも、XMLパーサを使ったほうが、XMLを分解する上では良いと思いますが、取り急ぎ正規表現で分解してみました。
「bit.ly」のAPIに関しては、こちらのドキュメントが詳しいので、使う前は一度読んでおくと良いです。