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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

Q&A

0回答

2082閲覧

[Google Apps Script] UrlFetchApp の 正しいレスポンスを得るには?

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

0グッド

1クリップ

投稿2019/11/22 08:23

編集2019/12/02 11:49

エラーメッセージ

https://www.amazon.co.jp のリクエストに失敗しました(エラー: 503)。サーバー応答の一部: <html> <head> <META HTTP-EQUIV="Content-Type" content="text/html; charset=Shift_JIS"> <title> ‚²–À˜f‚ð‚¨‚©‚¯‚µ‚Ä‚¢‚Ü‚·I </title> <style type="tex...(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 2、ファイル「コード」)

応答の全文中のコメント

Amazonデータへの自動アクセスについては、api-services-support @ amazon.comにお問い合わせください。

APIへの移行については、https://developer.amazonservices.jp/ref=rm_5_svのMarketplace API、またはhttps://affiliate.amazon.co.jp/gp/advertising/apiのProduct Advertising APIを参照してください。 /detail/main.html/ref=rm_5_acはユースケースの広告用です。

当該エラー発生コード

Google

1function testFunc() { 2 var response = UrlFetchApp.fetch('https://www.amazon.co.jp/dp/4800288487/'); 3}

成功例

Google

1function testFunc() { 2 var response = UrlFetchApp.fetch('https://twitter.com/yuzutadashi2/status/1197741551813685251?s=20'); 3}

実際のコード

Google

1// Amazon商品を取得する 2function getAmazonPrdcts(label, linkUrl, row) { 3 4 // スプレッドシートを取得する 5 var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();// Container Bound Script 6 var sheet = spreadsheet.getSheets()[0];// シート数を指定して取得 7 8 // ASINコードを取得する 9 if (linkUrl.match(/dp/.{10}/)) { 10 var asin = linkUrl.match(/dp/.{10}/)[0].replace(/dp/(.{10})/, '$1'); 11 } else if (linkUrl.match(/product-reviews/.{10}/)) { 12 asin = linkUrl.match(/product-reviews/.{10}/)[0].replace(/product-reviews/(.{10})/, '$1'); 13 } 14 15 // 商品ページを設定する 16 var prdct_URL = 'https://www.amazon.co.jp/dp/'+ asin +'/'; 17 18 // Getリクエストのパラメータ 19 var options = { 20 method: "get" 21 }; 22 // 商品ページを取得する 23 var reply = url_Request(prdct_URL, options);// 1. URLそのままを取得 24 var response = reply[0]; 25 var errorMsg = reply[1]; 26 // 商品ページを取得できなかったとき 27 if (response == undefined) { 28 sheet.getRange(row, 5).setValue(errorMsg);// エラーを書き出す 29 return ['', '', '']; 30 } 31 32 // 文字コードを指定して商品ページを取得する 33 var charset = '', src1 = response.getContentText();// 2. 文字列エンコードされた内容を取得 34 if (src1.match(/meta charset="[\s\S]*?"/)) { 35 charset = src1.match(/meta charset="[\s\S]*?"/)[0].replace(/meta charset="([\s\S]*?)"/, '$1') 36 } 37 var src2 = response.getContentText(charset);// 3. 文字コードを指定して内容を取得 38 if (src2.match(/<span id="productTitle" class="a-size-large">[\s\S]*?</span>/)==null) { 39 return ['', '', '']; 40 } 41 var prdctTitle = src2.match(/<span id="productTitle" class="a-size-large">[\s\S]*?</span>/)[0] 42 .replace(/<span id="productTitle" class="a-size-large">([\s\S]*?</span>)/, '$1') 43 .replace(/&#10;/g, '\n').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&') // [HTML特殊文字] 改行, '<', '>', '&' 表示を 文字変換する 44 .replace(/&quot;/g, '"').replace(/&#39;/g, "'") // '"', "'" 表示を 文字変換する 45 .replace(/&#8210;/g, '‒').replace(/&#8211;/g, '–').replace(/&#8212;/g, '—').replace(/&#8213;/g, '―') // '‒', '–', '—', '―' 表示を 文字変換する 46 .replace(/&#8275;/g, '⁓').replace(/&#12316;/g, '〜').replace(/&#12336;/g, '〰') // '⁓', '〜', '〰' 表示を 文字変換する 47 .replace(/&period;/g, '.');// '.' 表示を 文字変換する 48 49 // メディアアイコンを設定する 50 var mediaIcon = '????'; 51 52 // ツイート内のユニコードを分解しないように配列に分ける 53 var shortPrdctTitleArray = prdctTitle.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\s\S]/g) || []; 54 // ツイート44文字(43+'…')に収めて連結する 55 if (shortPrdctTitleArray.length > 44) { 56 shortPrdctTitleArray.splice(43, shortPrdctTitleArray.length-43);// 0開始n番目からn個削除 57 var shortPrdctTitle = mediaIcon + shortPrdctTitleArray.join('').replace(/\s*$/, '') +'…'; 58 } else { 59 shortPrdctTitle = mediaIcon + shortPrdctTitleArray.join(''); 60 } 61 62 // リンクURLを高評価カスタマーレビューページに設定する 63 linkUrl = 'https://www.amazon.co.jp/product-reviews/'+ asin +'/ref=cm_cr_arp_d_viewopt_sr?ie=UTF8&filterByStar=positive&reviewerType=all_reviews&pageNumber=1'; 64 65 // 商品画像URLを取得する 66 var image_URL = ''; 67 if (src2.match(/"mainUrl":".*?"/)) { 68 image_URL = src2.match(/"mainUrl":".*?"/)[0].replace(/"mainUrl":"(.*?)"/, '$1'); 69 } else if (src2.match(/data-old-hires=".*?"/)) { 70 image_URL = src2.match(/data-old-hires=".*?"/)[0].replace(/data-old-hires="(.*?)"/, '$1'); 71 } 72 73 return [shortPrdctTitle, linkUrl, image_URL]; 74} 75 76 77// パラメータを使用してURLを取得する 78function url_Request(url, options) { 79 // URL取得 or FetchAppエラー10回 したら抜ける 80 for (var i=0; i < 10; i++) { 81 try {// 主処理 82 var response = UrlFetchApp.fetch(url, options); 83 } catch (e) {// エラー処理 84 var errorMsg = e; 85 if (e.toString().match(/エラー: 404/)) { break; } 86 Utilities.sleep(7 * 1000);// 7秒 87 } 88 if (response != undefined) { break; } 89 } 90 // URLを取得できなかったら undefined が返る 91 return [response, errorMsg]; 92}

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

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

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

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

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

macaron_xxx

2019/11/25 05:34

Amazonデータへの自動アクセスについては、api-services-support @ amazon.comにお問い合わせください。 APIへの移行については、https://developer.amazonservices.jp/ref=rm_5_svのMarketplace API、またはhttps://affiliate.amazon.co.jp/gp/advertising/apiのProduct Advertising APIを参照してください。 答えが書いてあるじゃないですか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問