入門ソーシャルデータ②TwitterAPIトレンド検索からツイート検索まで
こんばんは。今日は昨日の続きです。 taikomegane.hatenablog.jp
さて、まずは昨日非常に長ったらしい出力で終わってしまったtrend検索。 これを綺麗にしましょう。
トレンド検索をして、結果をjson形式で出力しよう
結論からいうと、json形式で出力しちゃえばOKということらしく、、
import twitter import json #ここ CONSUMER_KEY = '' CONSUMER_SECRET = '' OAUTH_TOKEN = '' OAUTH_TOKEN_SECRET = '' auth = twitter.oauth.OAuth(OAUTH_TOKEN, OAUTH_TOKEN_SECRET, CONSUMER_KEY, CONSUMER_SECRET) twitter_api = twitter.Twitter(auth=auth) WORLD_WOE_ID = 1 US_WOE_ID = 23424977 worId_trends = twitter_api.trends.place(_id=WORLD_WOE_ID) us_trends = twitter_api.trends.place(_id=US_WOE_ID) print(json.dumps(worId_trends, indent=1)) #ここ print(json.dumps(us_trends, indent=1)) #ここ
コメントつけた3箇所を修正するだけで、こんな感じになる
[ { "trends": [ { "name": "#ThursdayThoughts", "url": "http://twitter.com/search?q=%23ThursdayThoughts", "promoted_content": null, "query": "%23ThursdayThoughts", "tweet_volume": 26178 }, { "name": "#iPhoneAt10", "url": "http://twitter.com/search?q=%23iPhoneAt10", "promoted_content": null, "query": "%23iPhoneAt10", "tweet_volume": null }
ちなみにちょくちょく出てくる%23は#のことらしい。
ここから先は、頭のoauthのところは全部同じなのでそこはコメントで端折ります。 次のステップは、、
世界とアメリカのトレンドから共通項目だけ抽出しよう
共通項目の抽出にはpythonのsetなるものを使うらしい。 参考資料はこちら
さて、やってみる。
import twitter #この辺でconsumer_keyとかいろいろやってる twitter_api = twitter.Twitter(auth=auth) WORLD_WOE_ID = 1 #世界 US_WOE_ID = 23424977 #アメリカ #世界のトレンドを入手 worId_trends = twitter_api.trends.place(_id=WORLD_WOE_ID) #アメリカのトレンドを入手 us_trends = twitter_api.trends.place(_id=US_WOE_ID) #トレンドのリストを拡張for文でset world_trends_set = set([trend['name'] for trend in worId_trends[0]['trends']]) us_trends_set = set([trend['name'] for trend in us_trends[0]['trends']]) #&で積集合を算出、出力 common_trends = world_trends_set & us_trends_set print(common_trends)
結果はこんな感じ
{"Trump's Obama Obsession", '#ThursdayThoughts', '#iPhoneAt10', '#FelizJueves', '#29Jun'}
はい、じゃあ今度はこの中の #iPhoneAt10を使ってツイートを検索します。
ハッシュタグでツイートを検索しよう
検索に使うのはGET search APIです。 GET search/tweets — Twitter Developers
import twitter import json #いつものやつ twitter_api = twitter.Twitter(auth=auth) #queryと検索数を指定 q = "#iPhoneAt10" count = 100 #検索結果をsearch_resultsに保存 search_results = twitter_api.search.tweets(q=q, count=count) statuses = search_results['statuses'] #ここから先がよくわからない for _ in range(5): print ("Length of status", len(statuses)) try: next_results = search_results['search_metadata']['next_results'] except KeyError: #next_resultsがない場合は、もう結果がない break kwargs = dict([ kv.split('=') for kv in next_results[1:].split('&')]) search_results = twitter_api.search.tweets(**kwargs) statuses += search_results['statuses'] #結果を出力! print (json.dumps(statuses[0], indent=1))
とまあこんな感じである。 結果はなんかいろいろ出てしまうので書かないけど。
さてひとまずここまで。
次までの宿題と次にやること
ちなみに次にやることは、以下の通り。何それ超楽しそう。
- ツイートエンティティを抽出する
- 頻度分析を使ってツイートとツイートエンティティを分析する
- ツイートの語彙的多様性を計算する
頑張っていきましょー。それでは。