【爆速】自作のTwitterBotを簡単に作るライブラリを作った話【初心者向け】

GAS/TwitterBot
この記事は約9分で読めます。
スポンサーリンク

これまでTwitterBotの記事を書いてきましたが、コピペだけで済むとはいえ、少し難易度が高い&処理を書こうとするとコードが冗長になってしまう問題がありました。

今回、よく使われる諸々の処理をまとめたライブラリを公開したのでその紹介と使い方の解説を行います。

慣れてる人向けの情報(TL;DR)

以下のものを見ればたぶん分かると思います(おい

ライブラリID

MtWJFxCibKiP9SvrKBk8a0_EqweE_tvXn

ライブラリのソースコード

belltreeSzk/TwitterClient
GASを使ってTwitterBotを作る際に便利なライブラリ. Contribute to belltreeSzk/TwitterClient development by creating an account on GitHub.

実行サンプルコード

main.gs
GitHub Gist: instantly share code, notes, and snippets.

TwitterClientライブラリとは(超初心者向け)

ライブラリとは

簡単に言うと便利な関数のセットです。

「jQueryはライブラリなのか、フレームワークなのか」という話をたまに聞きますが、ライブラリは関数群、フレームワークはアプリケーションの枠組みです。

だからjQueryはライブラリです。

まぁそれは置いておいて、そういった便利な関数群を作りました。

ライブラリがあると何が便利なのか

こちらも簡単に言うと大きなところは実装負担が減る点です。

本来100行のコードを書く必要がある処理をライブラリの関数を呼び出す1行で実装完了となってしまうこともあります。

実装が減るということは、コードが短くなります

コードが短くなるということは、コードがシンプルになります

コードがシンプルになるということは、不具合が減ります

加えて、仕様変更や不具合が起きて本当は修正しなければならない実装があっても、ライブラリ側で直してくれる場合もあります(つまり俺が、、)

ライブラリを使えば、簡単にやりたいことが出来る…かもしれませんね!

TwitterClientライブラリで出来ること

TwitterClientでは、これまで何度か紹介してきたTwitterBotを作る上で用意してきた関数をパッケージしました。

  • authorize() で認証する処理がシート毎に認証できるように対応
  • Twitterに投稿する postUpdateStatus の処理を postTweet() に集約
  • getRequest,postRequestでAPIを簡単実行
  • スプレッドシートから投稿文を取得する処理

などが集約されています。

TwitterClientの使い方

今回は完全初心者にも分かるようにゼロからの作り方で説明していきます。

スプレッドシートを用意する

まずはベースとなるスプレッドシートを用意します。参考例

余談ですが https://sheet.new から新しいシート作れること知ってましたかー?

GASを用意する

『ツール』から『スクリプトエディア』を選択します。

ライブラリを追加する

表示されたエディタページが開かれると思います。

図のようにファイル名を付けておき、『リソース』→『ライブラリ…』を選択してライブラリを追加していきます。

MtWJFxCibKiP9SvrKBk8a0_EqweE_tvXn

『TwitterClient』が追加されたら保存して完了です。

コードを書く(コピペでOK)

これをコピペしてください!以上!コメントを除くと30行以下だと思います。

「TwitterBotでスプレッドシートの内容を投稿する」であれば最低限これだけでOKです。

CallBack URLを取得する

次にTwitterアプリの用意をするのですが、用意する前にTwitterアプリに登録するために必要なCallbackURLを取得します。

画像の手順で getCallbackUrl を実行するとログに

https://script.google.com/macros/d/[SCRIPT_ID]/usercallback

という形式のURLが取得されるのでメモを取っておきます。

Authorization required が出た場合

初回実行時、私が作ったライブラリにアクセスするために認証が必要です。

上記のポップアップが出た場合、『許可を確認』を選択してください。

ここまで来たら後は諸々許可してください。

ステートメントの前に:がありません が出た場合

今回のコードは新しいApps Scriptランタイムを使用しています(constやclassを使える機能)

そのため、新しいランタイムが無効になっていると「class?なにそれ?エラーだ!」となってしまいます。

「ステートメントの前に:がありません」というエラーが出た場合、『実行』→『新しい Apps Script ランタイムを有効にする』を選択して、改めて実行してみてください。

Twitterアプリを用意する

Twitterの開発者ページからTwitterアプリを作ります。

Developer
Tap into what's happening. Publish and analyze Tweets, optimize ads, and create unique customer experiences.

Twitterのアカウントを持っているのであれば右上のSign Inからサインインしてください(既にサインインされているかも?)

右上のAppsからアプリ画面を表示してアプリを作ります。

こちらの記事でTwitterアプリを作っているので参考にどうぞ。

↑の記事ではcallbackURLがブログのURLになっていますが、そこには先程取得したcallbackUrlを登録するようにしてください。

※ Twitterアプリ開発者登録が済んでいない場合

以下の記事を参考にアカウント登録を行ってみてください(手抜き)

Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報 - Qiita
本投稿の背景 ※申請画面が初投稿時(2018年9月)と変わってましたので、内容を更新しました ※2019年8月時点の情報となります Python Twitterからツイートを取得してテキスト分析(wordcloudで見える化)...

Consumer Key をGASに登録する

GASの方に戻って、作ったTwitterアプリのConsumerKeyを登録します。

const consumerKey = 'CONSUMER_KEY'
const consumerSecret = 'CONSUMER_SECRET'

Twitter認証を行う

authorize を選択してTwitterの認証を行います。

authorizeを実行→『表示』→『ログ』で表示されたURLで認証を行ってください。

APIを実行する(投稿の動作確認)

postTweetで投稿するAPIを実行します。

/**
 * ③ APIを実行する(この辺はアレンジしてください)
 * ※この処理では「シート1」から投稿内容を取得してツイートしてます
 */
function postTweet () {
  // pickUpTweetInOrderは用意しました
  let message = TwitterClient.pickUpTweetInOrder('シート1');
  client.postTweet(message);
}

順番に投稿するBotを作りたい場合、 順番用参考例 を参考にしてシートを作りこちらの処理をそのままご利用ください。

ランダムに投稿するBotを作りたい場合、pickUpRandomを用意しましたので、ランダム用参考例 を参考にシートを作り、

TwitterClient.pickUpTweetRandom('シート1');

をご利用ください。

繰り返し実行を設定する

ここまででTwitterBotが完成しました。

最後に繰り返し実行の設定を行います。

以前同じ設定を紹介しているのでこちらを参考にどうぞ!

TwitterBotの機能を拡張する

別のTwiiterAPIを実行する

このライブラリの目的は簡単にTwitterBotを作るだけではなく、やりたいことを直感的に出来るようになることです。

そのため、TwitterAPIを実行しやすいようなメソッドを用意しました。

client.getRequest(url, param);
client.postRequest(url, param);
GET statuses/user_timeline

↑のようにTwitterのAPIを実行するためには Resource URLParameters が必要です。

このメソッドがGETであれば client.getRequest を利用してください。

例として自分のツイートをいいねする処理を書いてみました。

function favorite () {
  // ユーザーのタイムラインを取得
  let getTweetUrl = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
  let getTweetParam = {
    screen_name: 'belltreeszk',
    count: 1
  }
  // GETリクエストを実行
  let getTweetResult = client.getRequest(getTweetUrl, getTweetParam);
  
  // いいねを付ける
  let favoriteUrl = 'https://api.twitter.com/1.1/favorites/create.json';
  let favoriteParam = {
    id: getTweetResult[0]['id_str']
  }
  // POSTリクエストを実行
  let favoriteResult = client.postRequest(favoriteUrl, favoriteParam);
  Logger.log(favoriteResult);
}

① URLをセット
② パラメータをセット
③ getRequestかpostRequestを実行
④ 受け取った結果を次の処理の ①〜③ に利用する

という流れの繰り返しでメソッドを作ることが出来ます。

GETやPOSTの処理を書いていたり、実行したいAPIによってパラメータの形式を悩まないために形式が共通になるようになっています。

便利だと思ったメソッドはTwitterClientに入れてもらってもOK

ソースコードは下記にまとめています。

belltreeSzk/TwitterClient
GASを使ってTwitterBotを作る際に便利なライブラリ. Contribute to belltreeSzk/TwitterClient development by creating an account on GitHub.

GitHubで管理しているのでプルリクしてくれれば適当にライブラリも更新します(おい

TwitterのAPIに関係するものは TwitterClient.gs
スプレッドシートに関係するものは Utility.gs

に変更を加えてください。

ベースは作った。あとは任せた。

これまで TwitterWebService を利用してきましたが、微妙に使いにくい部分もあったので、自分の中ではより良いものを作ったつもりです。

場合によっては使いにくいこともあると思います。

その時はいい感じに直すなり、TwitterWebService を使うなり、上手くバランスを取ってほしいなぁと思います。

もちろん引き続き連絡してもらえれば回答・相談には乗りますのでお気軽にご連絡ください。

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

コメント

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