できること

第66回「Twythonを使ってラズベリーパイからツイート投稿!(前編)」

raspberrypi66_main

今回は「Twython」を使って、ラズベリーパイとTwitterを連携させてみたいと思います。Twitterとの連携は以前にも挑戦したことがありますが、それよりカンタンとの噂! 今回はラズベリーパイ公式サイトのドキュメントに沿って進めていきます。

この記事では、OSは2017-11-29リリース版の「Raspbian Stretch with desktop」を、ラズベリーパイ本体は「Raspberry Pi2 Model B」を使用しています。

 

Twitterを扱った過去記事

第23回「Raspberry PiからTwitterへ情報発信!(1) Twitter API編」
第24回「ラズベリーパイからTwitterへ情報発信!(2) RSS取得編」
第25回「ラズベリーパイからTwitterへ情報発信!(3)自動投稿編」

以前の記事では、「TwitterOauth」というPHPのライブラリを使ってツイート投稿を行いました。
Twitter APIへの登録なども詳しく紹介していますので、初めての方はこちらの記事を参考にしてください。

 

Twythonとは?

Twython公式サイト

Twython – Twython 3.6.0 documentation
Actively maintained, pure Python wrapper for the Twitter API. Supports both normal and streaming Twitter APIs

「Twython」は、Twitter APIを利用するためのPython用ライブラリです。

Twitter libraries — Twitter Developers
twython by @ryanmcgrath — Actively maintained, pure Python wrapper for the Twitter API. Supports both normal and streaming Twitter APIs. Supports all v1.1 endpoints, including dynamic functions so users can make use of endpoints not yet in the library.

Twitter公式サイトでも紹介されています。

 

Twythonをインストール

raspberrypi66_img01

図1

Getting started with the Twitter API
こちらのドキュメントに沿って進めていきましょう。ページを切り替える場合は左のメニューをクリックします(URLは変わりません)。

上から2番目の「What you will need」には、「Twython for Python 3」のインストール方法が記載されています。
まずはいつものようにシステムを更新します。

sudo apt-get update
sudo apt-get upgrade

次に「Twython」のインストールコマンドを実行します。

sudo pip3 install twython

するとこんなメッセージが……

raspberrypi66_img02

図2

「pip3 list」コマンドで一覧を確認してみると「twython(3.4.0)」が確認できたので、既にインストールされているようでした。

最後に、必要なものがすべて揃っているかの確認コマンドを実行します。

python3 -c "import twython"

raspberrypi66_img03

図3

上図のように、なにもエラーが返ってこなければ、準備完了です!

ページの最後に、Twitter APIの利用には電話番号の認証が必要という旨の注意書きがあります。電話番号の登録がないと、Twitter アプリの登録が完了できない仕様になっているので、事前に済ませておきましょう。

 

Twitterアカウントの準備

3ページ目の「Create a Twitter account」は、Twitterアカウントの作成について記載されています。新規作成する場合は、Twitter公式サイトの手順に沿って、アカウントを作成しましょう。既存のアカウントを使用する場合は、そのまま4ページ目に進みます。

4ページ目の「Create a Twitter application」は、Twitterアプリの作成方法です。この内容は、第23回「Raspberry PiからTwitterへ情報発信!(1) Twitter API編」でも紹介しています。

Twitter Application Management
まずはこちらのページでTwitterアカウントにサインインして、「Create New App」ボタンをクリックします。

raspberrypi66_img04

図4

「Name」「Description」「Website」を入力します。「Website」も必須ですが、今回はWebで公開するわけではないので、自分のTwitterのURLを入力しておきました。
利用規約に同意して、「Create your Twitter application」ボタンをクリックしましょう。

raspberrypi66_img05

図5

Twitterアカウントに電話番号が登録されていない場合、上図のようなエラーメッセージが表示されます。その場合は下記ページを参考に、電話番号の登録を行いましょう。

アカウントへの携帯電話番号の登録方法

raspberrypi66_img06

図6

