Noël Café : Blog
Noëlの公開備忘録とひとりごと。コメント・トラックバックご自由に

Twitter APIとGoogle Apps Script 連携でツイート Ver.2024 (備忘録)

以前作成した記事( Twitter APIとGoogle Apps Script 連携でツイート (備忘録) )から
TwitterがXになったりとありまして、
投稿に使用しているスクリプトもそのまま使えなくなってしまいました。
ようやく重い腰を持ち上げて対応!
ということで、前回と同じく、かなりわかりにくかったので備忘録としてまとめます。

ざっくりいうとAPI2.0 Ver.にしました。

Step 一覧

Google Apps ScriptでTwitterに投稿する方法を4回に分けて掲載しています。

  1. Twitter API登録方法 (備忘録) ← これはそのまま。
  2. Twitter APIとGoogle Apps Script 連携でツイート Ver.2024 (備忘録) ← 今ココ
  3. Google Apps ScriptでTwitterにスレッド(返信)投稿 Ver.2024 (備忘録)
  4. Google Apps ScriptでTwitterに画像投稿 複数画像も!Ver.2024 (備忘録)

POINT

前回の記事と違っているところです。

  • APIは2を使用 (画像投稿する場合にまだ1を使用する)
  • ↑に伴い認証に使用するライブラリをTwitterWebService.gs → OAuth2に変更

手順

[手順1] Google Apps Scriptを作成する

この項目は前回(2020)と同じです。

Google Driveで新規Google Apps Scriptを作成する。
「新規」→「その他」→「Google Apps Script」
無題のプロジェクトが開きます。
すでにプロジェクトがある場合は適宜対応。

[手順2] ライブラリOAuth2の導入

ライブラリOAuth2の導入
Google Apps Scriptの画面 →「リソース」→「ライブラリ」
ライブラリのプロジェクトキー↓を入力し「追加」

1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF

バージョンは最新、Dev.Modeは無効でOK

googleworkspace / apps-script-oauth2 at GitHub

[手順3] Chrome V8を搭載した新しいApp Script ランタイムを有効にする

Chrome V8を搭載した新しいApp Script ランタイムを無効にしていた場合は有効にしてOK。
Google Apps Scriptの画面 →「実行」から設定できる。
以前はTwitterWebService.gsを使用していたため有効にできなかった。

[手順4] 連携認証のスクリプトを入力

連携認証のスクリプトを入力
とりあえず何も考えずに入力(笑)。
Client IDとClient Secretは次項以降で確認する。

// 設定
const twi_client_id = ‘XXXXX’;
const twi_client_secret = ‘XXXXX’;

