ここではtwitterと連動するロボットのサンプルを紹介します。
twitterの準備
twitterアカウントの作成
- 日頃使っているTwitterアカウントを使用してもよいのですが、実験用アカウントを新たに作ってもよいと思います。ただし、携帯電話番号で認証したアカウントでないと、以下のアプリ登録はできないらしい(すみません未確認です)のでご注意ください。
- twitterのサインアップ画面にアクセスし、手続きしてください。この作業はラズパイではなく、パソコンやスマホを使ったほうが楽だと思います。
Twitter Develperでアプリを登録
- ラズパイの X Window Systemからブラウザを起動し、Twitter Application Management(https://apps.twitter.com/)にアクセスしてください。
- 「Twitter Apps」という画面が表示されます。まだtwitterにログインしていない場合は、リンク「sign in」をクリックしてID(電話番号orメールアドレスorユーザー名)とパスワードを入力し、twitterにログインしてください。
- すでにアプリを作ったことがあるひとはここにアプリのリストが表示されるのですが、初めての場合はほぼ真っ白な画面になっていると思います。「Create New App」をクリックしてください。
- 「Create an application」という画面が表示されるので、項目を入力してください。
- Name : 今回作成するアプリの名前。適当でよいですが他のアプリと重複しないようにユニークな名前をつけましょう。
- Description : アプリの説明文。適当でOK。
- Website : 今回作成するアプリのホームページのアドレスを入力する項目ですが、とりあえず適当なURLを入れておきましょう。
- Callback URL : 空欄のままでOKです。ちなみにCallback URLとはユーザーが認証(アプリ連携)作業をした後の、戻り先となるURLアドレスのことで、アクセストークンを取得する際に利用します。
- 入力を終えたら「Developer Agreement」に同意するチェックボックスをチェックして、ボタン「Create Your Twitter Application」をクリックしてください。
Twitter 認証キーの取得
- (注)上記の作業をパソコンやスマホから行ったひとも、ここからはラズパイの X Window Systemで作業したほうが楽です。
- LXTerminalからテキストエディターでtwitterの認証データを保存しておくためのファイル「twitterInfo.py」を開いてください。
1 2 3 |
$ cd ~/bezelie/pi $ sudo nano twitterInfo.py |
- 以下のような画面が表示されたと思います。「X」が並んでいる部分を、これから埋めていきます。
1 2 3 4 5 6 |
CONSUMER_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXX" CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ACCESS_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ACCESS_TOKEN_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" SCREEN_NAME = "@xxx" |
- ラズパイのブラウザで再びTwitter Application Management(https://apps.twitter.com/)にアクセスしてください。
- アプリ名をクリックすると、アプリの名称がついたページが開きますので、上端の「Keys and Access Tokens」タブを選んでください。
- 「Your Access Token」項目にあるボタン「Create my access token」をクリックしてください。
- 「Application Settings」項目に書いてある、「Consumer Key (API Key)」と「Consumer Secret (API Secret)」、そして「Your Access Token」項目に書いてある「Access Token」「Access Token Secret」をマウスで範囲選択してコピーし、テキストエディタで開いている「twitterInfo.py」の該当する「X」のところにペーストしてください。
- 「SCREEN_NAME」には、自分のユーザー名を記入してください。先頭の「@」はつけてもつけなくてもOKです。
- テキストエディターを保存して閉じてください。
- ちなみにCONSUMER_KEY(API key)とCONSUMER_SECRET(API Secret)は、このアプリ自身のIDとパスワードで、ACCESS_TOKENとACCESS_TOKEN_SECRETは、webサービスなど第3者がユーザーの代わりにユーザーの情報にアクセスするために発行されたIDとパスワードです。当然ながらパスワードは他者に知られないよう厳重に管理してください。いずれも上記のアプリの画面から簡単に再発行することができます。
認証ライブラリのインストール
- twitterとの認証を簡単に実現するため、requestsモジュールとrequestsのOAuth用追加ライブラリrequests_oauthlibをインストールします。
- コマンドラインから下記のように打ち込んでください。
1 2 3 4 |
$ sudo pip install requests $ sudo pip install requests_oauthlib |
- ちなみに「pip」はPythonのパッケージ管理システムで、サードパーティ製のモジュールを簡単にインストール・管理するためのツールです。最新のRaspbianであれば、最初からインストールされているはずです。
サンプルプログラム1
- まずは任意のユーザーのつぶやきを音声合成で喋らせるサンプルです。
- 「AquesTalk Piで喋らせてみる」を終えた状態(AquesTalk Piをインストールし、スピーカーの設定を終えた状態)で、下記のコマンドを実行してください。
1 2 3 |
$ cd ~/bezelie/pi $ python sampleTweet2Speech1.py |
- あなたの最新のツイートがロボットから発話されたら成功です。
- さらにtwitterで何かをつぶやいてみて、それが発話されるかどうかも確認してみてください。
応用
- 実験なので自分のツイートを発話させましたが、「twitterInfo.py」の「SCREEN_NAME」に任意のユーザー名を入力すれば、有名人や友だちなど、好きな人のつぶやきを発話させることができます。
- 「sampleTweet2Speech.py」の12行目あたりにある「talkSpeed」の値を変えることで、発話速度を変えられます。指定できる値は50から300で大きな値にするほど早口でしゃべります。
- その下あたりにある「interval」の数値を変えることで、最新ツイートをチェックする間隔を秒数で調整できます。
- 今回はtwitterが提供している REST APIのうち、「GET-statuses-user_timeline」を利用してツイート内容「text」を発話させましたが、他のAPIを使えば、日時やユーザー名やリツイート数などの情報を取得することもできます。詳細はドキュメントをご覧ください。
- Twitter Developer Documentation(英語)
- Twitter 開発者ドキュメント日本語訳
サンプルプログラム2
- これはユーザーが喋った言葉を音声認識して自動的にツイートするサンプルです。
- 「Juliusで音声認識させてみる」を終えた状態(Juliusがインストールされ、マイクの設定を終えた状態)で、下記のコマンドを実行してください。
1 2 3 |
$ cd ~/bezelie/pi $ python sampleSpeech2Tweet1.py |
- juliusをモジュールモードで起動するため、起動するまでちょっと時間がかかります。画面に「OK. Please Speak」と表示されたら、マイクに向かって何かを喋ってみてください。twitterを確認し、ツイートされていたら成功です。
- 多くの場合、正しく認識されずに変な言葉がツイートされてしまうと思いますが、認識率を上げるのは結構大変です。
- twitterの規定により、同じ発言を繰り返すことはできません。また過度に高頻度な発言をしていると発言できなくなってしまいますのでご注意ください。
応用
- 音声認識の精度が低いなぁと思ったら、まずは騒音の無い場所でマイクに向かって明瞭に喋ってみてください。
- さらに認識精度を上げたい場合は設定ファイル「julius2.jconf」のパラメータをいじってみてください。
- the Julius Book:付録B. オプション一覧
- 今回はtwitterが提供している REST APIのうち、「POST-statuses-update」を利用しています。詳細はドキュメントをご覧ください。
- Twitter Developer Documentation(英語)
- Twitter 開発者ドキュメント日本語訳
- twitterが提供しているREST APIは他にもいろいろありますので、ぜひ挑戦してみてください。
- REST API Reference Documentation(英語)
- Twitter 開発者ドキュメント日本語訳:REST API
tips
- 「REST API」とは、「REST形式で利用できるAPI」のことです。「REST」は「REpresentational State Transfer」の略で、URLに対してGET,POST,PUT,DELETEでリクエストを送信し、レスポンスをjsonやXMLで受け取る形式のことです。「API」は「Application Programming Interface」の略で、WEB上に公開されていてユーザーが利用することができるソフトウェアのことです。twitterに限らずwebサービスを行っている多くの企業が、APIを公開しているので、APIを活用することで簡単に高度な技術を利用することができます。