[GASでTwitter投稿]GASでTwitterに自動投稿してみた!

2021年6月18日

みなさんこんにちは。エンジニアのはるまきです。今回はGAS(GoogleAppsScript)を使用してTwitterに自動投稿をこ試みました。ソースコードも貼り付けてますので、ご自身の認証キーに置き換えれば動くかと思います!

GASとは?

GASについてはこちらで簡単にですが説明していますので、参考にしてみてください。

要は、Googleが実行環境まで用意してくれているScriptです。スプレッドシートを編集したり、外部APIを叩けたりします。しかも無料!

TwitterのAPIを叩く

さっそくTwitterのAPIを叩こうと思います。

しかし、TwitterのAPIは制限が厳しく申請しないとリクエストすらできません。なのでまずは申請をしましょう。

Twitterに申請する

申請がかなりやっかいです。なぜAPIを使いたいのか?APIを使用して何がしたいのかを鮮明に記述して申請しないといけません。それも英語で。。。。!申請に関してはこちらの記事を参考にしました。ご参考にしてください。

僕の場合は、初めの申請で落ちました。理由はわかりませんw 申請の際に記述していたのは「練習のためにAPIを使いたいんだ。同僚を見返すためにこれが必要なんだ。やらせてほしい。」とかだったと思います。笑

申請に落ちた場合はメールが届きます。メールに返信する形で改めて詳しく理由等を記述し再申請したら無事に通りました。

GASを使ってツイートを試みる

GASを使います。GASはclaspという環境(?),コマンド(?)を使って外部から編集できます。つまりVSCodeなどでローカルで編集できます。僕は便利なのでそれを使っています。

認証周りはこちらの記事を参考にしました。

実際のコードは以下です。GASでpostTweetを実行してください。

// 認証用URL取得
function getOAuthURL() {
  Logger.log(getTwitterService().authorize());
}

function getTwitterService() {
  return OAuth1.createService('twitterのアカウント') //'hoge0103_goodinfo'
    .setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
    .setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
    .setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
    .setConsumerKey("カスタマーキーに置き換える") // 'KbharklgbHFDjgase676'
    .setConsumerSecret("シークレットキーに置き換える") //'askfhaefas2387642'
    .setCallbackFunction('authCallback')
    .setPropertyStore(PropertiesService.getUserProperties());
}

function authCallback(request) {
  var twitterService = getTwitterService();
  var isAuthorized = twitterService.handleCallback(request);
  if (isAuthorized) {
    return HtmlService.createHtmlOutput('認証が正常に終了しました');
  } else {
    return HtmlService.createHtmlOutput('認証がキャンセルされました');
  }
}

function doGet(e) {
  var twitterService = getTwitterService();
  var template;
  if (!twitterService.hasAccess()) {
    var authorizationUrl = twitterService.authorize();
    template = HtmlService.createTemplateFromFile("index");
    template.authorizationUrl = authorizationUrl;
  } else {
    template = HtmlService.createTemplateFromFile("completed");
  }
  return template.evaluate();
}

function postTweet() {
  var twitterService = getTwitterService("twitterのアカウント"); //'hoge0103_goodinfo'
  var options = {
    "method": "post",
    "payload": {
      status: "ここに自動ツイートの内容を書き込む"
    }
  };
  var response = JSON.parse(twitterService.fetch('https://api.twitter.com/1.1/statuses/update.json', options));
  Logger.log(response);
}

コピペで、キーやアカウント名をご自身のものに置き換えたらできるかと思います。

記事をみながらやりましたが、ハマった箇所が一つあります。それはV8エンジンを有効にしているとOauthが効かないので認証が通らなかったことです。注意です。V8エンジンは設定画面から無効にすることができます!

V8エンジンはES6構文でかけるので便利ですが、Oauthは対応してないみたいです。

まとめ

初めてTwitter-APIを叩きました。申し込みが一番大変でした。繋がってしまえば色々と応用が聞きそうです。

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

また次回に〜〜〜.