python-twitterを用いたTwitterデータ収集

18,286 views
22,781 views

Published on

0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
18,286
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
81
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

python-twitterを用いたTwitterデータ収集

  1. 1. Twitterでのデータ収集 2012/9/21 @pika_shi
  2. 2. python-twitterl  python-twitter : TwitterAPIのpythonラッパー http://static.unto.net/python-twitter/0.6/doc/twitter.html (英語ドキュメント)
  3. 3. 環境構築l  以下のライブラリをダウンロード・インストール l  simplejson simplejson 2.6.1 : Python Package Index l  httplib2 httplib2 - A comprehensive HTTP client library in Python - Google Project Hosting l  oauth2 http://github.com/simplegeo/python-oauth2l  python-twitterのダウンロード・インストール l  python-twitter python-twitter - A python wrapper around the Twitter API - Google Project Hosting
  4. 4. OAuth認証l  全タイムラインの取得などは,認証なしで⾏行行えるl  ⾃自分のタイムラインの取得やツイートの投稿などは, 認証を⾏行行わなければ使えない l  Twitter Developersに登録し,Consumer keyとAccess Token をもらいましょう
  5. 5. インポート・認証l  以下でOK >>> import twitter >>> api = twitter.Api()l  認証が必要なら,以下のようにする >>> api = twitter.Api(consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET, access_token_key=ACCESS_TOKEN, access_token_secret=ACCESS_TOKEN_SECRET, cache=None)
  6. 6. ユーザ情報を取得(1/2)GetUser(user) >>> user = api.GetUser(pika_shi) >>> user.id # ユーザid 141077154 >>> print user.screen_name # ユーザ名 pika_shi >>> print user.name # 名前 ぴかし >>> print user.location # 位置情報 京都 >>> print user.description # ⾃自⼰己紹介 京都⼤大学/⼯工学部/情報学科/B4/KUIS4/社会情報学専攻/京炎そでふれ!/彩京前 >>> user.protected # ツイートを⾮非公開にしてるか False >>> user.utc_offset # 協定世界時とローカルタイムとの時差(秒) 32400 >>> print user.time_zone # タイムゾーン Osaka
  7. 7. ユーザ情報を取得(2/2)GetUser(user) >>> print user.url # URL http://d.hatena.ne.jp/pika_shi/ >>> user.status # 最新ツイート <twitter.Status object at 0x101052090> >>> user.statuses_count # ツイート数 3547 >>> user.followers_count # フォロワー数 376 >>> user.friends_count # フォロイー数 297 >>> user.favourites_count # お気に⼊入り数 212
  8. 8. ユーザのツイート⼀一覧を取得GetUserTimeline(user) >>> timeline = api.GetUserTimeline(pika_shi) >>> for tweet in timeline: ... print tweet.text ... @petitviolet 了解^^ @petitviolet いつくらいに確定しそうか聞いてみるわ! 増えること⾃自体はお店 ...
  9. 9. ユーザのタイムラインを取得GetFriendsTimeline(user) ※要認証 >>> timeline = api.GetFriendsTimeline(pika_shi’) >>> for tweet in timeline: ... print tweet.text ... 「成果をあげるのは才能ではなく、習慣だ。」 実験のレポートは⼀一旦寝てから始めよう※再徹夜ふらぐ乱⽴立立中 ・・・ いやー、晴天って良いなぁ マスオデックス
  10. 10. ツイート情報を取得(1/2)>>> tweet = timeline[0]>>> print tweet.created_at # ツイートされた時間(協定世界時)Sun Dec 11 05:07:32 +0000 2011>>> tweet.created_at_in_seconds # ツイートされた時間(UNIX秒)1323580052>>> tweet.favorited # お気に⼊入りに⼊入れているか(要認証)False>>> print tweet.in_reply_to_screen_name # 返信先のユーザ名petitviolet>>> print tweet.in_reply_to_user_id # 返信先のユーザid116969050>>> tweet.in_reply_to_status_id # 返信先のツイートid145731319173877760>>> tweet.truncated # 140字を超えているかFalse>>> print tweet.source # ツイートされたクライアント<a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a
  11. 11. ツイート情報を取得(2/2)>>> tweet.id # ツイートid 145731418545336320>>> print tweet.text # ツイートの内容(テキスト)@petitviolet 了解^^>>> print tweet.location # ツイートの位置情報 None>>> print tweet.relative_created_at # ツイートされた時間about an hour ago>>> tweet.user # ツイートしたユーザの情報<twitter.User object at 0x101052b50>
  12. 12. 全体タイムラインを取得GetPublicTimeline() >>> timeline = api.GetPublicTimeline() >>> for tweet in timeline: ... print tweet.text ... *yawns* Just gave up in Monopoly cause he is so brutal. Gave all my money ・・・ LMFAOOOOO ! I have tons of followers and got them by using this easy program!⽇日本語少ない
  13. 13. ユーザのフォロイーを取得GetFriends() >>> friends = api.GetFriends() >>> for friend in friends: ... print friend.screen_name ... teracy happy_nina ・・・ toumeinomochi sakikuri1023最⼤大100件までを取得python-twitterで100⼈人以上のフォロイーを取得 - Hello World !
  14. 14. ユーザのフォロワーを取得GetFollowers() ※なぜか要認証>>> followers = api.GetFollowers()>>> for follower in followers:... print follower.screen_name...FurusatoOuenhappy_nina・・・Foomin_110reigaaaaan
  15. 15. ツイートを投稿PostUpdate(tweet) ※要認証>>> postmsg = 疲れた>>> api.PostUpdate(postmsg.decode("utf-8"))
  16. 16. データ収集時に気を付けることl  タイムアウトの設定 タイムアウトを設定しておかないと,何らかの原因でデータが 取得できない時にプログラムが⽌止まる import socket socket.setdefaulttimeout(30) # 引数は秒数l  executemany (sqlite3) ⼤大量にデータを収集する際は,データごとにinsertするより, ⼀一気にinsertできるexecutemanyを使うとよい
  17. 17. データ収集時に気を付けることl  デタッチ プログラムをバックグラウンドで動かし続けるには,nohupよ りもスクリーンのデタッチ(C-j d)の⽅方がよい デタッチだと,「予想以上に実⾏行行に時間くってるけどもう帰ら ないといけない」的な時に途中でバックグラウンドジョブに変 更できるl  API制限 l  来年の3⽉月からかなり制限がキツくなるらしい
  18. 18. Thank you.

×