Twitter botの作成②

サンプルプログラムの作成

Twitter APIには「REST API」、「Streaming API」、「Sample API」などがある

。REST APIは過去のツイートを検索できる機能もあって、よく使われていると思う。だが、検索にかかるのはほんの一部なので、検索結果を元に統計分析を行うのには適していない。

Streaming APIはリアルタイムですべてのツイートが流れてくる。だが、日本語での検索がうまくいかないようだ。

そこで今回はSample APIを使ってみる。

Sample APIはツイート全体の1%しか利用できない。だが、その1%が無作為に選ばれているのであれば(どのように選ばれているかは知らないが)、それなりに全体を代表していると言えるだろう。1%といってもデータは大量で、REST APIとは比較にならない。

○以下のプログラムを「test_bot.py」ファイルとして「~/py」フォルダーに保存する。

「# キー、アクセストークンを設定する。」のブロックは「Twitter botの作成①」でメモしたものに書き換える。

# coding: utf-8

import sys
import time
import twitter
from datetime import datetime

# キー、アクセストークンを設定する。
#consumer_key = "*************************"
#consumer_secret = "**************************************************"
#access_token_key = "**********-***************************************"
#access_token_secret = "*********************************************"

if __name__ == "__main__":
    api = twitter.Api(
        consumer_key=consumer_key, consumer_secret=consumer_secret,
        access_token_key=access_token_key,
        access_token_secret=access_token_secret)
    argvs = sys.argv
    query = argvs[1]
    count = 0
    i = 0
    while True:
        # 回線不通の場合を処理する。
        try:
            for line in api.GetStreamSample():
                # 空のデータが流れてきた場合を処理する。
                try:
                    now = datetime.now()
                    count = count + line["text"].count(query)
                    interval = now.minute % 1 == 0 and now.second == 0
                    if i == 0 and interval:
                        print(
                            now.strftime("%Y-%m-%d %H:%M:%S"), query, " = ",
                            count, "回")
                        count = 0
                        i = 1
                    if interval == False:
                        i = 0
                except:
                    # 何もしたくないのでパスする。
                    pass
        except:
            print("回線不通です。")
            time.sleep(60)

使い方

記事を書いている時点で台風が近づいているみたいなので、今回はとりあえず「台風」というキーワードが使われた回数を5分ほど数えてみた。

○以下のコマンドをSpyderの「IPython console」にコピー&ペーストして「Enter」キーを押す。

%run ~/py/test_bot.py 台風

出力

2016-10-03 11:23:00 台風  =  2 回
2016-10-03 11:24:00 台風  =  4 回
2016-10-03 11:25:00 台風  =  0 回
2016-10-03 11:26:00 台風  =  2 回
2016-10-03 11:27:00 台風  =  0 回

台風というキーワードは5分間で8回使われた。これが全体の1%だとすると、単純計算で800回。1日に換算すると20万回を超える。かなりの人が台風に関心を持っているように見える。

参考リンク

python-twitterのドキュメント

https://python-twitter.readthedocs.org/en/latest/

(2016/10/03更新)

Twitter botの作成①

アプリ作成者としての登録

Twitterでbotを使用するには先ずアプリ作成者として登録する必要がある。

①Twitterのアカウントを作成する。

アカウント作成の手順はあえて書く必要もないと思うので省略する。Twitterをやっている人なら、そのアカウントを使ってもいい。だが、もしそのアカウントに携帯電話番号を登録していない場合は登録する必要がある。

②以下のアドレスをクリックする。

https://apps.twitter.com/

③右上隅の「Sign in」をクリックする。

④「Twitterにログイン」でIDとパスワードを入力し、「保存する」にチェックを入れ、「ログイン」をクリックする。

⑤「Create New App」ボタンをクリックする。

⑥「Application Details」で「Name」にアプリの名前、「Description」にアプリの説明、「Website」にウェブサイトのアドレスを入力する。

Webアプリを作るのでなければ、ウェブサイトは実在しないアドレスでも構わないようだ。

⑦「Developer Agreement」で「Yes, I have read and agree to the Twitter Developer Agreement.」にチェックを入れる。

⑧「Create your Twitter application」ボタンをクリックする。

キーとアクセストークンの取得

上に続けて実行する。

①「Keys and Access Tokens」タブをクリックする。

②「Consumer Key (API Key)」と「Consumer Secret (API Secret)」をメモする。

③「Create my access token」をクリックする。

④「Your Access Token」で「Access Token」と「Access Token Secret」をメモする。

python-twitterのインストール

python-twitterはPythonでTwitterのAPIを動かすライブラリである。他にも多くのライブラリがあって、どれがよいか分からない。とりあえず、更新頻度が高く、活発そうなのでこれにした。

以前、通常バージョンはPython3では正常に動かなかったので(今はどうか確認していない)、開発バージョンをインストールする。

○以下のコマンドを端末にコピー&ペーストして「Enter」キーを押す。

pip install --upgrade git+git://github.com/bear/python-twitter.git
(2016/10/03更新)

PandasのSeries、DataFrameの型変換

pandasのSeriesやDataFrameの要素を型変換したい場合はastype()メソッドを使う。

例としてSeriesのfloat型の要素をint型に変換してみる。

○以下のコマンドを「IPython console」にコピー&ペーストして「Enter」キーを2回押す。

import pandas as pd
s_float = pd.Series([1.0, 2.0, 3.0, 4.0, 5.0])
s_int = s_float.astype(int)
print('float型 =')
print(s_float)
print('int型 =')
print(s_int)

出力

float型 =
0    1.0
1    2.0
2    3.0
3    4.0
4    5.0
dtype: float64
int型 =
0    1
1    2
2    3
3    4
4    5
dtype: int64
(2016/10/01更新)