javascript

GASでTwitterを動かすまでの手順

GASでTwitterAPIを叩くことで自動でツイート・DMさせたりする方法を紹介します。

Botの簡単な仕組み

Twitterのアカウントの中には人力ではなくプログラムで動くアカウント、所謂Botと呼ばれるものがあります。具体的な手順の説明に入る前の導入として、そのBotがどのような仕組みで動いているかについて簡単に触れておこうと思います。

そもそも皆さんはTwitterアプリを利用してツイートなどを行っていることと思いますが、あれはアプリを経由してTwitterAPIが叩かれています。同様にBotはアプリではなくプログラムから直接TwitterAPIを叩くことで動いています。

簡単にはなりますがこんな感じです。そしてGASでTwitterBotを動かすには次のような大きく分て以下2つの工程が必要です。

・TwitterAPI利用の認証を行う
・GASでTwitterAPIを叩く

この二つの工程に分けて説明をしていきます。

TwitterAPI利用の認証

前準備的な位置付けです。

1. アクセストークンとシークレットキーを取得する

Google Apps ScriptでTwitter botを作ってみるにて圧倒的に詳しく解説されています。丸投げだと身もふたもないので、一応説明します。https://developer.twitter.com/en/appsからcreate an appを選択。

画像引用: Google Apps ScriptでTwitter botを作ってみる

画像引用: Google Apps ScriptでTwitter botを作ってみる

引用: Google Apps ScriptでTwitter botを作ってみる

Callback URLs

https://script.google.com/macros/d/[GASのスクリプトID]/usercallbackとします。GASのScriptIDはGASエディタのプロパティから調べられます。

GASプロジェクトにTwitterライブラリを導入する

GASプロジェクトにTwitter用のライブラリをインポートします。「リソース」→「ライブラリ」から以下のプロジェクトキーで追加できます。 1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF

認証

  • APIKey
  • APISecretKey

上記の二つの値を使用します。「Keys&Tokens」の「ConsumerKey」の欄にあります。

初回のみツイッタアカウントへの認証作業が必要です。それ以降は認証する必要はありません。以下のように記述し、authorizeメソッドを走らせたあと、CMD + Returnでログを確認します。urlが記述されているはずなので、そのURLにアクセスします。

var twitter = TwitterWebService.getInstance(
  "手順1で取得したAPIKey",
  "手順1で取得したAPISecretKey "
);// 認証
function authorize() {
  twitter.authorize();
}// 認証解除
function reset() {
  twitter.reset();
}// 認証後のコールバック
function authCallback(request) {
  return twitter.authCallback(request);
}

GASでTwitterAPIを叩く

今回はツイートする方法とDMする方法の2つを紹介しています。ちなみにiuアプリでできるほとんどのことはTwitterAPIを利用してできます。今回は割愛しますが、フォローやアンフォローもできます。

ツイートする

tweetStrに渡された文字列ををツイートするようになっています。

function Tweet(tweetStr) {
  var service  = twitter.getService();
  var response = service.fetch("https://api.twitter.com/1.1/statuses/update.json", {
    method: "post",
    payload: { status: tweetStr }
  });
}
Tweet("オラ悟空")  //オラ悟空がツイートされる

DMする

DMのAPIを叩くためには任意のアカウントに紐づくuserIDが必要です。因みにscreenNameとuserIdは別物です。

  • screen_name:
    メンションするときなどにおなじみの「@」から始まる文字列
  • userId: アカウントが作成された際に内部で割り当てられた文字列

詳しくはTwitterAPIの公式ドキュメントを参照してください。 今回紹介するスクリプトはscreennameからuseridを取得し、そのuser_id宛にDMを送信するという挙動となっています

  1. screennameからuseridを取得する
function getUserId() {
  var service = twitter.getService();
  var screenName = "screen_name" //@screen_nameさんにDMを送る場合
  var requestURL = "https://api.twitter.com/1.1/users/lookup.json?screen_name=" + screenName
  var response = service.fetch(requestURL, {
    method: "get",
    contentType: 'application/json'
  });
  var o = JSON.parse(response.getContentText());
  var user_id = o[0].id_str //配列で帰ってくるのでそのうちの最初の要素のuser_idを取得する
  
  newDirectMessage(user_id) //後述します
}
  1. user_idに紐づくTwitterアカウント対してDMを送る
function newDirectMessage(user_id){
  try{
    var service = twitter.getService();
    var payload = JSON.stringify({
      event: {
        type: 'message_create',
        message_create: {
          target: {
            recipient_id: String(user_id)  //先ほど取得したuserId
          },
          message_data: { text: "こんにちは" }  //メッセージ内容を定義
        }
      }
    });
    var response = service.fetch('https://api.twitter.com/1.1/direct_messages/events/new.json',{
      method: 'POST',
      contentType: 'application/json',
      payload: payload
    });
    return response;
  } catch(e) {
    Logger.log('Exception:'+e);
  }
}

読んでいただきありがとうございます!!

記事として取り上げたトピックを体系化してまとめた内容を電子書籍として販売しています。購入していただくことで執筆の応援ができます。詳細はこちらから