以前作った オレオレtwitter蔵 を家と会社で常用しているのだが、短縮URL機能が欲しくなったので実装した。bit.ly が api を公開しているのでそれを使って作ります。
bit.ly の api を使用するには登録が必要だけど、username と mail address を入れるだけなので非常に楽です。
bit.ly, a simple url shortener
登録したら以下の画面が出るでしょう。ここに表示される bit.ly login と bit.ly API key を使用します。
以下 api の実行テスト
手元の環境は Python2.5 な為、標準では json が入っておらず、simplejson を使用しています。easy_install からサクっとインストールできます。Python2.6 からは json module が標準で使えるんですけどね。
>>> import simplejson
>>>
>>> login = 'username'
>>> apiKey = 'apiKey'
>>> longUrl = 'http://example.com/'
>>>
>>> apiurl = 'http://api.bit.ly/shorten?login=%s&apiKey=%s&version=2.0.1&format=json&longUrl=%s' % (login, apikey, longUrl)
>>> ret = urllib2.urlopen(apiurl).read()
>>> j = simplejson.loads(ret)
>>> j
{u'errorCode': 0, u'errorMessage': u'', u'results': {u'http://example.com/': {u'shortKeywordUrl': u'', u'hash': u'VDcn', u'userHash': u'cwdkZo', u'shortCNAMEUrl': u'http://bit.ly/cwdkZo', u'shortUrl': u'http://bit.ly/cwdkZo'}}, u'statusCode': u'OK'}
実行は上手く行ったので、以前作成した twitter クライアント に組み込みます。変更点以外は省略してます。
# bit.ly API
bitly_login = 'login'
bitly_apiKey = 'apiKey'
bitly_apiUrl = 'http://api.bit.ly/shorten?login=%s&apiKey=%s&version=2.0.1&format=json&longUrl=%s'
def shortenUrl(message):
m = re.search('(http://[a-z0-9_/\.\-\+\?\!\*=,><\[\]:;@%#&]*)', message, re.I)
if m :
longUrl = m.group(0)
url = bitly_apiUrl % (bitly_login, bitly_apiKey, longUrl)
j = simplejson.loads(urllib2.urlopen(url).read())
shortUrl = j['results'][longUrl]['shortUrl']
return message.replace(longUrl, shortUrl)
return message
if __name__ == '__main__':
#getOAuth()
message = shortenUrl(' '.join(sys.argv[1:]))
if isinstance(message, str):
postOAuth(unicode(message, 'cp932').encode('utf-8'))
elif isinstance(message, unicode):
postOAuth(message.encode('utf-8'))
これでおk。
-- 03/19/2010 script の一部を修正