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

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

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

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

Q&A

1回答

15656閲覧

UrlFetchApp.fetchで(エラー: 503)が発生することがある。

hikochang

総合スコア648

Google Apps Script

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

0グッド

2クリップ

投稿2017/02/04 15:56

編集2017/02/08 14:40

###前提・実現したいこと
Google Apps ScriptのUrlFetchApp.fetch でGoogleの検索結果を取得したい。

以下の質問の回答例を作成中にUrlFetchApp.fetchが失敗する現象に遭遇しています。
Google Apps Script(スプレッドシートのスクリプト)にて、site:コマンドでわかるインデックス数を表示したい

UrlFetchApp.fetchが成功した時には上記の質問で実現したいことが実現できるのですが、UrlFetchApp.fetchがに失敗することが多いです。感覚的には1/4の確率でしか成功しません

私自身は特にインデックス数には興味がありませんし、UrlFetchAppも使用しないので特に困っていないのですが、単に興味としてなぜ失敗したり成功したりするのか知りたいです。

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

https://www.google.co.jp/search?hl=ja&q=google.com のリクエストに失敗しました(エラー: 503)。サーバー応答の一部: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html DIR="LTR"> <head><meta http-equiv="content-type" content="text/html; charset=...(応答の全文を見るには muteHttpExceptions オプションを使用してください)(行 74、ファイル「コード」)

###該当のソースコード
Spreadsheetのセルから=getDomainIndex("google.com") と呼ばれることを想定しており、test_getDomainIndexはスクリプトエディタでのデバッグ用です。

Google

1function test_getDomainIndex() { 2 getDomainIndex('google.com'); 3} 4 5function getDomainIndex(domain) { 6 var response = UrlFetchApp.fetch('https://www.google.co.jp/search?hl=ja&q=site:'+domain); 7 var content = response.getContentText(); 8 var index = content. 9 match(/<div class=\"sd\" id=\"resultStats\"[^0-9]*[0-9\,]+/)[0]. 10 match(/[0-9\,]+/)[0]. 11 replace(/\,/g,""); 12 return index; 13}

インデックス数を取得する処理部分ももう少しスマートにできる気がしますが、それについては元の質問に対して回答してあげてください。

###追加で試したこと

// こちらは失敗しない UrlFetchApp.fetch('https://google.co.jp/'); // こちらは失敗が多い UrlFetchApp.fetch('https://www.google.co.jp/search?hl=ja&q=site:google.com');

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

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

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

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

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

guest

回答1

0

エラーコードに、

(応答の全文を見るには muteHttpExceptions オプションを使用してください)

と書いてあったので、オプションを使用してみたら10回中10回成功しました。

JavaScript

1 var options = { 2 muteHttpExceptions:true 3 }; 4 var response = UrlFetchApp.fetch('https://www.google.co.jp/search?hl=ja&q=site:google.com',options);

なぜ、503エラーがこれで解決できるのかはちょっとわかりませんが、、

投稿2017/03/16 17:25

SASAKI_APPL

総合スコア100

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

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

hikochang

2017/03/18 11:54

遅くなりましたが、動作を確認しました。 503エラーについては直りましたが、このリクエストを連続で送るとGoogleに怒られてしまいます、、、 頻度が503エラーと似ているので、これが原因かもしれません。 ただし、ブラウザで手動で連続で検索するのと同じ程度の間隔でスクリプトを実行して確認しましたが 、手動だと常に成功しまうが、スクリプトだと高い頻度でエラーが発生しますね、、、 エラーの抜粋は以下です。 ------------------ ロボットが使用するような高度な検索語を使用したり、リクエストを非常にすばやく送信した場合も、セキュリティ画像の文字を入力するように求められることがあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問