Google Apps ScriptからTwitterAPIを使用して、BOTを作成しようとしているのですが、画像ファイルを投稿する部分でうまくいかない状況です。
下記エラーの対応方法と、画像ファイル投稿方法についてご教示いただけますと幸いです。
実行環境
■Google Apps Script
■Twitter API
■Googleスプレッドシート
■Googleドライブ
実施内容
Googleスプレッドシート内に記載した画像ファイルのIDを取得して、Twitter上に自動ツイートするスクリプトを記載しております。
対象の画像ファイルはGoogleドライブにアップロード済みです。
TwitterAPI認証用スクリプト // 認証用URL取得 function getOAuthURL() { Logger.log(getService().authorize()); } // サービス取得 function getService() { 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(PropertiesService.getScriptProperties().getProperty("CONSUMER_API_KEY")) .setConsumerSecret(PropertiesService.getScriptProperties().getProperty("CONSUMER_API_SECRET")) .setCallbackFunction('authCallback') // 認証情報をプロパティストアにセット(これにより認証解除するまで再認証が不要になる) .setPropertyStore(PropertiesService.getUserProperties()); } // 認証成功時に呼び出される処理を定義 function authCallback(request) { var service = getService(); var authorized = service.handleCallback(request); if (authorized) { return HtmlService.createHtmlOutput('success!!'); } else { return HtmlService.createHtmlOutput('failed'); } }
testBot2の関数を実行しようとするとエラーが発生します
スプレッドシート画像ファイル、ツイート内容取得用 function testBot2(){ const activeSheet = SpreadsheetApp.getActiveSheet(); const lastRow = activeSheet.getLastRow(); for(let i = 2; i <= lastRow; i++){ //getValue()で対象のセルの値をチェック //セル内が空の場合はfalse、文字列が1以上の場合はtrueとなる var sell = activeSheet.getRange(i,5); if(!sell.getValue()){ sell.setValue(true); //本文と画像の変数 var tweetBot = activeSheet.getRange(i,4).getValue(); //下記、エラー原因行1 //ファイルのIDはスプレッドシートのセル(i,3)に記載しており、その値を取得して、変数に格納しようとしております var tweetCapture = DriveApp.getFileById(activeSheet.getRange(i,3).getValue()); //画像の取得 //エラー原因行2 //下記UrlFetchApp.fetchの引数にtweetCapture を指定。ここでエラーが発生 var imgUrl = UrlFetchApp.fetch(tweetCapture).getBlob(); var imgCapture = Utilities.base64Encode(imgUrl.getBytes()); //ツイート用の関数にメッセージと画像ファイルが格納された変数の引数を渡している toTweet(tweetBot,imgCapture); if(i >= lastRow){ activeSheet.getRange(2,5,lastRow - 1).clearContent(); } break; } } }
ツイート用のAPIを起動する関数 function toTweet(tweetBot,imgCapture) { var endPointStatus = 'https://api.twitter.com/1.1/statuses/update.json'; var endPointMedia = 'https://upload.twitter.com/1.1/media/upload.json'; var twitterService = getService(); if (twitterService.hasAccess()) { // 投稿 var twMethod = { method:"POST" }; twMethod.payload = { status: tweetBot }; //TwitterAPIはJSONでファイルを取得している var img_option = { 'method' : "POST", 'payload': { 'media_data': imgCapture } }; //JSONをパースしてGASで使用する準備をする var image_upload = JSON.parse(twitterService.fetch(endPointMedia, img_option)); var sendoption = { 'status' : tweetBot, 'media_ids': image_upload[media_id_string] }; //twitterService.fetch(endPointStatus, {method: 'post', payload: sendoption}); Twitter.api('statuses/update',sendoption); Logger.log(response.getContentText()); } else { Logger.log(twitterService.getLastError()); } }
エラー内容
Exception: DNS エラー: http://ファイル名.png(行 99、ファイル「コード」)
99行目のコード
//testBoxt2関数内の var tweetCapture = DriveApp.getFileById(activeSheet.getRange(i,3).getValue()); var imgUrl = UrlFetchApp.fetch(tweetCapture).getBlob();
対象ファイルのIDからURLを確認している処理と認識しており、そのURLが誤ったものになっているため、
エラーが発生していると考えております。
https~を取得すべき部分が、httpで取得しようとしているためエラーが出ている可能性を考えてます。
お手数ですが、上記エラーの対処方法、また、可能であれば、上記TwitterAPIのスクリプトをあまり理解できていないため、
画像ファイルの投稿スクリプトも合わせてご教示いただけますと幸いです。
どうぞよろしくお願いします
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/21 18:45