前提・実現したいこと
初めまして。よろしくお願いいたします。
■実現したいこと
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を利用。
画像がない場合には確実に投稿可能です。
あなたの回答
tips
プレビュー