Twitter API から Arduino – ESP32 を使ってトレンドツイートを取得してみた

ESP32 ( ESP-WROOM-32 )
Twitter API の仕様や利用規約が 2018/07から大幅な変更があったようです。
それに伴い、以前の Twitter application management サイトは今後廃止になるそうです。
そして、Twitter デベロッパーサイトのアカウント申請方法も大幅に更新されました。
アカウント申請審査方式が以前より厳しくなりました。
それに伴い、以下の記事も大幅修正しました。
(2018/08/21)

 

スポンサーリンク

なんと、この記事が工学社さんの
自作派のためのコンピュータ技術情報誌、
I/O(アイオー)

2018年3月号、4月号
に転載していただけることになりました。

IO 2018年 03 月号 [雑誌]
工学社
¥69(2024/03/28 16:58時点)

IO 2018年 04 月号 [雑誌]
工学社
¥224(2024/03/28 16:58時点)

前編と後編に分けての掲載です。
私の様なアマチュアのブログ記事が技術情報雑誌の記事にしていただけることは、この上ない光栄で、嬉しい限りです。
工学社の皆さま、ありがとうございました!
m(_ _)m
他にも、自作派にとってとても興味深い記事がたくさんありますので、是非読んでみて下さい。




更に、Make:Japan さんにもこの記事が紹介されました。
(2017.12.22)
恐縮です。光栄です!!
ありがとうございました!!
m(_ _)m

こんばんは。

今回は、ちょっとスゴイですよ。
Arduino core for ESP32 を使って、Twitter API を使うことができたので紹介したいと思います。

これを使えば、今現在のトレンド キーワードを取得できるので、災害や緊急時のツイートビッグデータを取得することも可能です。
これは、自分としては念願のプロジェクトでもあったのです。

なぜかというと、インターネット上ではマイコンから自分の呟きをツイートする情報は沢山あり、IFTTT などを使えば比較的簡単にツイート投稿をすることができますが、逆に投稿されたツイートをマイコンで取得する情報があまりありません。
あったとしても、ラズパイを使用した方法です。
ESP8266 では Tweetを取得するライブラリがあったりしますが、ESP32 にはまだありません。

ツイッターのトレンドデータというものはとっても有効なデータだと思います。
今、日本で何が起こっているか、または世界で何が起こっているかを瞬時に把握することができます。
これをパソコンやスマホを開かずに常時画面に表示することができれば、とても便利だろうなぁ、と思っていました。

ところで、以前、ESP8266 ( ESP-WROOM-02 ) を使って、ツイートを取得する記事を書いたことがあります。
Twitter 検索結果のツイートを有機EL ( OLED )に表示させてみた

この記事では、TwitterAPI を使わずに、Web上の記事を解析してツイートを取得していましたが、膨大な文字処理にマイコンの CPU が使われてしまって、メモリを多量に消費してしまいます。
Twitter API が使うことができれば、必要な情報をピンポイントで取得できるので是非とも使いたかったのです。
でも、いろいろ実験をしていましたが、マイコンとの OAuth 認証が必要で、その方法が今までまったく分からなかったのです。

でも、今回、やっとやっとこの OAuth 認証を Arduino IDE – ESP32 で実現できたんです!!
しかも、Time ライブラリ以外は、Arduino core for ESP32 内のライブラリのみで実現できて、その他の外部ライブラリは一切使用していません。
外部ライブラリを使用せずに動作させてみると、OAuth 認証のしくみがある程度理解できるようになってきます。
これは、私の様な独学のアマチュアプログラマにとって、とっても大きな成果なんです。
今後の IoT 開発にいろいろと役立ちそうな気がしています。

OAuth 認証については、最初は sha1.c という外部ライブラリを使って実験していました。
しかし、いちいちスケッチにコピーしなければいけなくて面倒だったので、Arduino core for ESP32 のライブラリに組み込まれている mbedtls ライブラリを流用してみたら、なんと、できてしまいました。
そんなわけで、Twitter API が使えるようになったわけです。
これには我ながら感動してしまいましたね。
やったーーー!
って感じです。

