🦆

GASで、Twitter宣伝の定期実行をしよう

2021/10/26に公開

定期実行の場をローカルからクラウドへ

今までPythonでスクリプトを書いたものを、Macのあれこれを使って定期実行する、といった方法をとっていました。

詳細→どうせ起動してるPCを使って、宣伝ツイートを自動でRTする - Qiita

ところが、この運用だと以下のデメリットがあることが運用してから気づきました。

  • Macの電源を落としてる、Bootcampを使っていると定期実行されない
  • ローカル上においてあるので管理が面倒
  • スクリプトごとにPipenv仕込んでるので容量をある程度食う (それはお前の問題だよ)

とにかく、手段としてはローカルすぎるので、クラウドのなんちゃらを使って定期実行できないかなという目的を以ていろいろ探してみました。

一番上に来るのがAWS、なんか難しそうなのでパスします。
なんかいい方法…いい方法…

…待てよ、最近業務で使い始めたGASなら定期実行楽になるんじゃね?

というわけで、GASを使って定期実行のあれこれを整えていきます。

制作環境を整える

普段使っているエディターがVScodeなので、せっかくなら慣れたコイツを使いたいぜ!
…ということで、以下の記事を参考にVScodeでGASが使えるように環境を整備します。

GAS用のCLIツール clasp を使ってGASをローカルで開発して実行するの巻。 - Qiita


# インストール
$ npm install -g @google/clasp

# Googleにログインして情報を引っ張ってくる
$ clasp login

# ローカル作業用フォルダーを用意して移動する
$ mkdir [作業用のフォルダー] 
$ cd [作業用のフォルダー]


# プロジェクト作成
$ clasp create
# ~~
# なんかいろいろ出るので、今回はStandaloneを選択
# ~~

# スクリプトを作成してクラウド側に反映
$ touch main.js
$ clasp push

# 実際どうなってるのかGASの画面を出す
$ clasp open

だいたいこのような流れでVScodeでGASが書けるようになります。
あとは、変更するたびにclasp pushしたり、
単純なものならコピペしたりして対応します。

Pythonで定期実行していたスクリプトをGASに変換する

Pythonで運用していたので、これを基にGASで通じるように書き直します。
Pythonのコードは、どうせ起動してるPCを使って、宣伝ツイートを自動でRTする - Qiita を参考にしてください。


const API_KEY = "";
const API_SECRET = "";
const ACCESS_TOKEN = "";
const ACCESS_TOKEN_SECRET = "";

var tweet_id = "1447156148084174852";

const RT_URL =
    "https://api.twitter.com/1.1/statuses/retweet/" + tweet_id + ".json";

const UNRT_URL =
    "https://api.twitter.com/1.1/statuses/unretweet/" + tweet_id + ".json";

Logger.log(RT_URL);
Logger.log(UNRT_URL);

// Twitter APIの認証とレスポンス取得
function run() {
    var service = getService();
    var options = {
        method: "post",
        muteHttpExceptions: true,
        validateHttpsCertificates: false,
        followRedirects: false,
    };

    if (service.hasAccess()) {
        var res = service.fetch(UNRT_URL, options);
        var res = service.fetch(RT_URL, options);
    } else {
        Logger.log("認証失敗");
        return;
    }
}

function getService() {
    return OAuth1.createService("Twitter")
        .setConsumerKey(API_KEY)
        .setConsumerSecret(API_SECRET)
        .setAccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
        .setAccessTokenUrl("https://api.twitter.com/oauth/access_token")
        .setRequestTokenUrl("https://api.twitter.com/oauth/request_token")
        .setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
}


躓いたところ

tweet_idは横着せずに文字列にしないとエラーを吐きます。

{"errors":[{"code":144,"message":"No status found with that ID."}]}

定期実行トリガーを仕込む

  • GAS左側のメニューからトリガーを選択

  • トリガーを追加をクリックし、条件を記入する

完了

お疲れ様でした。
これをもとに良い定期実行ライフを送ってください。

Discussion