Tweet Entities を利用した短縮URLの伸長

Twitter 上のツイートに含まれる URL は t.co によって短縮されている(プログラム冒頭の例を参照)。オリジナルの URL は Tweet Entities に記載されているから,これを利用して伸長する。

Tweet Entities ・・・ https://dev.twitter.com/docs/tweet-entities

#coding: utf-8

# ツイートに含まれる短縮 URL (t.co) を entities 情報に基づいて伸長する。
# 例を以下に示す:
#置換前 : テスト(2013/01/17) : Yahoo http://t.co/Q0bCD94p と Google https://t.co/Iq66XDzR を比べると Google が好き。
#置換後 : テスト(2013/01/17) : Yahoo http://t.co/Q0bCD94p と Google https://www.google.co.jp/ を比べると Google が好き。
#
# 2013.01.17

import tweepy
import re

#短縮 URL の伸長
def expandUrl(tl):
    # 複数の URL が含まれる場合に備えてループを回す
    # (注) urls フィールドの値はリストのため,いずれにしてもループを回す必要あり。
    for url in tl.entities['urls']:
        if url is None: break	# urls の値が存在しない場合
        shortenUrl = url['url']	#短縮URL
        expandedUrl = url['expanded_url']	#伸長した(オリジナル)URL
        tl.text = re.sub(shortenUrl, expandedUrl, tl.text)
    return tl

consumer_key = 'consumer key'
consumer_secret = 'consumer secret'

# my access token から見る
oauth_token = 'oauth token'
oauth_token_secret = 'oauth token secret'

# auth オブジェクトの初期化
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

# あらかじめ取得したOAuth tokenの設定
auth.set_access_token(oauth_token, oauth_token_secret)

# api オブジェクトの設定
api = tweepy.API(auth)

#ユーザタイムラインの取得 (include_entities=True がポイント)
userTimeline = api.user_timeline('screen name', include_entities=True)

for tl in userTimeline:
    print "伸長前 : " + tl.text.encode('utf-8')

    #短縮 URL の伸長
    tl = expandUrl(tl)

    print "伸長後 : " + tl.text.encode('utf-8')