これを使えば、Google Home でツイート結果を喋らせることもできます。
既にもう実証済みなので、後々記事にしたいと思います。
アマチュア電子工作家にとって、IoT 機器開発に幅がグーンと広がりますね。

ということで、Arduino core for ESP32 で Twitter API を使用する方法を紹介したいと思いまが、更にもう一つ言っておかなければなりません。

実は、Twitter API から返って来る文字列はなんと、Unicode ( UTF16 )文字列なのです。
これではディスプレイに日本語表示することはできません。

そこで、いろいろ私なりに調べた結果、なんと、Arduino core for ESP32 に入っている、xtensa-esp32 ライブラリを使えば、それほど苦労せずに UTF-8 文字列に変換できたんです。
これも我ながら大きな成果でした。

ということで、前置きが長くなってしまいましたが、Twitter API の使い方を紹介したいと思います。

準備するもの

以下のESP-WROOM-32 ( ESP32 ) 開発ボードがお勧めです。
ESP-WROOM-32 は Arduino IDE で開発ができる、技適取得済みWi-Fi & Bluetooth 搭載のマイコンです。
それをパソコンにUSB接続できるように使いやすくしたボードが以下のものです。

ESPr Developer 32

ESPr Developer 32
スイッチサイエンス(Switch Science)

まずは、USBホスト機器や ESP-WROOM-32 自体を突入電流や過電流から手厚く保護できる、スイッチサイエンス製の ESP-WROOM-32 ( ESP32 )開発ボードをお勧めします。
これの仕様例は以下の記事を参照してみてください。

ESPr Developer 32 ( スイッチサイエンス製 ) を使ってみました

その他、Espressif Systems 社純正の以下のボードもあります。

ESP32-DevKitC

Wi-Fi環境

インターネットにつながっている Wi-Fi ルーター環境が必要です。
事前に ESP-WROOM-32 がネットに接続できるように、Macアドレスフィルタリングなどの設定を済ませておいてください。

特に注意していただきたいのは、IoT機器や その他 Wi-Fi 機器が増えると、Wi-Fiルーター設定の DHCP ユーザー最大数をいつの間にか超えている場合があります。
その場合はなぜか Wi-Fiに繋がらないという症状が出ますので、ユーザー数を増やすなどの設定にしておいてください。

パソコン、USBケーブル等

Arduino core for ESP32 のインストールおよび設定

Arduino IDE は 1.8.5 で動作確認しています。

Arduino core for ESP32 は最新版を使用してください。
そのインストール方法や設定は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

Time ライブラリのインストール

Arduino 標準の Timeライブラリを予めインストールしておいてください。
インストール方法は以下の記事を参照して最新版をインストールしておいてください。

https://www.mgo-tec.com/blog-entry-1616shinonome-ws-oled-news.html

Twitter デベロッパー ( Developer )のアカウント申請

2018/07 から、Twitter デベロッパー ( Developer )サイトのログイン方法や申請方法が変わりました。
以前慣れ親しんだ twitter application management サイトの画面は間もなく無くなるとのことです。
これからはTwitter デベロッパー ( Developer )の画面内で進めていくことになります。

また、昨今のセキュリティ事情により、Twitter SDK や API の仕様の大幅変更がありました。
申請は以前よりちょっと厳しくなりました。
アプリを使う理由を 300字以上で詳しく記述しなければいけなかったり、審査が厳しくなりました。

また、以前登録された方でも、仕様や利用規約の変更により、再申請が必要です。
申請が通らないと、Access token キーなどにアクセスできないのでご注意ください。

Twitterアカウントを作成し、Twitterにログインしておく

まず、ご自分のTwitter アカウントを作って置いて下さい。
Twitter アカウントが既に作成できていれば、ログインした状態にしておいてください。

Twitter デベロッパー ( Developer )ページでアカウント申請する

次にTwitter デベロッパー ( Developer )サイトのページでアカウントの申請します。
以下のリンクをクリックしてください。

https://developer.twitter.com/

開くと、こんな感じのページが表示されますので、右上端の「Apply」をクリックしてください。
なお、この申請方法は 2018/08/21 時点ですので、今後変更される可能性があります。

すると、下図の様な画面になるので、
「 Apply for a developer account 」
ボタンをクリック します。

