非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Google Apps ScriptでTwitterに投稿する方法

   

前回、Twitter Developerの登録方法について書きました。今回はGoogle Apps Scriptで自動ツイートする方法について書きたいと思います。

 

GASにOAuth認証用ライブラリの追加

OAuth認証用のライブラリを追加します。画面左にある [ライブラリ] の横の [+] ボタンをクリックし、表示されたダイアログの [スクリプトID] ボックスに下記のライブラリIDを入力し、[検索] ボタンをクリックしましょう。

1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s

 

「検索」ボタンをクリックすると、以下のように情報が現れます。「追加」ボタンをクリックします。

 

エディタに戻りますが、左サイドメニューに「OAuth1」と表記されるので確認してください。これで導入完了です。

 

Twitter DeveloperにコールバックURL登録

Twitter DeveloperにコールバックURLを登録します。コールバックとはTwitterでログイン認証が終わったら戻ってくる場所を示します。要するに自身のGASプロジェクトIDを登録するわけです。

GASのエディターの左サイドにある歯車アイコンをクリックします。現れた画面の下の方にスクリプトIDが記載されているのでコピーしましょう。

 

Twitter Developer Portalサイトに行って「Authentication settings」の「Edit」ボタンをクリックします。

https://developer.twitter.com/en/portal/dashboard

 

Callback URLsのところに先程コピーしたスクリプトIDを貼り付けます。下部の「Save」ボタンをクリックして完了です。

 

API KeyとAccess Tokenの取得

次に以下の4つのキーを取得します。GAS側で使うものです。

  • API Key
  • API Secret Key
  • Access Token
  • Access Token Secret

「Keys and tokens」タブを開き、「API Key and Secret」と「Access Token and Secret」の横にある青い「Generate」ボタンをクリックします。ちなみに一度発行していた場合はボタンのテキストが「Regenerate」となっています。もし発行後に忘れてしまった場合はこのボタンで再発行できます。(キーの内容が変わるので注意)

 

ソースコード

最後にGAS側のソースコードになります。このプログラムは以下のサイトを参考に少し手を加えました。とりあえずスプレッドシートを介さずGASだけで完結するよう、ツイート内容はGASのソースコード内に設定しています。スプレッドシートを使う場合は適宜修正してください。

 

以下がソースコードです。頭の4行に各キーを入力してください。

// Twitter API認証情報
var CONSUMER_KEY = 'XXXXXXXXXXX'; // consumer key = API key
var CONSUMER_SECRET = 'XXXXXXXXXXX'; //consumer secret = API secret key
var TOKEN = 'XXXXXXXXXXX';
var TOKEN_SECRET = 'XXXXXXXXXXX';

// Twitter APIの認証とレスポンス取得
function run() {
  var service = getService();
  var tweet = "おはようございます。これはBotです。自動でツイートするプログラムを開発中です。これが表示されたら成功です。"
  if (tweet == '') {
    Logger.log('Tweetが選択できませんでした');
    return false; // 終了
  }
  Logger.log('Tweet Selected : '+tweet);

  if (service.hasAccess()) {
    var url = 'https://api.twitter.com/1.1/statuses/update.json';
    var payload = {
      status: tweet
    };
    var response = service.fetch(url, {
      method: 'post',
      payload: payload
    });
  } else {
    var authorizationUrl = service.authorize();
    Logger.log('URLを確認してください: %s',
        authorizationUrl);
  }
} 

function doGet() {
  return HtmlService.createHtmlOutput(ScriptApp.getService().getUrl());
}

// 認証リセット関数。デバッグ時の初期化用。
function reset() {
  var service = getService();
  service.reset();
}

// サービス設定
function getService() {
  return OAuth1.createService('Twitter')
      .setConsumerKey(CONSUMER_KEY) // コンシューマーキー&シークレット
      .setConsumerSecret(CONSUMER_SECRET) // コンシューマーシークレット
      .setAccessToken(TOKEN, TOKEN_SECRET) // アクセストークンキー&シークレット

      // oAuthエンドポイントURL
      .setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
      .setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
      .setAuthorizationUrl('https://api.twitter.com/oauth/authorize')

      .setCallbackFunction('authCallback') // コールバック関数名 
}

// OAuthコールバック
function authCallback(request) {
  var service = getService();
  var authorized = service.handleCallback(request);
  if (authorized) {
    return HtmlService.createHtmlOutput('成功しました');
  } else {
    return HtmlService.createHtmlOutput('失敗しました');
  }
}
 

 

実行結果

上記ソースコードを実行しましょう。以下のようにツイートされていたら成功です。(捨て垢なのでアカウント隠します…)

 

実行ログはこんな感じです。実行時間は1秒程度でした。

 

スポンサーリンク

 - Google Apps Script