Twitterのbot作りは良い勉強になる
以前のエントリで紹介したように、Tweepyというライブラリを使うと、かなり簡単にPythonでTwitterを自動操作出来るようになります。
つぶやいたり、フォロー/アンフォローしたり、RTしたりふぁぼったりといったアクションをTweepyを使って記述し、自動で実行できる環境に置けば、自前のbotが出来上がります。botといえば、ブログ記事の紹介ツイートを定期的に流したり、新しいフォロワーにフォロバするといった使い方がよくされていますが、自作のプログラムであれば例えば特定のキーワードを含むツイートをしているユーザを検索してそのプロフィールを取得してデータベース化するとか、ふぁぼやRTをよくしてくれる人を一定の基準を設けてリストに登録していくといった複合的な作業も、自動化できて手間が省けます。
私は自分がメインで使ってる個人アカウントとは別に、仕事や趣味の情報を収集・発信するためのアカウントをいくつか運営していて*1、それらのアカウントではフォロバなどいくつかのアクションを自動化しています。初心者なので勉強しながら色々な機能を作ってみて、自動化できた操作が増えるたびに「これは便利!」と実感しています。暴走したら困る*2のでまだメインのアカウントにはほとんど組み込んでないけどw
動作環境は単純で、Tweepyを使って書いたPythonのスクリプトを、AWS(EC2)で借りた一番安いスペックのLinuxサーバに置いて、cronでPythonインタープリタごと起動して動かしてます。このへん、一連の環境作りを後日エントリにまとめようと思います。
今は、機械学習の練習台にと思って、スパム的なアカウントや、過激なネトウヨアカウントなどを識別して自動的にフォローを外すなどの機能を加えるため、学習用のデータを集めているところです。そのためのデータ収集も、ある程度自動化しています*3。
最近思うんですが、初心者がプログラミングの勉強を進める上で、「Twitterのbotづくり」はとても良い演習の題材な気がします。基本的なコーディングに慣れるし、私の場合はラッパーを介して単純化してしまっているものの「Web APIを使う」ことの入門にもなるし、「プログラムを自動で定期実行させる」ことの練習にもなります。私の場合、「AWSでLinuxサーバを借りてSSHでログインしてcronの設定をして・・・」という作業を初めてやってみるいい機会にもなりました。
また、機械学習の練習にも良いのではと感じます。私もいま、特定の傾向を持つツイートのデータを集めてるんですが、単語で分割して頻度を数えてクラスタリングするみたいな単純な分析を試せるし、データを分析可能な形に成形するための処理を書く勉強にもなります。「データを取ってくる」→「加工する」→「解析する」→「レポートする」が一通り出来ないといけないので、Web APIを使った演習はためになると思いました。今後、WikipediaのAPIとかも使ってみたいと思っています。
Twitter APIを使う上での最初の難関
さて、Tweepyを使えば、TwitterのREST APIを手軽に叩けるようになるのは事実なのですが、恐らく最初の難関となるのが、レスポンスデータが膨大すぎて意味分からんということです。*4
これはTwitterのAPIを(Tweepy等のラッパーを使わずに)生に近い形で叩いた場合に受け取るJSONを読む場合にもある程度言えることではありますが、後述する理由で、Tweepyの場合はさらにデータが膨大になっています。せっかくデータが得られても、中にどういう情報が入っているかがちんぷんかんぷんだと、やる気が失せます。
「フォローする」「つぶやく」といったアクションだけを自動化するならレスポンスは特に気にしなくていいですが、自分のフォロワー/フレンド一覧を取得して何かやるとか、特定の内容のツイートを選んでRTするとか、他人のアカウントの特性(プロフの内容、フォロー/フレンドの傾向、最近のツイート等)を調べてフォローするかどうか決めるとかいう処理を行うには、どうしてもget系の機能で取得したレスポンスを読む必要が出てきます。
ちなみに、たとえば私自身のツイート1件分のデータを要求した場合のレスポンスは、以下のようなデータです。なんかヤバいので画像にしました。
もはや、文字も小さすぎてよく分かりませんw
このエントリの後ろのほうにテキストで掲載してますが、とりあえずここでは、大量の文字列が返ってきて吐き気がするイメージだけをつかんでいただければと思います。
ツイート1件分でこんなのが返ってくると、必要な情報をどうやって取り出せばいいのか検討もつかず、いきなりやる気がなくなってしまう人も多いと思います。しかもこの例はまだマシな方で、場合によっては1つのツイートのデータが1000項目ぐらいの情報を含んでいる場合すらあります。
しかしこのデータは、冷静に見ていけばそんなに複雑なわけでもなく、パターンが分かってしまえば欲しいデータを取り出すのに苦労はしなくなります。かなり多くのデータ項目が含まれてはいるのですが、だいたいよく使うものは限られてくるし、全体の構造がいったん頭に入ると、それがどこにあってどうやって取り出せるのかも簡単に分かります。
必要な情報のとり方がわかると、俄然やる気が出てきます。ツイートの位置情報はどこにどういう形式で入っているのかとか、何件くらいリツイートされているんだろうとか、そういうのが分かりだすと、「この情報を使ってこういう自動処理ができるのでは?」っていう想像力が働いて、色々プログラムを書いてみたくなってきます。
そこで、本エントリでは、Tweepyを使っていて返される代表的なレスポンスデータの全体の構造と、よく使いそうなデータがどのように入っているのかをメモしておこうと思います。
なお大前提ですが、TwitterのAPIでは「つぶやき」は「Status」と呼ばれ、あるアカウントがフォローしている相手のことは「Friend」と呼ばれます。フォローを外すアクションは「Destroy Friendship」という怖い名前で呼ばれます。ユーザ名(@がつくやつ)は「Screen Name」と呼ばれ、システム的に振られているID(数字の並びになっている)と区別されます。あとはだいたい、ふだん使っている機能のまんまかなと思います(followerとか)。
また、以下の説明は、冒頭にリンクを貼った以前のエントリでやったように、「api」という変数名でTweepyのAPIハンドラオブジェクトを生成していることを前提とします。
レスポンスの種類
まず、そもそも返されるデータにはどんな種類のものがあるのかですが、これはTweepyのreferenceを眺めるとわかります。
API Reference — tweepy 3.5.0 documentation
色々なメソッドの使用法が書かれてますが(これも後日エントリにまとめようかと思います)、それぞれの一番下に、「Return type」って欄がありますよね。
Return type: list of Status objects
Return type: Status object
Return type: User object
Return type: list of DirectMessage objects
みたいなやつです。
各メソッドを使ったときに返り値として得られるデータは、いくつかの種類のTweepyオブジェクトの1つ、もしくはオブジェクトのリストです。
このリファレンスを見ていると、「Status」オブジェクトと「User」オブジェクトがたくさん登場していますね。「List」オブジェクトとか「Frendship」オブジェクトとか「DirectMessage」オブジェクトもありますが、多くの機能で、返り値がStatusオブジェクトかUserオブジェクト、またはそれらのリストになっています。
また、よく使うであろうものとしては、.followers_ids()メソッドや.friends_ids()メソッドで返ってくる、id(整数)のリストですね。あるアカウントを自分がすでにフォローしているかを判定するといった場合は、このidリストを使います。
botを作って実行したいような事はたいてい、idリストかStatusオブジェクトかUserオブジェクトを使うのだぐらいに思っておいてもいいような気がします。
StatusオブジェクトとかUserオブジェクトとか言ってますが、このStatusとかUserとかは要するにクラスになっています。たとえば、
>>> mytweet1 = api.user_timeline(count=1)[0]
このように、自分のタイムラインを取得するメソッド「.user_timeline()」を使用すると、Statusクラスのオブジェクトのリストが返されます。上の例では、ユーザ名等を省略しているので「自分自身のタイムライン」が参照されており、その0番目要素、つまり「自分の最新のつぶやき」データを取得して、mytweet1という変数名に渡しています。このmytweet1という変数の中身はstatusクラスのインスタンスになっており、
>>> print(mytweet1.id) 830561754123956224
のように、アトリビュートとして中身の情報を取り出すことができます(↑の例では.idでツイートのIDを表示)。
要は、そのクラスのオブジェクトにどのようなアトリビュートが入っているのかを理解しておけば、レスポンスデータを使いこなして様々な処理を行うことができるわけですね。
レスポンスデータの構造
Tweepyのレスポンスデータが、先ほど貼り付けた画像のようにパッと見めちゃめちゃややこしい理由の一つは、データがだいぶ冗長な構成になってるからです。同じ情報が何箇所にも入ってるんです。冗長化している原因は主に2つあります。
1つは、Twitter APIが返すデータがそもそも、「ユーザのデータを取得するとそのユーザの最新のツイートのデータが付いてくる」「ツイートのデータを取得するとそのユーザのデータが付いてくる」ようになっていることですね。もともと入れ子になってるわけです。
もう1つは、Tweepyは、Tweepyで作ったオブジェクトのアトリビュートとして直接取り出せるデータの他に、Twitter APIが返してくる生のJSONのデータも埋め込んでくれているからです。このおかげで、取り出せるデータがほぼまるごと、「素のアトリビュートの1項目」と「アトリビュートの1つとして埋め込まれたJSON内の1項目」で重複する形になっています。
この1つ目と2つ目の要因が重なって、たとえばある1つのツイートのデータを取得すると、そのツイートの性質を表すさまざまなデータ項目と、それがJSONでまとまった項目が含まれるのに加えて、そのツイートの主であるユーザの性質を表すさまざまなデータ項目と、それがJSONにまとまった項目も得られるわけですね。んでJSONの中身も入れ子になっていると。
私は今のところJSONのデータを使っていませんが、Tweepy以外の手段(たとえばurllib2)でAPIをコールする作業と統合するようなことを考えると、JSONで見るように揃えておいたほうが良いのかもしれません。
主なTweepyオブジェクトのデータの構造を、途中のデータを省略した形で、改行とインデントを加えて整理すると以下のようになります。入れ子構造がつかめると、データを見るのが楽になります。
なお以下はあくまで例で、同じ種類のオブジェクトでも、中身によって構成が違うことがあります。
Userオブジェクト
Userオブジェクトは、ユーザのID、Screen Name、フォロワー数、地域など様々な情報を含んでいますが、大雑把には以下のように、なっています、jsonデータとstatsuデータが埋め込まれていること、statusデータにはそれ自身のjsonデータも埋め込まれているところがポイントかなと思います。
他の種類のオブジェクトでもそうなのですが、Tweepyのデータは(hoge=hage, hogee=hagee)というように、丸カッコで括られて、項目名=値という書式で入っています。JSONが埋め込まれる時は、「_json={ }」という項目として埋め込まれ、{ }の中にJSONの書式で、「'hoge':hage, 'hogee':hagee」というようなデータが書き込まれます。
User( 【省略】 _json={ 【省略】 'status': {【省略】} 【省略】 }, 【省略】 status=Status( 【省略】 _json={【省略】} 【省略】 ), 【省略】 )
Userオブジェクトの1階層目には、たとえばユーザのscreen nameが入っています。user1という変数名でオブジェクトが与えられたとすると、
user1.screen_name
というふうに記述すれば、screen_nameを取り出せます。
JSONが埋め込まれて階層的になっている場合に、たとえばあえてJSON内の情報を取り出したいとすると(1階層目から直接同じ情報が取れますが)、
user1._json['screen_name']
のように記述します。jsonから取り出す書式は、Pythonの辞書型と同じと覚えておけばいいですね。
Statusオブジェクト
Statusオブジェクトは以下のようになっています。Status(つぶやき)なので、当然、つぶやきのIDやテキストなど様々な特性がデータ項目として埋め込まれていて、その並びの中に、「author」や「user」という項目名でuserオブジェクトが埋め込まれています。
authorとuserは似たような情報が入ってて混乱しますが、userのほうは既に非推奨(depreciated)となっているので、authorのほうを使ったほうが良いようです*5。
それに加えてJSONも埋まっているので、なかなかややこしいデータになっています。
Status( 【省略】 author=User( 【省略】 _json={【省略】} 【省略】 ), 【省略】 user=User( 【省略】 _json={【省略】} 【省略】 ), 【省略】 _json={ 【省略】 'user': {【省略】} 【省略】 }, 【省略】 )
RTありのStatusオブジェクト
リツイートされたものは一気に複雑になります。要は、1階層目ではそのリツイート自体の情報(時刻とか)を表現しなければならず、その中にretweeted_statusという情報を埋め込んで、RTされた元のツイートのデータを入れているわけですね。そしてまたユーザのデータが埋め込まれたり、JSONも埋め込まれたりすることによって、大変複雑になっています。
結果として階層が深くなっており、
OBJECT.retweeted_status.author._json['screen_name']
のような取り出し方があり得ますw
Status( 【省略】 author=User( 【省略】 _json={【省略】} 【省略】 ), 【省略】 user=User( 【省略】 _json={【省略】} 【省略】 ), 【省略】 retweeted_status=Status( 【省略】 author=User( 【省略】 _json={【省略】} 【省略】 ), 【省略】 user=User( 【省略】 _json={【省略】} 【省略】 ), 【省略】 _json={ 【省略】 'user': {【省略】} 【省略】 }, 【省略】 ), 【省略】 _json={ 【省略】 'retweeted_status': { 【省略】 'user': {【省略】} 【省略】 } 【省略】 }, 【省略】 )
Friendshipオブジェクト
簡単なやつもみてみましょう。
api.show_friendship(source, target)というメソッドを用いると、特定の2ユーザ(sourceとtarget)間の関係を表示させることができます。もちろんどちらかが自分自身でも構いません。フォローしてるかどうかとか、ブロックしてるかどうかとかがわかります。
このメソッドの返り値は簡単な構造になっていて、
( Friendship(【省略】), Friendship(【省略】) )
というものです。source側から見た関係と、target側から見た関係が、それぞれFriendshipオブジェクトになっていて、そのタプルが返されます。
SearchResultオブジェクト
api.search()というメソッドがあって、これはキーワードで検索して該当するツイートが得られるというやつなのですが、この返り値はstatusのリストになっています。
つまり実体としては、
[Status(), Status(), Status()]
というようなデータが得られるので、たとえばインデックスで[0]を指定して1個目を取り出したとすると、1件目でヒットしたツイートの内容が、Statusオブジェクトとして取得出来ます。
レスポンスの中身
さて、では実際にレスポンスの中身を見ていきたいと思いますが、正直、項目が多すぎて、いちいち説明してるととんでもない分量になりますし、私も何なのか理解してない項目がたくさんあります。
なので、以下では、レスポンスの取得例を、改行とインデントで整理したテキストを貼り付けて、いくつかの項目についてその意味を述べておくに留めます(すいません)。階層関係を掴みやすくするために、たとえばjsonが埋まっている場合は「##### ここからstatus/_json #####」といったテキストを挟んであります。
こうやって改行とインデントによって、項目を分離しかつ階層関係が把握されるだけでも、中身は随分と読みやすくなります。私はすべて「肉眼でパース」(笑)して改行とインデントを手作業で入れていったので、全部読んだことになりますが、数百項目を順番に読んで行ってもそんなに疲れませんでした。*6
各項目は、項目名を見れば何のことなのかだいたい分かると思いますし、Twitter APIが返すJSONの中身に対応しているので、API関連の情報をググれば意味はすぐに突き止められます。Twitter本家のAPIリファレンスを日本語で解説したサイトをみるとかもオススメです。
以下、膨大な量のテキストを引用形式で貼り付けていきますが、スマホだと右端で折り返されてわけのわからない表示になる可能性があります。また、パソコンでみるにしても、テキストエディタかなんかにコピペして縮小したり拡大したりしながら見たほうがいいかもしれません。
Userオブジェクト
idはシステム的に振られている数字の並び。
screen_nameは「@〜」のところ。
nameってのは表示名(頻繁に変えても大丈夫なやつ)です。
id_strってのは、idがシングルクォーテーションで囲んであって、文字列型として扱えるやつです。
statuses_countはツイート数。followers_countはフォロワー数。friends_countはフォロー数。
protected(True or False)は鍵垢かどうか。色々な処理を書いていると、「相手が鍵垢だとエラーになる処理」とかがあって、エラーを回避するために事前に鍵垢かどうかをチェックする必要が出てきます。
Followingは自分がフォローしてるかどうか。
verifiedは認証済みユーザかどうか。
langは言語、time_zoneはそのまんま。日本人ユーザのデータばかり集めたいときに使ったりとか。
locationは自分で入力してある居場所で、ツイート(status)に自動でついてくるplaceとは別です。
・・・といったところですかね。これらのデータに、
OBJECT.id
OBJECT.screen_name
みたいな書式でアクセスしてください。
その他詳しくは、Syncerの解説をみるのが良いです。
User( time_zone='Tokyo', profile_background_image_url='http://abs.twimg.com/images/themes/theme1/bg.png', listed_count=38, is_translation_enabled=True, profile_background_tile=False, profile_location=None, name='bata', profile_sidebar_border_color='C0DEED', screen_name='statsbeginner', url='https://t.co/6HCF2FYowE', follow_request_sent=False, ##### ここからuser/_json ##### _json={ 'time_zone': 'Tokyo', 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_location': None, 'name': 'bata', 'profile_sidebar_border_color': 'C0DEED', 'screen_name': 'statsbeginner', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'id_str': '257791390', 'default_profile_image': False, 'profile_use_background_image': True, ##### ここからuser/_json/status ##### 'status': { 'favorite_count': 1, 'possibly_sensitive': False, 'coordinates': None, 'source': '<a href="http://www.hatena.ne.jp/guide/twitter" rel="nofollow">Hatena</a>', 'text': '去年、国立がん研究センターとJTの論争が話題になった頃にあわせて紹介した砂糖の話が、ウェルク事件に絡めて取り上げられていたw / “60年後にばれた米「砂糖業界」の大陰謀(上)「低脂肪ダイエット」のウソ--大西睦子\xa0|\xa0新潮社フ…” https://t.co/BQkMW7m6de', 'contributors': None, 'created_at': 'Mon Jan 23 05:15:50 +0000 2017', 'truncated': False, 'retweeted': False, 'in_reply_to_screen_name': None, 'is_quote_status': False, 'in_reply_to_user_id': None, 'id_str': '823398817370247168', 'retweet_count': 0, 'in_reply_to_status_id_str': None, 'id': 823398817370247168, 'in_reply_to_status_id': None, 'entities': { 'urls': [{ 'display_url': 'htn.to/3i7io9', 'expanded_url': 'http://htn.to/3i7io9', 'url': 'https://t.co/BQkMW7m6de', 'indices': [117, 140] }], 'user_mentions': [], 'symbols': [], 'hashtags': [] }, 'favorited': False, 'in_reply_to_user_id_str': None, 'lang': 'ja', 'place': None, 'geo': None }, ##### ここまでuser/_json/status ##### 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'statuses_count': 13014, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'notifications': False, 'id': 257791390, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'profile_sidebar_fill_color': 'DDEEF6', 'utc_offset': 32400, 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'profile_text_color': '333333', 'followers_count': 1873, 'default_profile': True, 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'location': 'つくば市', 'needs_phone_verification': False, 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'protected': False, 'friends_count': 818, 'following': False, 'suspended': False, 'is_translator': False, 'profile_background_color': 'C0DEED', 'translator_type': 'none', 'geo_enabled': True, 'verified': False, 'has_extended_profile': False, 'lang': 'ja' }, ##### ここまでuser/_json ##### default_profile_image=False, profile_use_background_image=True, ##### ここからuser/stastus ##### status=Status( favorite_count=1, possibly_sensitive=False, coordinates=None, source='Hatena', text='去年、国立がん研究センターとJTの論争が話題になった頃にあわせて紹介した砂糖の話が、ウェルク事件に絡めて取り上げられていたw / “60年後にばれた米「砂糖業界」の大陰謀(上)「低脂肪ダイエット」のウソ--大西睦子\xa0|\xa0新潮社フ…” https://t.co/BQkMW7m6de', contributors=None, created_at=datetime.datetime(2017, 1, 23, 5, 15, 50), in_reply_to_user_id_str=None, source_url='http://www.hatena.ne.jp/guide/twitter', truncated=False, _api=<tweepy.api.API object at 0x117919198>, retweeted=False, in_reply_to_screen_name=None, is_quote_status=False, in_reply_to_user_id=None, id_str='823398817370247168', retweet_count=0, in_reply_to_status_id_str=None, id=823398817370247168, in_reply_to_status_id=None, entities={ 'urls': [{ 'display_url': 'htn.to/3i7io9', 'expanded_url': 'http://htn.to/3i7io9', 'url': 'https://t.co/BQkMW7m6de', 'indices': [117, 140] }], 'user_mentions': [], 'symbols': [], 'hashtags': [] }, favorited=False, ##### ここからuser/status/_json ##### _json={ 'favorite_count': 1, 'possibly_sensitive': False, 'coordinates': None, 'source': '<a href="http://www.hatena.ne.jp/guide/twitter" rel="nofollow">Hatena</a>', 'text': '去年、国立がん研究センターとJTの論争が話題になった頃にあわせて紹介した砂糖の話が、ウェルク事件に絡めて取り上げられていたw / “60年後にばれた米「砂糖業界」の大陰謀(上)「低脂肪ダイエット」のウソ--大西睦子\xa0|\xa0新潮社フ…” https://t.co/BQkMW7m6de', 'contributors': None, 'created_at': 'Mon Jan 23 05:15:50 +0000 2017', 'truncated': False, 'retweeted': False, 'in_reply_to_screen_name': None, 'is_quote_status': False, 'in_reply_to_user_id': None, 'id_str': '823398817370247168', 'retweet_count': 0, 'in_reply_to_status_id_str': None, 'id': 823398817370247168, 'in_reply_to_status_id': None, 'entities': { 'urls': [{ 'display_url': 'htn.to/3i7io9', 'expanded_url': 'http://htn.to/3i7io9', 'url': 'https://t.co/BQkMW7m6de', 'indices': [117, 140] }], 'user_mentions': [], 'symbols': [], 'hashtags': [] }, 'favorited': False, 'in_reply_to_user_id_str': None, 'lang': 'ja', 'place': None, 'geo': None }, ##### ここまでuser/status/_json ##### lang='ja', place=None, geo=None ), ##### ここまでuser/stastus ##### entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, statuses_count=13014, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=257791390, profile_background_image_url_https='https://abs.twimg.com/images/themes/theme1/bg.png', profile_sidebar_fill_color='DDEEF6', utc_offset=32400, description='統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', profile_text_color='333333', suspended=False, followers_count=1873, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', favourites_count=1088, _api=<tweepy.api.API object at 0x117919198>, location='つくば市', needs_phone_verification=False, created_at=datetime.datetime(2011, 2, 26, 4, 59, 47), profile_image_url_https='https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', protected=False, friends_count=818, following=False, id_str='257791390', is_translator=False, profile_background_color='C0DEED', translator_type='none', geo_enabled=True, verified=False, has_extended_profile=False, lang='ja' )
Statusオブジェクト
idはツイートのID。ツイートを個別に指定して何かの処理をやる時に必ず使います。
textがツイートの本文。
created_atはツイートの日時が入っていて、Pythonのdatetime型のデータが得られます。
他のツイートへのリプライだった場合はin_reply_to_screen_nameとかに値が入ります。
retweet_countはRT数。favorite_countはふぁぼ数。
retweetedとfavorited(True or False)は自分がRT・ふぁぼしたかどうかです。
placeは位置情報(緯度経度じゃなくて、IPアドレスかなんかをベースに自動で振られるやつ)。上述したとおり、Userオブジェクトに入っているプロフのlocationとは別です。
sourceで、パソコンからなのかスマホアプリからなのか等が判別できます。
possibly_sensitiveは何のことかわからないのですが、何かのフィルタリングに使われるやつかな?
下の例では出てきませんが、スマホ等からのつぶやきで緯度経度情報がある場合は、coordinatesって項目の中に数値が入ります。
上述したように、authorとuserに似たような情報が入ってますが、userはすでに非推奨となっているので、authorの情報を使ったほうがいいようです。
その他詳しくはSyncerの解説で確認するのがいいかと。
Status( ##### ここからstatus/author ##### author=User( time_zone='Tokyo', profile_background_image_url='http://abs.twimg.com/images/themes/theme1/bg.png', listed_count=38, is_translation_enabled=True, profile_background_tile=False, name='bata', profile_sidebar_border_color='C0DEED', screen_name='statsbeginner', url='https://t.co/6HCF2FYowE', follow_request_sent=False, ##### ここからstatus/author/_json ##### _json={ 'time_zone': 'Tokyo', 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'following': False, 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'notifications': False, 'location': 'つくば市', 'profile_use_background_image': True, 'name': 'bata', 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'screen_name': 'statsbeginner', 'protected': False, 'profile_background_color': 'C0DEED', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'friends_count': 800, 'default_profile': True, 'default_profile_image': False, 'followers_count': 1873, 'translator_type': 'none', 'id_str': '257791390', 'statuses_count': 13014, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 257791390, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'geo_enabled': True, 'profile_sidebar_fill_color': 'DDEEF6', 'has_extended_profile': False, 'verified': False, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'lang': 'ja', 'utc_offset': 32400, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/author/_json ##### default_profile_image=False, profile_use_background_image=True, entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, statuses_count=13014, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=257791390, profile_background_image_url_https='https://abs.twimg.com/images/themes/theme1/bg.png', profile_sidebar_fill_color='DDEEF6', utc_offset=32400, description='統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', profile_text_color='333333', followers_count=1873, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', favourites_count=1088, _api=<tweepy.api.API object at 0x117919198>, location='つくば市', created_at=datetime.datetime(2011, 2, 26, 4, 59, 47), profile_image_url_https='https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', protected=False, friends_count=800, following=False, id_str='257791390', is_translator=False, profile_background_color='C0DEED', translator_type='none', geo_enabled=True, verified=False, has_extended_profile=False, lang='ja' ), ##### ここまでstatus/autor ##### possibly_sensitive=False, coordinates=None, source='Twitter for iPhone', favorite_count=0, text='ボーカル2人って知らなかった/クリスタルキング 大都会 https://t.co/fuCvYig0eu', ##### ここからstatus/user ##### user=User( time_zone='Tokyo', profile_background_image_url='http://abs.twimg.com/images/themes/theme1/bg.png', listed_count=38, is_translation_enabled=True, profile_background_tile=False, name='bata', profile_sidebar_border_color='C0DEED', screen_name='statsbeginner', url='https://t.co/6HCF2FYowE', follow_request_sent=False, ##### ここからstatus/user/_json ##### _json={ 'time_zone': 'Tokyo', 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'following': False, 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'notifications': False, 'location': 'つくば市', 'profile_use_background_image': True, 'name': 'bata', 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'screen_name': 'statsbeginner', 'protected': False, 'profile_background_color': 'C0DEED', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'friends_count': 800, 'default_profile': True, 'default_profile_image': False, 'followers_count': 1873, 'translator_type': 'none', 'id_str': '257791390', 'statuses_count': 13014, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 257791390, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'geo_enabled': True, 'profile_sidebar_fill_color': 'DDEEF6', 'has_extended_profile': False, 'verified': False, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'lang': 'ja', 'utc_offset': 32400, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/user/_json ##### default_profile_image=False, profile_use_background_image=True, entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, statuses_count=13014, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=257791390, profile_background_image_url_https='https://abs.twimg.com/images/themes/theme1/bg.png', profile_sidebar_fill_color='DDEEF6', utc_offset=32400, description='統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', profile_text_color='333333', followers_count=1873, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', favourites_count=1088, _api=<tweepy.api.API object at 0x117919198>, location='つくば市', created_at=datetime.datetime(2011, 2, 26, 4, 59, 47), profile_image_url_https='https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', protected=False, friends_count=800, following=False, id_str='257791390', is_translator=False, profile_background_color='C0DEED', translator_type='none', geo_enabled=True, verified=False, has_extended_profile=False, lang='ja' ), ##### ここまでstatus/user ##### contributors=None, created_at=datetime.datetime(2017, 1, 22, 6, 5, 33), in_reply_to_user_id_str=None, source_url='http://twitter.com/download/iphone', id=823048940182376452, _api=<tweepy.api.API object at 0x117919198>, retweeted=False, in_reply_to_screen_name=None, is_quote_status=False, in_reply_to_user_id=None, entities={ 'urls': [{ 'display_url': 'youtube.com/watch?v=ADgZso…', 'expanded_url': 'https://www.youtube.com/watch?v=ADgZsoSzDp0&feature=share', 'url': 'https://t.co/fuCvYig0eu', 'indices': [28, 51] }], 'user_mentions': [], 'symbols': [], 'hashtags': [] }, retweet_count=0, possibly_sensitive_appealable=False, in_reply_to_status_id_str=None, truncated=False, in_reply_to_status_id=None, id_str='823048940182376452', favorited=False, ##### ここから_json ##### _json={ 'favorite_count': 0, 'possibly_sensitive': False, 'coordinates': None, 'source': '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', 'text': 'ボーカル2人って知らなかった/クリスタルキング 大都会 https://t.co/fuCvYig0eu', ##### ここから_json/user ##### 'user': { 'time_zone': 'Tokyo', 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'following': False, 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'notifications': False, 'location': 'つくば市', 'profile_use_background_image': True, 'name': 'bata', 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'screen_name': 'statsbeginner', 'protected': False, 'profile_background_color': 'C0DEED', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'friends_count': 800, 'default_profile': True, 'default_profile_image': False, 'followers_count': 1873, 'translator_type': 'none', 'id_str': '257791390', 'statuses_count': 13014, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 257791390, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'geo_enabled': True, 'profile_sidebar_fill_color': 'DDEEF6', 'has_extended_profile': False, 'verified': False, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'lang': 'ja', 'utc_offset': 32400, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/_json/user ##### 'contributors': None, 'created_at': 'Sun Jan 22 06:05:33 +0000 2017', 'truncated': False, 'retweeted': False, 'in_reply_to_screen_name': None, 'is_quote_status': False, 'in_reply_to_user_id': None, 'id_str': '823048940182376452', 'retweet_count': 0, 'possibly_sensitive_appealable': False, 'in_reply_to_status_id_str': None, 'id': 823048940182376452, 'in_reply_to_status_id': None, 'entities': { 'urls': [{ 'display_url': 'youtube.com/watch?v=ADgZso…', 'expanded_url': 'https://www.youtube.com/watch?v=ADgZsoSzDp0&feature=share', 'url': 'https://t.co/fuCvYig0eu', 'indices': [28, 51] }], 'user_mentions': [], 'symbols': [], 'hashtags': [] }, 'favorited': False, 'in_reply_to_user_id_str': None, 'lang': 'ja', 'place': None, 'geo': None }, ##### ここまでstatus/_json ##### lang='ja', place=None, geo=None )
RetweetありのStatusオブジェクト
以下はRTありの場合です。1000項目以上あってヤヴァいですが、UserとStatusを知っていればだいたい分かります。
1階層目は、「RTである私のツイート」としての情報が入っていて、retweeted_statusの中に、RTされた元のツイートの情報が入っています。たとえば、Status直下の、私自身のツイート情報としてはsourceが'Twitter for Mac'になっていますが、retweeted_status中のsourceは'Twitter for iPhone'になっています。ピコ太郎さんがiPhoneのTwitterクライアントから投稿したツイートを、私がMacのTwitterクライアントからRTしたということです。
下の例ではたまたま、extended_entitiesが入っているので、詳しいことを知りたければSyncerの解説を。「エンティティはテキストに含まれているURLアドレスやハッシュタグにリンクを付けてリッチテキスト化するための情報です。拡張エンティティはテキストに画像や動画を加えるための情報」です。
この、entitiesやextended_entitiesは、階層が深くなる代表的な項目ですね。私は今のところ情報として使ったことがありません。
Status( ##### ここからstatus/author ##### author=User( time_zone='Tokyo', profile_background_image_url='http://abs.twimg.com/images/themes/theme1/bg.png', listed_count=38, is_translation_enabled=True, profile_background_tile=False, name='bata', profile_sidebar_border_color='C0DEED', screen_name='statsbeginner', url='https://t.co/6HCF2FYowE', follow_request_sent=False, ##### ここからstatus/author/_json ##### _json={ 'time_zone': 'Tokyo', 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'following': False, 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'notifications': False, 'location': 'つくば市', 'profile_use_background_image': True, 'name': 'bata', 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'screen_name': 'statsbeginner', 'protected': False, 'profile_background_color': 'C0DEED', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'friends_count': 775, 'default_profile': True, 'default_profile_image': False, 'followers_count': 1873, 'translator_type': 'none', 'id_str': '257791390', 'statuses_count': 13015, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 257791390, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'geo_enabled': True, 'profile_sidebar_fill_color': 'DDEEF6', 'has_extended_profile': False, 'verified': False, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'lang': 'ja', 'utc_offset': 32400, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/author/_json ##### default_profile_image=False, profile_use_background_image=True, entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, statuses_count=13015, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=257791390, profile_background_image_url_https='https://abs.twimg.com/images/themes/theme1 /bg.png', profile_sidebar_fill_color='DDEEF6', utc_offset=32400, description='統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', profile_text_color='333333', followers_count=1873, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', favourites_count=1088, _api=<tweepy.api.API object at 0x117919198>, location='つくば市', created_at=datetime.datetime(2011, 2, 26, 4, 59, 47), profile_image_url_https='https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', protected=False, friends_count=775, following=False, id_str='257791390', is_translator=False, profile_background_color='C0DEED', translator_type='none', geo_enabled=True, verified=False, has_extended_profile=False, lang='ja' ), ##### ここまでstatus/author ##### possibly_sensitive=False, ##### ここからstatus/extended_entities ##### extended_entities={ 'media': [ { 'type': 'photo', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'source_user_id': 747329673659482113, 'source_user_id_str': '747329673659482113', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'indices': [36, 59], 'id_str': '823362891273281537', 'source_status_id_str': '823362903805804546', 'source_status_id': 823362903805804546, 'expanded_url': 'https://twitter.com/pikotaro_ppap/status /823362903805804546/photo/1', 'id': 823362891273281537, 'url': 'https://t.co/uP5PYzWhHL' } ] }, ##### ここまでstatus/extenced_entities ##### coordinates=None, source='Twitter for Mac', favorite_count=0, text='RT @pikotaro_ppap: PONで華原朋美様とお写真ピコ! https://t.co/uP5PYzWhHL', ##### ここからstatus/user ##### user=User(time_zone='Tokyo', profile_background_image_url='http://abs.twimg.com/images/themes/theme1/bg.png', listed_count=38, is_translation_enabled=True, profile_background_tile=False, name='bata', profile_sidebar_border_color='C0DEED', screen_name='statsbeginner', url='https://t.co/6HCF2FYowE', follow_request_sent=False, ##### ここからstatus/user/_json ##### _json={ 'time_zone': 'Tokyo', 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'following': False, 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1 /bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'notifications': False, 'location': 'つくば市', 'profile_use_background_image': True, 'name': 'bata', 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'screen_name': 'statsbeginner', 'protected': False, 'profile_background_color': 'C0DEED', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'friends_count': 775, 'default_profile': True, 'default_profile_image': False, 'followers_count': 1873, 'translator_type': 'none', 'id_str': '257791390', 'statuses_count': 13015, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 257791390, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'geo_enabled': True, 'profile_sidebar_fill_color': 'DDEEF6', 'has_extended_profile': False, 'verified': False, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes /theme1/bg.png', 'lang': 'ja', 'utc_offset': 32400, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/user/_json ##### default_profile_image=False, profile_use_background_image=True, entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, statuses_count=13015, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=257791390, profile_background_image_url_https='https://abs.twimg.com/images/themes/theme1/bg.png', profile_sidebar_fill_color='DDEEF6', utc_offset=32400, description='統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', profile_text_color='333333', followers_count=1873, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', favourites_count=1088, _api=<tweepy.api.API object at 0x117919198>, location='つくば市', created_at=datetime.datetime(2011, 2, 26, 4, 59, 47), profile_image_url_https='https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', protected=False, friends_count=775, following=False, id_str='257791390', is_translator=False, profile_background_color='C0DEED', translator_type='none', geo_enabled=True, verified=False, has_extended_profile=False, lang='ja' ), ##### ここまでstatus/user ##### contributors=None, created_at=datetime.datetime(2017, 1, 23, 18, 12, 9), in_reply_to_user_id_str=None, source_url='http://itunes.apple.com/us/app/twitter/id409789998?mt=12', id=823594183499780096, _api=<tweepy.api.API object at 0x117919198>, retweeted=True, in_reply_to_screen_name=None, is_quote_status=False, in_reply_to_user_id=None, ##### ここからstatus/entities ##### entities={ 'urls': [], 'user_mentions': [{ 'id_str': '747329673659482113', 'id': 747329673659482113, 'name': 'ピコ太郎(PIKOTARO)(公式)', 'indices': [3, 17], 'screen_name': 'pikotaro_ppap' }], 'symbols': [], 'hashtags': [], 'media': [{ 'type': 'photo', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'source_user_id': 747329673659482113, 'source_user_id_str': '747329673659482113', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'indices': [36, 59], 'id_str': '823362891273281537', 'source_status_id_str': '823362903805804546', 'source_status_id': 823362903805804546, 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'id': 823362891273281537, 'url': 'https://t.co/uP5PYzWhHL' }] }, ##### ここまでstatus/entities ##### ##### ここからstatus/retweeted_status ##### retweeted_status=Status( ##### ここからstatus/retweeted_status/author ##### author=User( time_zone=None, profile_background_image_url=None, listed_count=385, is_translation_enabled=False, profile_background_tile=False, name='ピコ太郎(PIKOTARO)(公式)', profile_sidebar_border_color='C0DEED', screen_name='pikotaro_ppap', url='https://t.co/02EEvEpRWi', follow_request_sent=False, ##### ここからstatus/retweeted_status/author/_json ##### _json={ 'time_zone': None, 'description': '(OFFICIAL)シンガーソングライタ ー「ピコ太郎」と、申しやすっ。目指せ紅白歌合戦とサマソニ。リスペクトシンガー→恩人ジャスティンビーバー、クラフトワーク、M.I.A、杏里、石川さゆり、アリアナグランデ For international inquiries:ppap-world@av.avex.co.jp', 'following': False, 'profile_background_image_url': None, 'listed_count': 385, 'is_translation_enabled': False, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'favourites_count': 3, 'has_extended_profile': True, 'notifications': False, 'location': '', 'profile_use_background_image': True, 'name': 'ピコ太郎(PIKOTARO)(公式)', 'created_at': 'Mon Jun 27 07:24:13 +0000 2016', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'screen_name': 'pikotaro_ppap', 'protected': False, 'profile_background_color': 'F5F8FA', 'url': 'https://t.co/02EEvEpRWi', 'follow_request_sent': False, 'friends_count': 97, 'default_profile': True, 'default_profile_image': False, 'followers_count': 88696, 'translator_type': 'none', 'id_str': '747329673659482113', 'statuses_count': 1210, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 747329673659482113, 'entities': { 'description': { 'urls': [] }, 'url': { 'urls': [{ 'display_url': 'm.youtube.com/channel/UCKpIO…', 'expanded_url': 'https://m.youtube.com/channel/UCKpIOnsk-gcwHXIzuk24ExA', 'url': 'https://t.co/02EEvEpRWi', 'indices': [0, 23] }] } }, 'geo_enabled': False, 'profile_sidebar_fill_color': 'DDEEF6', 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/747329673659482113/1484911282', 'verified': False, 'profile_background_image_url_https': None, 'lang': 'en', 'utc_offset': None, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/retweeted_status/author/_json ##### default_profile_image=False, profile_use_background_image=True, entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'm.youtube.com/channel/UCKpIO…', 'expanded_url': 'https://m.youtube.com/channel/UCKpIOnsk-gcwHXIzuk24ExA', 'url': 'https://t.co/02EEvEpRWi', 'indices': [0, 23] }] } }, statuses_count=1210, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=747329673659482113, profile_background_image_url_https=None, profile_sidebar_fill_color='DDEEF6', utc_offset=None, description='(OFFICIAL)シンガーソングライタ ー「ピコ太郎」と、申しやすっ。目指せ紅白歌合戦とサマソニ。リスペクトシンガー→恩人ジャスティンビーバー、クラフトワーク、M.I.A、杏里、石川さゆり、アリアナグランデ For international inquiries:ppap-world@av.avex.co.jp', profile_text_color='333333', followers_count=88696, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', favourites_count=3, _api=<tweepy.api.API object at 0x117919198>, location='', created_at=datetime.datetime(2016, 6, 27, 7, 24, 13), profile_image_url_https='https://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', protected=False, friends_count=97, following=False, profile_banner_url='https://pbs.twimg.com/profile_banners/747329673659482113/1484911282', id_str='747329673659482113', is_translator=False, profile_background_color='F5F8FA', translator_type='none', geo_enabled=False, verified=False, has_extended_profile=True, lang='en' ), ##### ここまでstatus/retweeted_status/author ##### possibly_sensitive=False, ##### ここからstatus/retweeted_status/extended_entities ##### extended_entities={ 'media': [{ 'type': 'photo', 'id_str': '823362891273281537', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'url': 'https://t.co/uP5PYzWhHL', 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'indices': [17, 40], 'id': 823362891273281537 }] }, ##### ここまでstatus/retweeted_status/extended_entities ##### coordinates=None, source='Twitter for iPhone', favorite_count=855, text='PONで華原朋美様とお写真ピコ! https://t.co/uP5PYzWhHL', ##### ここからstatus/retweeted_status/user ##### user=User( time_zone=None, profile_background_image_url=None, listed_count=385, is_translation_enabled=False, profile_background_tile=False, name='ピコ太郎(PIKOTARO)(公式)', profile_sidebar_border_color='C0DEED', screen_name='pikotaro_ppap', url='https://t.co/02EEvEpRWi', follow_request_sent=False, ##### ここからstatus/retweeted_status/user/_json ##### _json={ 'time_zone': None, 'description': '(OFFICIAL)シンガーソングライタ ー「ピコ太郎」と、申しやすっ。目指せ紅白歌合戦とサマソニ。リスペクトシンガー→恩人ジャスティンビーバー、クラフトワーク、M.I.A、杏里、石川さゆり、アリアナグランデ For international inquiries:ppap-world@av.avex.co.jp', 'following': False, 'profile_background_image_url': None, 'listed_count': 385, 'is_translation_enabled': False, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'favourites_count': 3, 'has_extended_profile': True, 'notifications': False, 'location': '', 'profile_use_background_image': True, 'name': 'ピコ太郎(PIKOTARO)(公式)', 'created_at': 'Mon Jun 27 07:24:13 +0000 2016', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'screen_name': 'pikotaro_ppap', 'protected': False, 'profile_background_color': 'F5F8FA', 'url': 'https://t.co/02EEvEpRWi', 'follow_request_sent': False, 'friends_count': 97, 'default_profile': True, 'default_profile_image': False, 'followers_count': 88696, 'translator_type': 'none', 'id_str': '747329673659482113', 'statuses_count': 1210, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 747329673659482113, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'm.youtube.com/channel/UCKpIO…', 'expanded_url': 'https://m.youtube.com/channel/UCKpIOnsk-gcwHXIzuk24ExA', 'url': 'https://t.co/02EEvEpRWi', 'indices': [0, 23] }] } }, 'geo_enabled': False, 'profile_sidebar_fill_color': 'DDEEF6', 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/747329673659482113/1484911282', 'verified': False, 'profile_background_image_url_https': None, 'lang': 'en', 'utc_offset': None, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/retweeted_status/user/_json ##### default_profile_image=False, profile_use_background_image=True, entities={ 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'm.youtube.com/channel/UCKpIO…', 'expanded_url': 'https://m.youtube.com/channel/UCKpIOnsk-gcwHXIzuk24ExA', 'url': 'https://t.co/02EEvEpRWi', 'indices': [0, 23] }] } }, statuses_count=1210, contributors_enabled=False, profile_link_color='1DA1F2', notifications=False, id=747329673659482113, profile_background_image_url_https=None, profile_sidebar_fill_color='DDEEF6', utc_offset=None, description='(OFFICIAL)シンガーソングライタ ー「ピコ太郎」と、申しやすっ。目指せ紅白歌合戦とサマソニ。リスペクトシンガー→恩人ジャスティンビーバー、クラフトワーク、M.I.A、杏里、石川さゆり、アリアナグランデ For international inquiries:ppap-world@av.avex.co.jp', profile_text_color='333333', followers_count=88696, default_profile=True, profile_image_url='http://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', favourites_count=3, _api=<tweepy.api.API object at 0x117919198>, location='', created_at=datetime.datetime(2016, 6, 27, 7, 24, 13), profile_image_url_https='https://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', protected=False, friends_count=97, following=False, profile_banner_url='https://pbs.twimg.com/profile_banners/747329673659482113/1484911282', id_str='747329673659482113', is_translator=False, profile_background_color='F5F8FA', translator_type='none', geo_enabled=False, verified=False, has_extended_profile=True, lang='en' ), ##### ここまでstatus/retweeted_status/user ##### contributors=None, created_at=datetime.datetime(2017, 1, 23, 2, 53, 8), in_reply_to_user_id_str=None, source_url='http://twitter.com/download/iphone', id=823362903805804546, _api=<tweepy.api.API object at 0x117919198>, retweeted=True, in_reply_to_screen_name=None, is_quote_status=False, in_reply_to_user_id=None, ##### ここからstatus/retweeted_status/entities ##### entities={ 'urls': [], 'user_mentions': [], 'symbols': [], 'hashtags': [], 'media': [{ 'type': 'photo', 'id_str': '823362891273281537', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'url': 'https://t.co/uP5PYzWhHL', 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'indices': [17, 40], 'id': 823362891273281537 }] }, ##### ここまでstatus/retweeted_status/entities ##### retweet_count=133, possibly_sensitive_appealable=False, in_reply_to_status_id_str=None, truncated=False, in_reply_to_status_id=None, id_str='823362903805804546', favorited=False, ##### ここからstatus/retweeted_status/_json ##### _json={ 'favorite_count': 855, 'possibly_sensitive': False, ##### ここからstatus/retweeted_status/_json/extended_entities ##### 'extended_entities': { 'media': [{ 'type': 'photo', 'id_str': '823362891273281537', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'url': 'https://t.co/uP5PYzWhHL', 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'indices': [17, 40], 'id': 823362891273281537 }] }, ##### ここまでstatus/retweeted_status/_json/extended_entities ##### 'coordinates': None, 'source': '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', 'text': 'PONで華原朋美様とお写真ピコ! https://t.co/uP5PYzWhHL', ##### ここからstatus/retweeted_status/_json/user ##### 'user': { 'time_zone': None, 'description': '(OFFICIAL)シンガーソングライタ ー「ピコ太郎」と、申しやすっ。目指せ紅白歌合戦とサマソニ。リスペクトシンガー→恩人ジャスティンビーバー、クラフトワーク、M.I.A、杏里、石川さゆり、アリアナグランデ For international inquiries:ppap-world@av.avex.co.jp', 'following': False, 'profile_background_image_url': None, 'listed_count': 385, 'is_translation_enabled': False, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'favourites_count': 3, 'has_extended_profile': True, 'notifications': False, 'location': '', 'profile_use_background_image': True, 'name': 'ピコ太郎(PIKOTARO)(公式)', 'created_at': 'Mon Jun 27 07:24:13 +0000 2016', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'screen_name': 'pikotaro_ppap', 'protected': False, 'profile_background_color': 'F5F8FA', 'url': 'https://t.co/02EEvEpRWi', 'follow_request_sent': False, 'friends_count': 97, 'default_profile': True, 'default_profile_image': False, 'followers_count': 88696, 'translator_type': 'none', 'id_str': '747329673659482113', 'statuses_count': 1210, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 747329673659482113, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'm.youtube.com/channel/UCKpIO…', 'expanded_url': 'https://m.youtube.com/channel/UCKpIOnsk-gcwHXIzuk24ExA', 'url': 'https://t.co/02EEvEpRWi', 'indices': [0, 23] }] } }, 'geo_enabled': False, 'profile_sidebar_fill_color': 'DDEEF6', 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/747329673659482113/1484911282', 'verified': False, 'profile_background_image_url_https': None, 'lang': 'en', 'utc_offset': None, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/retweeted_status/_json/user ##### 'contributors': None, 'created_at': 'Mon Jan 23 02:53:08 +0000 2017', 'truncated': False, 'retweeted': True, 'in_reply_to_screen_name': None, 'is_quote_status': False, 'in_reply_to_user_id': None, 'id_str': '823362903805804546', 'retweet_count': 133, 'possibly_sensitive_appealable': False, 'in_reply_to_status_id_str': None, 'id': 823362903805804546, 'in_reply_to_status_id': None, ##### ここからstatus/retweeted_status/_json/entities ##### 'entities': { 'urls': [], 'user_mentions': [], 'symbols': [], 'hashtags': [], 'media': [{ 'type': 'photo', 'id_str': '823362891273281537', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'url': 'https://t.co/uP5PYzWhHL', 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'indices': [17, 40], 'id': 823362891273281537 }] }, ##### ここまでstatus/retweeted_status/_json/entities ##### 'favorited': False, 'in_reply_to_user_id_str': None, 'lang': 'ja', 'place': None, 'geo': None }, ##### ここまでstatus/retweeted_status/_json ##### lang='ja', place=None, geo=None ), ##### ここまでstatus/retweeted_status ##### retweet_count=133, possibly_sensitive_appealable=False, in_reply_to_status_id_str=None, truncated=False, in_reply_to_status_id=None, id_str='823594183499780096', favorited=False, ##### ここからstatus/_json ##### _json={ 'favorite_count': 0, 'possibly_sensitive': False, ##### ここからstatus/_json/extended_entities ##### 'extended_entities': { 'media': [{ 'type': 'photo', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'source_user_id': 747329673659482113, 'source_user_id_str': '747329673659482113', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'indices': [36, 59], 'id_str': '823362891273281537', 'source_status_id_str': '823362903805804546', 'source_status_id': 823362903805804546, 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'id': 823362891273281537, 'url': 'https://t.co/uP5PYzWhHL' }] }, ##### ここまでstatus/_json/extended_entities ##### 'coordinates': None, 'source': '<a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a>', 'text': 'RT @pikotaro_ppap: PONで華原朋美様とお写真ピコ! https://t.co/uP5PYzWhHL', ##### ここからstatus/_json/user ##### 'user': { 'time_zone': 'Tokyo', 'description': '統計学とプログラミングの勉強ブログを書いています(私は初心者なので専門的なものではない)。剣道初心者で、とりあえず1級審査に向けて稽古中。TX通勤。博士(工学)。', 'following': False, 'profile_background_image_url': 'http://abs.twimg.com/images/themes/theme1/bg.png', 'listed_count': 38, 'is_translation_enabled': True, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'favourites_count': 1088, 'notifications': False, 'location': 'つくば市', 'profile_use_background_image': True, 'name': 'bata', 'created_at': 'Sat Feb 26 04:59:47 +0000 2011', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/517659681313923073/_m3UMIAR_normal.jpeg', 'screen_name': 'statsbeginner', 'protected': False, 'profile_background_color': 'C0DEED', 'url': 'https://t.co/6HCF2FYowE', 'follow_request_sent': False, 'friends_count': 775, 'default_profile': True, 'default_profile_image': False, 'followers_count': 1873, 'translator_type': 'none', 'id_str': '257791390', 'statuses_count': 13015, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 257791390, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'statsbeginner.hatenablog.com', 'expanded_url': 'http://statsbeginner.hatenablog.com/', 'url': 'https://t.co/6HCF2FYowE', 'indices': [0, 23] }] } }, 'geo_enabled': True, 'profile_sidebar_fill_color': 'DDEEF6', 'has_extended_profile': False, 'verified': False, 'profile_background_image_url_https': 'https://abs.twimg.com/images/themes/theme1/bg.png', 'lang': 'ja', 'utc_offset': 32400, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/_json/user ##### 'contributors': None, 'created_at': 'Mon Jan 23 18:12:09 +0000 2017', 'truncated': False, 'retweeted': True, 'in_reply_to_screen_name': None, 'is_quote_status': False, 'in_reply_to_user_id': None, 'id_str': '823594183499780096', ##### ここからstatus/_json/retweeted_status ##### 'retweeted_status': { 'favorite_count': 855, 'possibly_sensitive': False, ##### ここからstatus/_json/retweeted_status/extended_entities ##### 'extended_entities': { 'media': [{ 'type': 'photo', 'id_str': '823362891273281537', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'url': 'https://t.co/uP5PYzWhHL', 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'indices': [17, 40], 'id': 823362891273281537 }] }, ##### ここまでstatus/_json/retweeted_status/extended_entities ##### 'coordinates': None, 'source': '<a href="http://twitter.com/download/iphone" rel="nofollow">Twitter for iPhone</a>', 'text': 'PONで華原朋美様とお写真ピコ! https://t.co/uP5PYzWhHL', ##### ここからstatus/_json/retweeted_status/user ##### 'user': { 'time_zone': None, 'description': '(OFFICIAL)シンガーソングライタ ー「ピコ太郎」と、申しやすっ。目指せ紅白歌合戦とサマソニ。リスペクトシンガー→恩人ジャスティンビーバー、クラフトワーク、M.I.A、杏里、石川さゆり、アリアナグランデ For international inquiries:ppap-world@av.avex.co.jp', 'following': False, 'profile_background_image_url': None, 'listed_count': 385, 'is_translation_enabled': False, 'profile_background_tile': False, 'profile_text_color': '333333', 'profile_image_url': 'http://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'favourites_count': 3, 'has_extended_profile': True, 'notifications': False, 'location': '', 'profile_use_background_image': True, 'name': 'ピコ太郎(PIKOTARO)(公式)', 'created_at': 'Mon Jun 27 07:24:13 +0000 2016', 'profile_image_url_https': 'https://pbs.twimg.com/profile_images/822403634931433472/udAnDIVV_normal.jpg', 'screen_name': 'pikotaro_ppap', 'protected': False, 'profile_background_color': 'F5F8FA', 'url': 'https://t.co/02EEvEpRWi', 'follow_request_sent': False, 'friends_count': 97, 'default_profile': True, 'default_profile_image': False, 'followers_count': 88696, 'translator_type': 'none', 'id_str': '747329673659482113', 'statuses_count': 1210, 'contributors_enabled': False, 'profile_link_color': '1DA1F2', 'is_translator': False, 'id': 747329673659482113, 'entities': { 'description': {'urls': []}, 'url': { 'urls': [{ 'display_url': 'm.youtube.com/channel/UCKpIO…', 'expanded_url': 'https://m.youtube.com/channel/UCKpIOnsk-gcwHXIzuk24ExA', 'url': 'https://t.co/02EEvEpRWi', 'indices': [0, 23] }] } }, 'geo_enabled': False, 'profile_sidebar_fill_color': 'DDEEF6', 'profile_banner_url': 'https://pbs.twimg.com/profile_banners/747329673659482113/1484911282', 'verified': False, 'profile_background_image_url_https': None, 'lang': 'en', 'utc_offset': None, 'profile_sidebar_border_color': 'C0DEED' }, ##### ここまでstatus/_json/retweeted_status/user ##### 'contributors': None, 'created_at': 'Mon Jan 23 02:53:08 +0000 2017', 'truncated': False, 'retweeted': True, 'in_reply_to_screen_name': None, 'is_quote_status': False, 'in_reply_to_user_id': None, 'id_str': '823362903805804546', 'retweet_count': 133, 'possibly_sensitive_appealable': False, 'in_reply_to_status_id_str': None, 'id': 823362903805804546, 'in_reply_to_status_id': None, ##### ここからstatus/_json/retweeted_status/entities ##### 'entities': { 'urls': [], 'user_mentions': [], 'symbols': [], 'hashtags': [], 'media': [{ 'type': 'photo', 'id_str': '823362891273281537', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'url': 'https://t.co/uP5PYzWhHL', 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'indices': [17, 40], 'id': 823362891273281537 }] }, ##### ここまでstatus/_json/retweeted_status/entities ##### 'favorited': False, 'in_reply_to_user_id_str': None, 'lang': 'ja', 'place': None, 'geo': None }, ##### ここまでstatus/_json/retweeted_status ##### 'retweet_count': 133, 'possibly_sensitive_appealable': False, 'in_reply_to_status_id_str': None, 'id': 823594183499780096, 'in_reply_to_status_id': None, ##### ここからstatus/_json/entities ##### 'entities': { 'urls': [], 'user_mentions': [{ 'id_str': '747329673659482113', 'id': 747329673659482113, 'name': 'ピコ太郎(PIKOTARO)(公式)', 'indices': [3, 17], 'screen_name': 'pikotaro_ppap' }], 'symbols': [], 'hashtags': [], 'media': [{ 'type': 'photo', 'media_url': 'http://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'source_user_id': 747329673659482113, 'source_user_id_str': '747329673659482113', 'display_url': 'pic.twitter.com/uP5PYzWhHL', 'media_url_https': 'https://pbs.twimg.com/media/C20sL--VIAEra5v.jpg', 'sizes': { 'large': { 'resize': 'fit', 'h': 1536, 'w': 2048 }, 'small': { 'resize': 'fit', 'h': 510, 'w': 680 }, 'medium': { 'resize': 'fit', 'h': 900, 'w': 1200 }, 'thumb': { 'resize': 'crop', 'h': 150, 'w': 150 } }, 'indices': [36, 59], 'id_str': '823362891273281537', 'source_status_id_str': '823362903805804546', 'source_status_id': 823362903805804546, 'expanded_url': 'https://twitter.com/pikotaro_ppap/status/823362903805804546/photo/1', 'id': 823362891273281537, 'url': 'https://t.co/uP5PYzWhHL' }] }, ##### ここまでstatus/_json/entities ##### 'favorited': False, 'in_reply_to_user_id_str': None, 'lang': 'ja', 'place': None, 'geo': None }, ##### ここまでstatus/_json ##### lang='ja', place=None, geo=None )
Friendshipオブジェクト
先に来てるほうがSourceから見た関係、後で来るほうがTargetからみた関係です。_jsonが含まれないです。
そのまんまですが、followingはフォローしてる。followed_byはフォローされてる。
following_receivedとfollowing_requestedは恐らく、前者がフォローリクエストを送って承認されたらTrue、後者はフォローリクエストされて承認した場合にTrueになるやつだと思います。
marked_spamはスパム報告したアカウントはTrue、blockingはブロックしているアカウントがTrue、blocked_byは逆にブロックされていた場合にTrueですね。botの処理を書いていると、相手からブロックされている場合や相手が鍵垢の場合に単純に実行するとエラーになってしまうような処理も出てくるので、そういう場合に、ブロックされていないかどうかをチェックして処理を分岐させるのに使ったりできます。
( Friendship( followed_by=False, blocking=False, following_received=False, id=257791390, live_following=False, muting=False, notifications_enabled=False, can_dm=False, following=False, following_requested=False, _api=<tweepy.api.API object at 0x11240bef0>, want_retweets=False, id_str='257791390', screen_name='statsbeginner', marked_spam=False, blocked_by=True, all_replies=False ), Friendship( followed_by=False, following_received=False, id=150598902, following=False, following_requested=False, _api=<tweepy.api.API object at 0x11240bef0>, id_str='150598902', screen_name='InsideCHIKIRIN' ) )
Saved Searchオブジェクト
検索のクエリを保存しといてショートカット的に使うやつですね。
queryのところが、検索キーワードです。positionってなんだろ?ぐぐったけど分かりません。nameがqueryと異なる場合があるのかは不明。
[ SavedSearch( _api=<tweepy.api.API object at 0x11240bef0>, query='Python', id=829013630154788864, id_str='829013630154788864', created_at=datetime.datetime(2017, 2, 7, 17, 7, 6), name='Python', position=None ), SavedSearch( _api=<tweepy.api.API object at 0x11240bef0>, query='機械学習', id=829013886934212608, id_str='829013886934212608', created_at=datetime.datetime(2017, 2, 7, 17, 8, 7), name='機械学習', position=None ) ]