Python
Twitter
JSON

40代おっさんの手習いで始めるPython(2018/05/21編)其の四

今回はPythonとも言いきれないが、JSON使って入手したツイッターのデータ、こんな形してたのね
(以下は @anisamaさんのモノを一つ取り出したデータ )

JSONで取得したTweetデータ(解析)
created_at:Mon May 14 11:27:17 +0000 2018
id:995988916921483264
id_str:995988916921483264
text:【アニサマ2018テーマソングイベント】6/23(土)、タワレコ渋谷店にて「Stand by…MUSIC!!!」リリースイベント開催決定!出演:オーイシマサヨシ、towana(fhána)、内田彩、亜咲花によるスペシャルトーク&ミ… https://t.co/42mo4fWJPc
truncated:True
entities:{'hashtags': [], 'symbols': [], 'user_mentions': [], 'urls': [{'url': 'https://t.co/42mo4fWJPc', 'expanded_url': 'https://twitter.com/i/web/status/995988916921483264', 'display_url': 'twitter.com/i/web/status/9…', 'indices': [117, 140]}]}
metadata:{'iso_language_code': 'ja', 'result_type': 'recent'}
source:<a href="http://twitter.com" rel="nofollow">Twitter Web Client</a>
in_reply_to_status_id:None
in_reply_to_status_id_str:None
in_reply_to_user_id:None
in_reply_to_user_id_str:None
in_reply_to_screen_name:None
user:{'id': 256906707, 'id_str': '256906707', 'name': 'AnimeloSummerLive', 'screen_name': 'anisama', 'location': '', 'description': 'Animelo Summer Live 公式アカウントです。アニサマ2018 "OK!"チケット最速先行抽選予約中。アニサマ2017-THE CARD- Blu-ray Disc発売中
!', 'url': 'https://t.co/pPDsUQKqE0', 'entities': {'url': {'urls': [{'url': 'https://t.co/pPDsUQKqE0', 'expanded_url': 'https://anisama.tv/', 'display_url': 'anisama.tv', 'indices': [0, 23]}]}, 'description': {'urls': []}}, 'protected': False, 'followers_count': 129214, 'friends_count': 377, 'listed_count': 2198, 'created_at': 'Thu Feb 24 09:27:34 +0000 2011', 'favourites_count': 0, 'utc_offset': 32400, 'time_zone': 'Tokyo', 'geo_enabled': False, 'verified': True, 'statuses_count': 6579, 'lang': 'ja', 'contributors_enabled': False, 'is_translator': False, 'is_translation_enabled': False, 'profile_background_color': '000000', 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'profile_background_tile': True, 'profile_image_url': 'http://pbs.twimg.com/profile_images/977395390344454144/w7FLdJm__normal.jpg', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/977395390344454144/w7FLdJm__normal.jpg', 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/256906707/1521864218', 'profile_link_color': 'FF691F', 'profile_sidebar_border_color': 'FFFFFF', 'profile_sidebar_fill_color': 'EEEEEE', 'profile_text_color': '333333', 'profile_use_background_image': True, 'has_extended_profile': False, 'default_profile': False, 'default_profile_image': False, 'following': True, 'follow_request_sent': False, 'notifications': False, 'translator_type': 'regular'}
geo:None
coordinates:None
place:None
contributors:None
is_quote_status:False
retweet_count:647
favorite_count:1194
favorited:False
retweeted:False
possibly_sensitive:False
lang:ja

Tweetだけ取りたい場合は、text を以下のように取得する

JSONのデータ取得サンプル
import json

url = 'https://api.twitter.com/1.1/search/tweets.json'
req = twitter.get(url, params=params)

tweets = json.loads(req.text)
result = []
#jsonから取得したTweetの束を、これで個々のツイートデータとして配列に格納する
result = tweets['statuses'] 

#ツイートの文面だけ欲しい場合
text = result[0]['text']
#ユーザー名が欲しい場合
text = result[0]['user']['name']
#アカウント名が欲しい場合
text = result[0]['user']['screen_name']

JSON の詳細はこれを見てもらうとしても、おおむね連想配列とかコレクションに近い取り回しかな、と。
この辺も把握すればいろいろやれそう。

データベースに生データを入れて、そのうえで解析して必要なデータだけ正規化して別のテーブルに叩き込めば、後で解析がはかどりそうだしちょっとそれ考えてみるかな。特定の検索キーで検索した結果を10分おきにdbに溜めていくような仕組み。