すると、下図の様な画面になるので、対象のアカウントを選択して、「Continue」ボタンをクリックします。

すると、下図の画面になるので、それぞれチェックし、アカウント名を入力し、地域をJapanにします。
アカウント名は英語表記にします。
良ければ「Continue」をクリックして次へ進みます。

すると、下図の画面になります。
必要なところをチェックし、入力していきます。

「 What use case(s) are you interested in? 」
のところが重要です。
以下の項目をできるだけ詳しく英語で入力します。

●何の目的で使うか
●ユーザーに何を提供するか?
●どのように分析するか
●Twitterデータは最終的にどのように表示されるか?

 

これを必ず 300 文字以上入力しないと先へ進めないようになっています。
これを薄い内容で入力すると申請に通らないようなので気を付けてください。
私の場合は、趣味の電子工作用途等の説明をGoogle翻訳を使って入力しました。
全て入力済んだら、「Continue」をクリックします。

すると、下図の画面になりますので、規約を読み込み、最後までスクロールさせます。
すると、チェックボックスが有効になるので、それぞれチェックします。
特に問題無ければ、「 Submit Application 」ボタンをクリックします。

すると、下図の画面になるので、申請審査結果がメールで送られます。

送られてきたメールをHTML形式で開くと、下図の様な画面になっているので、
「 Confirm your email 」
をクリックします。

すると、下図の様に画面が遷移して、「Welcome !」が表示されれば無事審査通過ということになり、晴れて Twitter API 開発が可能になります。

ただし、下図の様な画面の場合は、まだ審査中ということで、少々問題があるようです。
審査結果が出るまで気長に待ちましょう。

Apps を Create し、Consumer API keys や Access Token を生成する

昔の twitter application management 画面で行った、Consumer API keys や Access Token を生成します。
まず、下図の様に右上端の自分のアカウント名をクリックすると、ポップアップが出るので、そこの
「 Apps 」
をクリックします。

すると、下図の画面になるので、
「 Create an app 」
をクリックします。

すると、下図の様に App details 画面になります。
以前の twitter application management 画面よりも入力項目が多くなりました。
Website URL は、ご自分のサイトが無い場合は、とりあえず、Twitter のURLを入力しておきます。

https://twitter.com

Callback URLs も同じように入力しておきます。
ハッキリとは分からないのですが、2018/07からの仕様変更により、OAuth認証で使用した URL とこの Callback URLs が一致していないと、アプリが動作しないらしいです。
また、一番下の欄の
「 Tell us how this app will be used 」
のところは、100文字以上の英語でアプリの使い方を入力する必要があります。


上記の「Create」をクリックすると、下図のウィンドウが表示されます。

これは、要するに以下のことを注意してくださいとのメッセージです。

● Sensitive Information ( 機密情報 )
Twitterユーザーの潜在的な機密性(健康、政治または宗教、民族、性的指向など)がTwitterデータから引き出されることに注意してください。

● Govemment use and surveillance ( 政府による使用と監視 )
調査の目的で、どの政府機関からも TwitterデータとTwitter APIの使用を禁じています。

●Automation
ツイートの投稿、アカウントのフォロー、またはダイレクトメッセージの送信に使用する場合、オートメーションルールを慎重に見直してガイドラインに従ってください。

 

特に問題無ければ、「Create」をクリックします。

すると、下図の画面になるので、
「 Keys and tokens 」
タブをクリックします。

すると、下図の様に Consumer API keys の API key と API secret key が表示されます。
これに加えて、Access Taken を生成しなければなりませんので、下図の様に「Create」をクリックします。

すると、下図の様に表示され、Access token とAccess token secret キーが生成されます。
ここで、一番下に表示されている、(Access level)ですが、
Read and write
になっています。

読者の方からコメント投稿があったのですが、このままだと動作しないことがあるようです。
その場合、下図の様に「 Permissions 」タブをクリックして、「Edit」ボタンをクリックして編集します。

すると、下図の様に表示されるので、「Read only」にチェックをして、「Save」ボタンを押します。

再度、下図の様に「 Keys and tokens 」タブをクリックして、Permissions が変更されているか確認してみます。