登録が完了したら、「Keys and Access Tokens」タブをクリックします。
「Consumer Key (API Key)」と「Consumer Secret (API Secret)」は、Twythonから認証する際に必要になる値です。

まずはアクセスレベルを確認しておきましょう。
「Read and write」になっていればOKです。わたしの環境では、デフォルトでその設定になっていましたが、変更する場合は「modify app permissions」リンクから設定ができます。

次は、アクセストークンの作成です。下部にある「Create my access token」ボタンをクリックします。

raspberrypi66_img07

図7

「Your Access Token」の項に、「Access Token」と「Access Token Secret」が表示されます。先程の「Consumer Key (API Key)」「Consumer Secret (API Secret)」と同じく、Twythonを使用する際に必要になる値です。

 

日時の設定

5ページ目の「Set the system date/time」は、日付と時刻の設定なので、「設定」メニューの「Raspberry Piの設定」から日時を合わせておきます。

 

Twitterに投稿!

6ページ目の「Send a tweet from Python」では、いよいよプログラムを書いていきます!
メニューから[プログラミング]-[Python 3(IDEL)]を選択して、エディタを開きます。

raspberrypi66_img08

図8

初期表示はこのような画面ですが、このままだと1行毎に実行されてしまうので、[File]-[New File]から新規作成しましょう。
Twitterアプリで作成した「Consumer Key (API Key)」「Consumer Secret (API Secret)」「Access Token」「Access Token Secret」の4つの値を、下記のような形式で記述し、「auth.py」というファイル名で保存します。

consumer_key  = 'ABCDEFGHIJKLKMNOPQRSTUVWXYZ'
consumer_secret = '1234567890ABCDEFGHIJKLMNOPQRSTUVXYZ'
access_token = 'ZYXWVUTSRQPONMLKJIHFEDCBA'
access_token_secret = '0987654321ZYXWVUTSRQPONMLKJIHFEDCBA'

Pythonは、先頭のスペースやタブ文字によるインデントがプログラムに影響するので注意が必要です
(同じ数でインデントされた行がブロックとみなされます)。
ここでは「 /home/pi/ 」ディレクトリにファイルを保存しました。piユーザーでログインしている場合は、このディレクトリがデフォルトになると思います。

次は、Twitterに投稿を行うプログラムを書いていきます。もう一度[File]-[New File]から新規作成し、下記のプログラムを記述します。「twitter.py」というファイル名で、「auth.py」と同じディレクトリに保存しましょう。

from twython import Twython
from auth import (
    consumer_key,
    consumer_secret,
    access_token,
    access_token_secret
)

twitter = Twython(
    consumer_key,
    consumer_secret,
    access_token,
    access_token_secret
)

message = "Hello world!"
twitter.update_status(status=message)
print("Tweeted: %s" % message)

「twitter.py」のウィンドウをアクティブにした状態で「F5」キーを押下するか、上部メニューから[Run]-[Run Module]を実行します。

raspberrypi66_img09

図9

実行結果画面に「Tweeted:Hello world!」と出力されます。

raspberrypi66_img10

図10

Twitterにアクセスして、実際に確認してみましょう。「Hello world!」と投稿されていれば、成功です!

raspberrypi66_img11

図11

連続して同じツイートを投稿しようとすると、このようにエラーが発生してしまうことがあります。その場合は、「message」変数の中身を別の文字列に変えて試してみてくださいね。

 

まとめ

「Twython」前編は、文字列をツイートするところまで進めました。
以前、Twitterを扱った際は、TwitterのAPIに直接アクセスしていましたが、ライブラリを使用することで、難易度がぐんと下がったように思いました。

Pythonがベースになっている「Twython」は、部品を使った電子工作にも導入しやすいように思います。画像を投稿したり、ツイートを検索したり……という応用編はまた次回!
次回はドキュメントの7~9ページ目に沿って、いろいろなツイート投稿を試していきたいと思います!

アバター画像

プロフィール:プログラミング暦通算4年、最近IT業界に舞い戻ってきたプログラマーです。女子です。

学生ロボコン2017 出場ロボット解剖計画