// Twitter(X) OAuth2認証
function getTwitterService2_() {
  var userProps = PropertiesService.getUserProperties();
  return OAuth2.createService(‘Twitter’)
      .setAuthorizationBaseUrl(‘https://twitter.com/i/oauth2/authorize’)
      .setTokenUrl(‘https://api.twitter.com/2/oauth2/token’)
      .setClientId(twi_client_id)
      .setClientSecret(twi_client_secret)
      .setCallbackFunction(‘twiAuth2Callback_’)  // コールバック関数名
      .setPropertyStore(userProps)
      .setScope(‘users.read tweet.read tweet.write offline.access’)
      .generateCodeVerifier()
      .setTokenHeaders({
        ‘Authorization’: ‘Basic ‘ + Utilities.base64Encode(twi_client_id + ‘:’ + twi_client_secret),
        ‘Content-Type’: ‘application/x-www-form-urlencoded’
      });
}

// OAuth2コールバック
function twiAuth2Callback_(request) {
  var service = getTwitterService2_();
  var isAuthorized = service.handleCallback(request);
  if (isAuthorized) {
    return HtmlService.createHtmlOutput(‘Success! You can close this tab.’);
  } else {
    return HtmlService.createHtmlOutput(‘Denied. You can close this tab.’);
  }
}

// OAuth2認証用URL取得
function getTwiOAuth2URL() {
  Logger.log(getTwitterService2_().getAuthorizationUrl());
}

// OAuth2リセット
function resetTwiOAuth2() {
  getTwitterService2_().reset();
}

ちなみに画像投稿する時はOAuth1を使用することになるのでOAuth2と明示した。

[手順5] 作成してあるTwitter APIの内容を確認

この項目は前回(2020)と同じです。

APIを作成していない場合は新規作成する。
Permission(権限)を確認する
Twitter Developer Portal → Projects & Apps から該当Appを開く
Settingsの中にあるApp permissionsのEditから開きやることを選ぶ。

[手順6] Twitter Client ID, Client Secretを入手

Twitter API keyとAPI secret keyを確認し上のコードのxxxxxxxx部分に入力する。
Twitter Developer Portal → Projects & Apps から該当Appを開く
「OAuth 2.0 Client ID and Client Secret」にある。
必要に応じて再作成する。
ついでに他のところも問題なさそうか確認する。

ちなみに2020の記事ではこの部分はAPI Key, API Secretだった。

[手順7] コールバックURLの入力

この項目は前回(2020)と同じです。

  1. Google Apps ScriptのスクリプトIDを取得
    Google Apps Scriptの画面 →「ファイル」→「プロジェクトのプロパティ」→「情報」→「スクリプトID」
  2. コールバックURLは以下になる
    https://script.google.com/macros/d/スクリプトID/usercallback
  3. Twitter APIの設定画面にあるコールバックURLに上のアドレスを入力しSave
    2020/10/11現在以下にありました。
    Twitter Developer Portal → Projects & Apps から該当Appを開く
    Settings → Authentication settingsのEdit → Callback URLs

[手順8] Google Apps ScriptでTwitterアプリの認証作業

  1. getTwiOAuth2URL関数実行
    Google Apps Scriptの画面 →「関数の選択」で「getTwiOAuth2URL」を選択し実行▶︎
  2. ログから認証用URLを取得
    Google Apps Scriptの画面 →「表示」→「ログ」
    https://api.twitter.comから始まるURL
  3. 認証用URL(上で取得)をブラウザで開く
    認証画面が出るので内容を確認(できること/できないこと)し認証
    成功するとSuccessと表示される。
    閉じてOK。

[手順9] Twitterに投稿

ようやくメイン作業です(笑)。

  1. Google Apps Scriptに以下を追記 
// twitterへ投稿 文字だけ OAuth2
function post_tweet(){
  var my_message = “テスト投稿です。”;
  var service = getTwitterService2_();
  if (service.hasAccess()) {
    var response = UrlFetchApp.fetch(twi_endpoint2, {
      method: ‘POST’,
      ‘contentType’: ‘application/json’,
      headers: { Authorization: ‘Bearer ‘ + service.getAccessToken() },
      muteHttpExceptions: true,
      payload: JSON.stringify({text: my_message})
    });
    var result = JSON.parse(response.getContentText());
    Logger.log(JSON.stringify(result, null, 2));
  } else {
    Logger.log(“Not Authorized”);
  }
}
  1. post_tweet関数実行
    Google Apps Scriptの画面 →「関数の選択」で「post_tweet」を選択し実行▶︎
    これでTwitterに投稿されているはずです。
    また、ログに投稿IDと投稿内容が表示されるはずです。

このスクリプトですが、
function post_tweet(my_message)にしてvar my_messageの行を削除すれば、
同じプロジェクト内から呼び出せる関数になって便利です。

とりあえず今日は文章のみの投稿だけで終わります。

Next Step

次はスレッド投稿(返信)をします。(この記事の公開の1週間後に公開予定。)

Reference

余談

GASで色々やっているのですが、
何らかの使用変更で変わってしまうと動かなくなって、
ブログやInsta.とか書かなくなっちゃうのよね。
ということでぼちぼちブログやInsta.も再開したいなと思います。


Leave a Reply

*


CAPTCHA



Trackback URL