しかし、なぜだか変更されていません
実は、上図の「 Regenerate 」ボタンを押さないと反映されないので、それをクリックします。

すると、下図の様なメッセージが出るので、「 Regenerate 」ボタンをクリックします。

これでやっと下図の様に Access level ( Permissions )の変更が反映されました。

以上、Twitter APIs を使用するには、以下の4つのキーが必要になります。

Consumer Key ( API Key )
Consumer Secret ( API Secret )
Access Token
Access Token Secret

※これらのキーは他者に見られないように十分注意してください

次では、Twitter APIs への HTTP リクエスト方法の流れを説明します。

コメント

  1. けんにぃ より:

    雑誌掲載おめでとうございます☆
    すごいですね!
    これからもご活躍楽しみにしています。

    • mgo-tec mgo-tec より:

      けんにぃさん

      ご無沙汰しております。
      うれしいコメントありがとうございます。
      m(_ _)m
      記事を寄稿したわけではなく、転載ですが、それでも雑誌になるというのは嬉しいものがありますね。

      ところで、今、ESP32 の SSID セレクターライブラリを作成中です。
      近日中に公開予定です。
      これには、パスワード送信が絡んでいるため、SSL通信が必須です。
      そのため、ESP8266ではメモリが少ない為、動作しない可能性があり、ESP8266用の公開は未定です。
      とりあえず、お知らせでした・・・。

  2. けんにぃ より:

    お久しぶりです☆
    転載されるというのは、魅力的な記事だからだと思います☆
    ESP32のライブラリーは興味津々です♪楽しみにしています。まだESP32買ったままで使えてないですが、何か始めたいと思っていますので。
    ESP8266でなんとか粘ってましたが、策尽き果てました(笑)
    希望としてはESP32で大きめドットのディスプレイをSSIDやpasswordをスマホから取得して駆動(一度取得したら繋がらなくならない限りROMから読み出し)し、外部からのコメントも表示(これは元気8266で外部サーバーに書き込みしたファイルの読み出しで出来ています)をしたいと思っています。(ヤフーのニュースは最悪見れなくてもOK)
    元々ヤフーのメッセージを切替していた感じで、ガスの炎監視やコンセントの電流センサーで消し忘れ監視をディスプレイで表示(これも8266ではある程度可能)を考えてます。
    なので、記事を参考にさせてもらいながら色々やってみたいと思いますので楽しみにしています♪

    • mgo-tec mgo-tec より:

      なるほど。
      けんにぃさんのやろうとしていることは、これからの高齢化社会に必須のアイテムになりそうですね。
      スバラシイです。
      そうなると、益々セキュリティの高い通信が重要になってきますね。

      ESP-WROOM-02(ESP8266) は何故かフラッシュが2MB版が販売されていて、凝ったものを作ろうとすると明らかにメモリが足りないですね。
      外付けSRAM や SDカードを追加すればある程度のことはできますが、それならばESP-WROOM-32を使った方が圧倒的に安上がりで、幅広いプログラミングができますね。
      これからは ESP32 を中心に工作していった方が良いと思います。

      ということで、今年度末で多忙ですので、SSIDセレクターはもうちょいお待ちください。

    • mgo-tec mgo-tec より:

      ということで、Arduino – ESP32 で SSLサーバーを構築して、スマホブラウザでセキュアな Wi-Fi アクセスポイントセレクターライブラリ作ってみました。
      以下の記事をアップしましたのでご覧ください。
      Arduino – ESP32 で SSLサーバーを構築し、セキュアな Wi-Fi アクセスポイントセレクターを作ってみました

  3. けんにぃ より:

    ありがとうございます☆
    ついに完成したのですね♪
    是非とも参考にさせてもらいESP32使ってみたいと思います☆
    自分は、ESP8266でスマートコンフィグではとりあえず使えるようになりましたので、これを32でやっていけるように頑張ります♪

    • mgo-tec mgo-tec より:

      OpenSSL で証明書発行が最初の壁ですが、1回作ることが出来れば、あとは簡単です。
      素人コードなので無駄が多いと思いますが、機会があったら使ってみてくださいませ。
      m(_ _)m

タイトルとURLをコピーしました