入門ソーシャルデータ②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は#のことらしい。

twitter.com

ここから先は、頭のoauthのところは全部同じなのでそこはコメントで端折ります。 次のステップは、、

世界とアメリカのトレンドから共通項目だけ抽出しよう

共通項目の抽出にはpythonのsetなるものを使うらしい。 参考資料はこち

uxmilk.jp

さて、やってみる。

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))

とまあこんな感じである。 結果はなんかいろいろ出てしまうので書かないけど。

さてひとまずここまで。

次までの宿題と次にやること

  • pythonのfor文でrange()って何?調べておく
  • 検索結果のメタデータが意味不明すぎるのでドキュメントを読んでおく
  • pythonの辞書について完全に忘れているので復習する

ちなみに次にやることは、以下の通り。何それ超楽しそう。

  • ツイートエンティティを抽出する
  • 頻度分析を使ってツイートとツイートエンティティを分析する
  • ツイートの語彙的多様性を計算する

頑張っていきましょー。それでは。