Twitter APIを使ってデータ収集する(Django+tweepy)


Pocket

アニメ「PSYCHO-PASS」のオリジナルサウンドトラック2を聞いてモチベーション上がったので、シビュラシステム作ることにした。
※知らない人はWikipedia

…といっても、“人間のあらゆる心理状態や性格傾向を測定し犯罪係数を計測する”方法が解らなかったのでw
こんなシステムを作ることにしました。

 
Twitterのつぶやきから、
・心理状態(=ネガティブな単語が含まれるか)
・性格傾向(=攻撃的、反社会的な単語が含まれるか)
を測定し、犯罪係数を計測するシステム。

 
これはシビュラシステム…と言えなくもない!?

 
まぁ、正直ただのパロディなんですが…
本題はタイトル通り、TwitterAPIを使ってデータ収集です。

 

WC? お前の色は何色だ

wc

これ→http://www.what-color.xyz
 
Twitter API(REST)を使って、定期的にTwitterをクロールして潜在犯wを探しています。
 

本題:Twitter APIでデータ収集

今回は下記構成でデータ収集する方法を記載します。

Tweepy : Twitter for Python!(v3.3.0)
Django(ver1.4)(python2.7)
・cron

実行環境はOpenshiftを使っています。

 

1.Twitter Appの作成

Twitter APIを使うためにTwitter Developersでアプリを作成します。

1.[Create New App]ボタンを押す
2.必要事項を記入しアプリ作成
3.Access Tokenを生成

これで、Twitter APIを使用するための、

・Consumer Key
・Consumer Secret
・Access Token
・Access Token Secret
が取得できます。

 

2.ツイートを取得する

TwitterAPIを使って、ツイートを取得します。
後で、cronを使って定期的に呼び出すためcommandとして実装しています。

app/management/commands/crawler.py

#-*- coding:utf-8 -*-
import tweepy
from django.core.management.base import BaseCommand

class Command(BaseCommand):
  def handle(self, *args, **options):
    auth = tweepy.OAuthHandler('customer key', 'customer secret')
    auth.set_access_token('access token', 'access token secret')
    api = tweepy.API(auth)
    
    #ユーザプロフィール取得
    try :
      profile = api.get_user(id='user name')

      print profile.name #表示名
      print profile.screen_name #アカウント名 @*
      print profile.profile_image_url #アイコン画像のURL
      print profile.statuses_count #ツイート数
      print profile.friends_count #フォロー数
      print profile.followers_count #フォロワー数
    except tweepy.error.TweepError, e:
      print e.message

    #タイムライン取得(最新10件)
    try :
      for tweet in tweepy.Cursor(api.user_timeline, id='user name').items(10):
        print tweet.id #id
        print tweet.text #本文
    except tweepy.error.TweepError, e:
      print e.message
      

基本的な使い方を抜き出したのが上記です。
上記例では、Twitterから取得したデータをprintするだけですが、実際にはデータベースへ保存したりします。
※実際に動かしてないので、動かなかったらすみません(汗

Tweepyの詳しい使い方やTwitterAPIで取得できるデータの詳細は、下記参照願います。
http://tweepy.readthedocs.org/en/v3.2.0/index.html
https://dev.twitter.com/rest/public

 

3.cronで定期処理

cronを使って定期的にツイートを取得します。
やり方は「Openshiftで定期処理」を参照願います。

 
以上で、簡単にTwitterからデータを取得して何かするWebアプリを作ることができます。

 
 

あとがき

「PSYCHO-PASS」面白いですよね。大好きなアニメです。
特にシビュラシステムがいいですよね。
脳を繋げて並列処理というのはどうかと思いますが、コンピュータが社会を統治するという設定は結構好きなんです。

2045年に技術的特異点が来て、人工知能が人類の知性を上回ると言われています。
(参考:2045年問題 『人工知能』が支配する未来。 シンギュラリティ(技術的特異点) 後の脅威”
だったら、より良い社会を人工知能に立案+運用してもらう方が、安心・安全・公平な社会になるんじゃないかなと思ったりします(まぁただの期待ですが…)。

さて、劇中では犯罪者になる危険性を示す「犯罪係数」によって、現在の司法と警察をひっくるめたようなエコシステムが運用されています。ちょっと前に映画のプロモーションで、新宿駅で犯罪係数を測定できる!みたいな事やってましたね。
参考:新宿に登場した「シビュラシステム」ゾーンで自分の犯罪係数を測定可能に、槙島や「攻殻機動隊」の草薙素子も登場 - GIGAZINE

実際、犯罪係数を測ろうとした場合、どのようなやり方があるでしょうか?
劇中にもチラッと出てきたように「パノプティコン」のような超監視社会と、映像認識技術を使えばできるのではないかと考えたりします。あらゆるところに監視カメラを置き、日常生活で使用する携帯端末やIoT端末の通信を常に監視する。データはできるだけマイナンバーと紐つけて収集しておく。集めた映像やデータを映像認識やパターン認識技術を使って、過去犯罪を犯した人の行動パターンとの相関を取りスコア付けを行う。
というのはどうでしょうか。
まぁ、それが良い社会かどうかはさっぱり検討付きませんが…

 
 

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>