質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1589閲覧

GASで「https://drive.google.com のリクエストに失敗しました(エラー: 403)。」が発生します

ayameryosaki

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google ドライブ

Google ドライブは、Google社が提供するオンラインストレージサービス。オンラインストレージ上に、画像や動画、テキスト、Word/PDFのファイルなどさまざまなファイル保存することができます。また、他のユーザーと共有することも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/21 05:41

前提・実現したいこと

初めまして。よろしくお願いいたします。

■実現したいこと

GoogleスプレッドシートにGoogleドライブ上に格納した画像ファイルのURLや文章が記載されています。
スプレッドシートへの格納自体には、Googleフォームを使っています。
フォームの送信時に、スプレッドシートに格納された当該URLを取得して、
twitterに自動的に文章と画像を投稿するようにしたいのです。

■前提
実装している機能の全体像としては下記の通り
・Googleフォームでユーザが投稿した内容がGoogleスプレッドシートに格納されている
・投稿(=スプレッドシートに格納された内容)をtwitterで自動的にツイートする
・twitter投稿への権限周りは実装済み。

上手くいく場合と上手くいかない場合があるので困っています。

発生している問題・エラーメッセージ

下記のエラーが発生する場合と発生しない場合があります。

https://drive.google.com のリクエストに失敗しました(エラー: 403)。サーバー応答の一部: <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>Sorry...</title><style> body { font-family: verdana, arial, ...(応答の全文を見るには muteHttpExceptions オプションを使用してください)

下記コードのうち、

GoogleAppScript

1var imgBlob = UrlFetchApp.fetch(imgUrl).getBlob();

で発生しているようですが、発生する場合と発生しない場合の違いについては切り分けができていません。

私からの投稿も、ほとんどはきちんと投稿できますが、稀に上記エラーが発生する場合があります。
他のユーザからの投稿も、投稿できる場合と上記エラーが発生する場合があります。

原因及び回避方法があれば、教えていただけますと幸いです。

該当のソースコード

GoogleAppScript

1 2// 画像のアップロード 3function putImage(imgs) { 4 var twitterService = getService(); 5 if (twitterService.hasAccess()) { 6 7 //画像のURLの格納はスプレッドシート内に「https://drive.google.com/open?id=」の形式で保存しているため前から33文字を削ってIDのみを切り出している 8 var img = imgs.toString().substr(33); 9 var imgUrl = "https://drive.google.com/uc?export=view&id="+img; 10 var endPointMedia = 'https://upload.twitter.com/1.1/media/upload.json'; 11 12 //画像の取得 13 var imgBlob = UrlFetchApp.fetch(imgUrl).getBlob(); 14 var img_64 = Utilities.base64Encode(imgBlob.getBytes()); 15 16 var img_option = { 17 'method' : "POST", 18 'payload': { 19 'media_data': img_64 20 } 21 }; 22 return JSON.parse(twitterService.fetch(endPointMedia, img_option)); 23 } 24}

試したこと

とりあえず今は、下記の通りに追記・修正して、エラーコードが返ってくるのを待っています。
エラーが発生すれば内容はわかるようになると思いますが、
それまでに、もし、何かお気づきの点、もしくはご存知の方がいらっしゃれば
教えていただければと思います。
よろしくお願いいたします。

GoogleAppScript

1 //画像の取得 2 //var imgBlob = UrlFetchApp.fetch(imgUrl).getBlob(); 3 try { 4 var imgBlob = UrlFetchApp.fetch(imgUrl,{muteHttpExceptions:true}).getBlob(); 5 imgBlob.getResponseCode() != 200; 6 } catch(e) {} 7 8 var img_64 = Utilities.base64Encode(imgBlob.getBytes()); 9 //Logger.log("img_64=" + img_64); 10

補足情報(FW/ツールのバージョンなど)

Chrome V8ランタイムは無効にしています。
twitterへの投稿ライブラリはTwitterWebServiceを利用。
画像がない場合には確実に投稿可能です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問