RaspberryPi

RaspberryPiからTwitterのAPIを使う

今回はRaspberryPiからTwitterのAPIを使っていきます。TwitterのAPIを使うには申請が必要で、ある程度の日数がかかります。頑張っていきましょう。

TwitterのAPIを申請する

まずは、Twitterのアカウントを持っていいなかったのでアカウントを作成しました。アカウントを作成し終わったら、以下のリンクから申請していきます。

[Developer — Twitter Developers]

https://developer.twitter.com/en.html

申請するフォームではAPIを何に使用するのか?取得したデータをどのように解析するのか?など、一定文字数以上入力する必要があります。一つ基本となる用途を考えておいて、そこから派生して書いていけば良いと思います。私が申請した大まかな利用は下のようになります。ちなみにGoogle翻訳で英語に翻訳して記入しました。

私はRaspberryPiでTwitterのAPIを実行して、電車の運行情報を取得します。その取得したデータを解析して、通勤経路で遅延が発生しているか毎日通知するようなプログラムを作成します。

申請が通ると Twitter Developers のコンソール上からAppを作って、APIを使うために必要な認証情報を取得します。App作成した時に入力した内容は大体以下のようにしました。

  • App Name(Appの名前) : 適当な名前
  • App usage(Appの用途): 申請時の用途を流用
  • Website URL(ウェブサイトURL) : 自分のTwitterのアカウントのURL
  • Callback URL: 未記入

Appの作成が終了したら、認証情報が発行されます。認証情報は先程作成した、Appを選択すると「Keys and Tokens」というタグのところにあります。以下の4種類の認証情報をメモしておいてください。後でRaspberryPi で使います。

  • API key
  • API secret key
  • Access token
  • Access token secret

RaspberryPiからTwitterのAPIを使用する

RaspberryPiにSSHでログインしたら、専用のディレクトリを作ります。

//カレントディレクトリに移動
$ cd
$ mkdir twitter

//TwitterのAPIを叩く為のプログラムを置く
$ mkdir twitter/main

//認証情報などの設定ファイルを置く
$ mkdir twitter/config

設定ファイルをtwitter/config直下に作成します。以下のように先程メモに取った認証情報を記述していきます。

[API]
CONSUMER_KEY=***************
CONSUMER_SECRET=***************
ACCESS_TOKEN=***************
ACCESS_TOKEN_SECRET=***************

次にTwitterのAPIを叩く為のプログラムを書いていきます。以下のサイトを参考に自分なりにアレンジして作っていきます。

[twitter APIで遊んでみる #3(検索結果の取得)]
https://qiita.com/tomozo6/items/d7fac0f942f3c4c66daf

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

import configparser
import json
from requests_oauthlib import OAuth1Session

class TwitterApi:
  def __init__(self):
    config = configparser.ConfigParser()
    config.read("../config/twitter-api-key.conf","UTF-8")
    CK = config.get("API","CONSUMER_KEY")
    CS = config.get("API","CONSUMER_SECRET")
    AT = config.get("API","ACCESS_TOKEN")
    ATS = config.get("API","ACCESS_TOKEN_SECRET")
    self.twitter = OAuth1Session(CK, CS, AT, ATS)

  def  search(self,keyword,count):
    url = "https://api.twitter.com/1.1/search/tweets.json"
    params = {
      "count" : count,
      "q" : keyword
    }
    return self.twitter.get(url,params = params)

  def getText(self,response):
    if response.status_code == 200:
      response = json.loads(response.text)
      for line in response['statuses']:
        print(line['text'])
        print('*******************************************')
    else:
      print("Failed: %d" % response.status_code)

if __name__ == "__main__":
  twitterapi = TwitterApi()
  response = twitterapi.search("柴犬",10)
  twitterapi.getText(request)

[ class TwitterApi ]
twitterでAPIを叩く為の機能を提供するクラスです。今は検索しか出来ないですが、関数を追加すれば機能を拡張できます。

[ def __init__(self): ]
設定ファイルから認証情報を取得してオブジェクトを作成します。

[ def search(self,keyword,count): ]
引数で受け取ったkeywordでTwitterの検索するAPIを叩きます。もう一つの引数countで取得するツイートの数を指定します。戻り値として、検索結果(Httpレスポンス)を返します。

[ def getText(self,request): ]
引数で受け取ったHttpレスポンスのHTTPステータスコードを確認して200の場合はツイートの本文を取得します。そして、結果を画面に出力します。違う場合はその旨を画面に出力します。

最後に注意

Twitterの認証情報は絶対にGitなどにアップしないように注意しましょう。認証情報などは別に設定ファイルなどを用意すると良いと思います。