かなり高額でバランスが悪いTwitterAPIの有料化が行われて、いろいろなサービスが終了していきます。使っていたWordPressのプラグインもサービスが終了の模様。
そのためTwitter APIのfree版でGASで運用する簡単なコードを休憩時間に書いています。覚書のめもという感じでツラツラとまとめていきます。
目次
- 1 twitter botの作り方!【非エンジニア用と外注化】
- 2 GAS(Google Action Script)でtwitter botの作り方!ツイートする【プログラマ向け】
- 3 GAS(Google Action Script)でtwitter botの作り方!サンプルコード(v2)
- 4 GAS(Google Action Script)でtwitter botの作り方!サンプルコード(v1)
- 5 GAS(Google Action Script)のエラー
- 5.1 アプリにアクセスを許可できません。 前に戻ってもう一度ログインしてください
- 5.2 unauthorized_client, Missing valid authorization header
- 5.3 Exceeded maximum execution time
- 5.4 SyntaxError: Identifier ‘spreadsheet’ has already been declared
- 5.5 Exception: Already setting up a recurring clock trigger.
- 5.6 You are not allowed to create a tweet with duplicate content
- 6 GAS(Google Action Script)でtwitter botの作り方!ツイートする(参考動画)
twitter botの作り方!【非エンジニア用と外注化】
プログラム抜きでTwitter Botを作りたい人の検索流入があるようなのでこちら追記しておきます(追記)。ココナラならある程度好きなように要望を聞いてもらえますよ。
Gas(Google Action Script)を使うと、ココナラで結構安価に外注化できるのですね!忙しい人はこちらでもいいかもしれませんね。
GASでTwitterの自動投稿のbotを作ってくれそうな人
うまくキーワードを絞りこむとそれっぽい人がでてきます。
GAS Twitter API スプレッドシート
その他は、TwitterAPIのenterpriseを導入したソーシャルドックなどですかね。こちらはノンプログラマー向けの記事なので非エンジニアの方はこちらの記事をみてください。
Twitter API Freeでは読み込みができませんので、フォロワーの管理をしたいのならソーシャルドックという選択肢があります。
実はIFTTT PROでも予約投稿はできます。WordPressからTwitterも新規投稿でよければできるはず。
GAS(Google Action Script)でtwitter botの作り方!ツイートする【プログラマ向け】
Twitterの自動投稿にGasを選んだ理由
Pythonなどでも作れます。ただ、Gasの方が手軽そうだったので。Gasを選んだ理由は次のとおりです。
- サーバーを用意する必要がない
- Googleのサービスなのでスプレットシートとの安定的な連携
- 無料
- 言語がJavaScript(個人的にJavaScriptは多少書いていたので)
- プログラミングで書くと自分の好きなようにカスタマイズできる
Free APIの移行方法とOAuth
APIの設定やfree版で提供されている機能、OAuthについては、こちらの記事をみてください。
GAS(Google Action Script)のTwitter BOTの本・動画
GASをはじめて触る人は参考書を検討するかもしれません。
Udemyの「独学で身につけるGAS(Google Apps Script)〜基礎編〜【業務効率化・自動化で残業を無くそう!】」の番外編にTwitterの解説がありましたよ。初心者向けの教材です。
個人的に初心者向きの講座な気がして未購入なので中身はわかりません。Udemyのヘビーユーザーのためいろいろと記事を書いています。
GAS(Google Action Script)からTwitterにアクセスするスクリプトIDはどこ?
githubにのっていました。OAuth1は外部サイトにアクセスするためのライブラリです。Googleが公開しています。Twitterアクセスのサンプルソースがあります。
In the “Find a Library” text box, enter the script ID
https://github.com/googleworkspace/apps-script-oauth11CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s
and click the “Select” button.
ライブラリ + > スクリプトIDをいれて検索 > OAuth1とでればOK > [追加]をおします。
OAuth2はこちらです。
In the “Find a Library” text box, enter the script ID
https://github.com/googleworkspace/apps-script-oauth21B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
and click the “Select” button.
GAS(Google Action Script)にTwitterのキーを設定する
直接ソースに書くのは微妙なので、こちらにかきます。
歯車アイコンのプロジェクト設定 > スクリプトプロパティを追加
次の4つです。v1の場合。
- CONSUMER_API_KEY
- CONSUMER_API_SECRET
- ACCESS_TOKEN
- ACCESS_TOKEN_SECRET
v2の場合はこちら!
CLINET_ID
CLIENT_SECRET
こんな感じで呼び出します。
const scriptProps = PropertiesService.getScriptProperties();
const clientId = scriptProps.getProperty('CLIENT_ID');
const clientSecret = scriptProps.getProperty('CLIENT_SECRET');
console.log('clientId', clientId)
console.log('clientSecret', clientSecret)
Twiitterの管理画面にcallbackurlを指定
コールバックとは呼び出し後、コールバックしてその結果が受け皿に戻ってきます。GASからTwitterを呼び出し、TwitterがコールバックしてGASに戻るわけです。そのurlの指定を管理画面に行います。
v2は必要です。GASのアドレスでIDをみます。
https://script.google.com/home/projects/[ID]/edit
callback用のアドレスに書き換えます。
https://script.google.com/macros/d/[ID]/usercallback
Twitterの管理画面に張り付けます。
半角スペースなどが入っていると無効になるため要注意です。
サイドバーの[アプリ名] > User authentication settingsの[Edit] > App info>Callback URI
デバッグ時に権限の確認
はじめてgasを[実行]すると外部のアクセスは権限の許可が必要なようです。許可します。
デバッグ > 権限の確認 > 該当メールアドレスでログイン > 詳細 > プロジェクト名(安全ではないページ)に移動) > 許可
gasの関数の実行
デバッグの右に関数を選ぶ箇所があります。動かない凡ミスとして選び間違えがあります。
GAS(Google Action Script)でtwitter botの作り方!サンプルコード(v2)
こちらのやり方で簡単にできました。ありがとうございます。
ほぼ一緒なのでコードは割愛しますが、多少補足しておくとこんな感じです。
- logRedirectUriを実行してurlが正しいのか確認
- mainを実行してauthorizationUrlのurlが表示されるため、そのurlにアクセス(urlをドラックして右クリックから移動できます)。ここが成功すると、Twitter側にアプリが追加されています。
- 最後にpostTwitterのコードを追加して実行します。
ただ、ここからカスタマイズしていかないといけませんからはじまりの一歩ですかね。
GASの日付繰り返し定期実行、その他のノウハウ
長くなったため記事をわけました。
GAS(Google Action Script)でtwitter botの作り方!サンプルコード(v1)
OAuth認証
// OAuth認証
const getTwitterService = function() {
return OAuth1.createService( "Twitter" )
.setAccessTokenUrl( "https://api.twitter.com/oauth/access_token" )
.setRequestTokenUrl( "https://api.twitter.com/oauth/request_token" )
.setAuthorizationUrl( "https://api.twitter.com/oauth/authorize" )
.setConsumerKey( CONSUMER_API_KEY )
.setConsumerSecret( CONSUMER_API_SECRET )
.setAccessToken( ACCESS_TOKEN, ACCESS_TOKEN_SECRET );
}
GASからツイートする
function tweet() {
const twitter = getTwitterService()
if(twitter.hasAccess()) {
const url = "https://api.twitter.com/1.1/statuses/update.json"
const text = "つぶやき"
const payload = {status : text}
const response = twitter.fetch(url, {
method: "post",
payload: payload
})
} else {
console.log(service.getLastError())
}
ここまでで固定文のツイートはできます。
GASからスプレットシートのデータを取得
初回、スプレットシートにアクセスするため権限の許可が求められます。
const spreadsheet = SpreadsheetApp.openById('SPREADSHEET_ID');
const sheetName = spreadsheet.getSheetByName("シート名");
function getTweetFromSheet() {
const count = sheetName.getLastRow() -1; //1行目がタイトルのため
const tweetRange = sheetName.getRange(2, 2, count, 1); //開始行,開始列,範囲行,範囲列
const tweetList = tweetRange.getValues();
console.log("tweetList:", tweetList);
}
SPREADSHEET_IDはurlに記載されています。urlのdの後です。
function tweet()をスプレットシートを呼び出すように変更します。
// const text = "つぶやき"
const text = getTweetFromSheet()
もちろん配列なので、そのままやると問題があり、このあたりは作り方を検討していきます。
本当に初歩の初歩でしたが、参考になれば幸いです。個人的にもこれから設計していきます。
GAS(Google Action Script)のエラー
アプリにアクセスを許可できません。 前に戻ってもう一度ログインしてください
Twitterで認証する際にでるエラーです。
アプリにアクセスを許可できません。 前に戻ってもう一度ログインしてください
CLINET_IDとCLIENT_SECRET
のいずれか、あるいは両方が間違っているため修正するととおります。
この問題もCLIENT_SECRET
を再生成で通りました。
unauthorized_client, Missing valid authorization header
I was able to resolve by resetting my environment variables for the Twitter Client ID and Secret and then restarting the dev server.
https://stackoverflow.com/questions/74498352/getting-unauthorized-client-missing-valid-authorization-header-in-return-on-tw
Exceeded maximum execution time
Exceeded maximum execution time
最大実行時間は6分のようです。Gasにデータを読み込んで実行する場合、作りが悪いとひっかりそうです。このルールも基本のようなので覚えておきます。
SyntaxError: Identifier ‘spreadsheet’ has already been declared
SyntaxError: Identifier 'spreadsheet' has already been declared
重複しているようです。コピペで移植すると起こりやすい!別の.gsファイルをコメントアウトしたら改善されました。
Exception: Already setting up a recurring clock trigger.
Exception: Already setting up a recurring clock trigger.
トリガーがまだ設定されているようです。
既存のトリガーを削除してから新しいトリガーを設定する必要がありそうです。下記のようなコードを書いたら解決しました。
// 既存のトリガーを削除
const triggers = ScriptApp.getProjectTriggers();
for (let i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === "post") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
削除したのちに新しいトリガーを設定します。
You are not allowed to create a tweet with duplicate content
Twitterは重複投稿はダメですね。
You are not allowed to create a tweet with duplicate content
- 日付を追加する
- 前の投稿を削除する
- かなり間隔をあける
- 自分のツイートをリツイートにする(月額100ドルの有料プランになります)
ほか、何らかの工夫が必要です。
/
GAS(Google Action Script)でtwitter botの作り方!ツイートする(参考動画)
こちらの動画がわかりやすいのではないでしょうか。
最初のとっかかりとして参考にさせてもらいました。ありがとうございます。
コメント