PythonからTwitterを利用する

MacとRaspberry Piにtweepyをインストール

pythonでtweepyライブラリを使ってプログラムを作成しようと思うので,raspberry piにtweepyをインストール。 そのために,まずはpipのインストール

$ sudo apt-cache pkgnames python-pip
...
$ sudo apt-get install python-pip
...

参考サイト: twitterAPI用pythonライブラリtweepyを使えるようになるまで。

Macにはpipをインストールしていないので,easy_installでtweepyを導入。導入後はimport出来るか確認

$ sudo easy_install tweepy
$ python
>>> import tweepy
※ここで何も出なければインストール成功!

Raspberry Piには先程pipを入れたのでそっちからインストール

$ sudo pip install tweepy
$ python
>>> import tweepy
※ここで何も出なければインストール成功!

次はOAuthクライアント登録のためにTwitterの開発者ページに移動。 ログイン後,右上の自分のプロフィール画像からMy applicationsをクリック。次にCreate a New Applicationをクリック。必要な情報を入力して「保存する」をクリックすればOK! 最低限"Application Name"、"Description"、"Application Website"が入力されていれば良いようです。

登録後出てくる画面から,Consumer KeyとConsumer Secretをメモ。 次にAccess KeyとAccess Secretを取得。

こちらのサイトを参考に,こちらのプログラムをRaspberry Pi上で実行してAccess KeyとAccess Secretを取得。

$ python getaccesstoken.py
Consumer key: コンスーマーキーを入力
Consumer secret: Consumer Secretを入力
Verification pin number from twitter.com: Twitterのページが開かれるので,アプリケーションを認証して,
Access token:
  Key: アクセスキーが表示
  Secret: アクセスシークレットが表示される。

次に投稿の権限を読み取り専用から読み書きができるように変更する。Twitterの開発者ページから右上のプロフィール画像→My applications→Settingsの順に移動し,↓のように変更後,ページの下部にあるUpdateボタンを押す。

f:id:nwpct1:20131013121928p:plain

Pythonでツイートしてみる。

import tweepy                                                               

consumer_key = "コンシューマーキー"
consumer_secret = "コンシューマーシークレット"
access_key = "アクセスキー"
access_secret = "アクセスシークレット"
                                                  
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)                                           
auth.set_access_token(access_key, access_secret)                                                                                           
api = tweepy.API(auth_handler=auth)
api.update_status("ツイートテスト!")

このプログラムを実行するとツイートが出来ます。但し,Twitterでは同じつぶやきが出来ないようになっているので,一度このプログラムを実行すると2回めは失敗します。ツイートする文字列を違うものに変えないとだめです。

タイムラインを監視する

これについては調べると↓の記事がとても参考になりました。

この記事に載っているタイムラインを監視するpythonのプログラムがとても綺麗に書かれていたので,とても読みやすかったです。タイムラインの取得はこのページのプログラムで解決しました。本当に感謝です。 上記のページに乗っていたプログラム↓を実行させてもらいます。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from tweepy.streaming import StreamListener, Stream
from tweepy.auth import OAuthHandler
from tweepy.api import API
from datetime import timedelta

def get_oauth():
    # 以下4つのキー等は適宜取得して置き換えてください。
    consumer_key = 'XXXXXXXXXXXXXXXXXXXXXX'
    consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    access_key = 'xxxxxxx-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    access_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_key, access_secret)
    return auth

class AbstractedlyListener(StreamListener):
    """ Let's stare abstractedly at the User Streams ! """
    def on_status(self, status):
        # Ubuntuの時は気づかなかったんだけど、Windowsで動作確認してたら
        # created_atはUTC(世界標準時)で返ってくるので日本時間にするために9時間プラスする。
        status.created_at += timedelta(hours=9)
        print(u"{text}".format(text=status.text))
        print(u"{name}({screen}) {created} via {src}\n".format(
            name=status.author.name, screen=status.author.screen_name,
            created=status.created_at, src=status.source))

if __name__ == '__main__':
    auth = get_oauth()
    stream = Stream(auth, AbstractedlyListener(), secure=True)
    stream.userstream()

今回は利用しませんでしたが↓の記事も参考になるかもしれません。