「いいね」や「リツイート」を行うTwitterBotの作り方

GAS/TwitterBot
この記事は約7分で読めます。

リクエスト企画第2弾です!

先日、TwitterBotに関して以下のリクエストを頂きました。

リクエストがあるのですが、タイムラインのツイートにいいねやリツイートをしたり、フォローしているアカウントのツイートを取得して自動でツイートするなどのようなリアルタイムで動くbotをつくってみたいと考えています。

今回は前半としてタイムラインのツイートにいいねリツイートを行うTwitterBotを作っていきたいと思います。

今回もGoogleスプレッドシートを使ったGASでの開発になるので、これまでの記事も参考にしていただけると幸いです。

今回作るもの

↑のように検索ワードといいね or RTの内容を書くと、「ツイートを検索」→「いいね or RTを付与」するTwitterBotを作っていきます。

コード公開(ConsumerKey以外コピペでOK)

認証周りに関しては過去記事を参考にしてください。

今回は main という関数をスタートとして処理を行っていきます。

そのため処理を実行する時は関数をmainに設定して実行してください。

細かい処理については全部説明してしまうと大変なのでコメント多めに残しています。

コードを読みつつ、こういう処理を行っているんだなぁと解釈していただければと思います(どうしても分からない・気になるということがあれば追記しますのでコメント or DMください〜)

TwitterAPI

TwitterAPIとは

前回までは「Twitterに投稿するAPI」だけを使用してきましたが、今回はいろいろなAPIを使いました。

この記事を読んでいる人はプログラミングに慣れていない人も多いと思うので基礎的なところから説明していきます。

TwitterAPIとはTwitter社が「プログラムからでも実行してもいいよ」という意図で提供しているインターフェース(起動スイッチのようなもの)です。

例えば

https://api.twitter.com/1.1/favorites/create.json

というURLにアクセスすると「ツイートにいいねを付ける」という処理が始まります。

TwitterAPIの使い方

TwitterAPIの使い方は↓のような公式ドキュメントを読んで確認しましょう。

https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-favorites-create

よく分からないと思うので軽く解説します。

Resource URL

処理の起点になります。

https://api.twitter.com/1.1/favorites/create.json

このURLにアクセスをすると今回であれば「いいね」が付与されます。

Resource Information

Response formatsJSON
Requires authentication?Yes (user context only)
Rate limited?Yes
Requests / 24-hour window1000 per user; 1000 per app

Response formatsは処理が終わって返ってくる結果(Response)の形式(formats)がJSONになるということです。

var response = service.fetch('https://api.twitter.com/1.1/search/tweets.json?' + queryStr);
var result = JSON.parse(response)

APIは違いますが↑のようにJSON.parseを行うとデータを使えるようになります。

Requires authentication は認証が必要かどうかです。「いいね」はその人自身の権限がないと使えないので Yes となっています。
認証自体はTwitterWebServiceライブラリで認証しているのでOKです。

Rate limited? は使用制限です。無限にいいねを使われるとサーバーに負担が掛かってしまうので制限が設けられています。

Requests / 24-hour window は制限の内容です。この場合は24時間に1000回いいねを使えます。

Parameters

実行する際に必要なパラメータになります。今回のコードを参考にすると、他のAPIでも同じようにパラメータを設定して実行することが出来るかと思います。

GETの場合は、URLの最後に 「?id=*****&name=*****」 というクエリを追加します。

POSTの場合も、Example Request を見ると 「?id=*****&name=*****」のように行っていますが、個人的にはpayloadに入れてしまう書き方をおすすめします(TwitterではあまりないけどPOSTのパラメータに秘匿情報を入れることがあるのでアクセスログに残るURLに付けないほうが無難

ちょっとわからなかった事

Could not authenticate you. というエラー

https://api.twitter.com のリクエストに失敗しました(エラー: 401)。
サーバー応答の一部: {"errors":[{"code":32,"message":"Could not authenticate you."}]}
(応答の全文を見るには muteHttpExceptions オプションを使用してください)
(行 443、ファイル「Service」、プロジェクト「OAuth1」)

以下のエラーですが、翻訳すると「認証できませんでした」なんですが、どうもおかしい

認証は通っています

発現する条件を調べるために色々試していると「正しいデータが送れてなかったとき」に起きるようです。

パラメータが不足していた時、検索文字列に特定の記号が入っていた時、などなど。

他のサイトで「Twitterのサーバーの調子が〜」「しばらく待ってみれば〜」と書いてたりしますが、少なくとも400系のエラーはこちらのミスです(こういう時は400エラーが返るのが普通なんだけど…)

とりあえず Could not authenticate you.というエラーが出た場合は、パラメータに記号が含まれていないか、requireとなっているパラメータが抜けていたりしないか、などを確認してみると改善が見込めると思います!

検索可能な記号がわからない

これもよくわからなかった。

Twitterの検索では「from:@belltreeSzk あああああ」で特定のアカウントの投稿だけを検索できるのですが、@ が検索文字列に入ってしまうと Could not authenticate you. が出てしまうことが判明しています。

同じく「( ´ー`)y-~~」のような記号が入った顔文字もNGです。

ただしハッシュタグ # はOKでした。

調査しきれない部分だったので色々試してみてほしいです。

今回のTwitterBotを通して伝えたいこと

公式ドキュメントはしっかり読み込もう

今回は以下のAPIを使用しました。

【ツイートを検索】
Standard search API
【ツイートの状態の検索】
GET statuses/lookup
【いいねを付ける】
POST favorites/create
【RTを付ける】
POST statuses/retweet/:id

「GETなのかPOSTなのか」「必要なパラメータはなにか」など動かすために必要なパラメータを確認することは大事ですが「何回実行できるのか」「オプションでどんなパラメータを設定出来るか」なども正しく動かす上でとても必要です。

仕事としてAPIを扱う場合は、ブログだけで判断せずにちゃんと公式ドキュメントを確認しましょう。

様々なAPIを組み合わせてオリジナルBotを作ろう

今回のサンプルコードで大体のTwitterAPIを実行する方法がなんとなく把握出来たと思います。

今回はコピペで「いいね」や「RT」が出来るBotを作ることが出来ますが、いいねしてくれた人をフォローするBotや、いいねやRTが多いツイートをスプレッドシートにまとめる機能なんかも作れるかも…?

自分の作りたい機能を作ることは楽になることだけでなく自身のプログラミングの勉強にもなるので、ぜひ挑戦してみてください!

ここまで読んで頂きありがとうございました!

コメント

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