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

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

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

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

Google スプレッドシート

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

Google Apps Script

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

JavaScript

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

Q&A

解決済

1回答

2754閲覧

PhantomJsCloudのAPIキーを取得するところでエラーが出る

Risney

総合スコア148

Google+

Google+とは、Googleが提供するソーシャル・ネットワーキング・サービスです。情報を共有するユーザーの範囲を設定する「サークル」、Webカメラで複数名の相手と無料でビデオチャットできる「ハングアウト」などの機能があります。

Google スプレッドシート

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

Google Apps Script

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

JavaScript

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

0グッド

1クリップ

投稿2022/08/27 16:56

編集2022/08/28 14:11

前提

PhantomJsCloudで動的なWebページをスクレイピングしたいが、
PhantomJsCloudのAPIキーを取得するところでエラーが出てしまう。

実現したいこと

PhantomJsCloudで動的なWebページをスクレイピングする

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

error

1Exception: Request failed for https://phantomjscloud.com returned code 400. Truncated server response: {"name":"HttpStatusCodeException","message":"Invalid URL innerException: The \"url\" argument must be of type string. Received an instance of Arr... (use muteHttpExceptions option to examine full response) 2 3phantomJSCloudScraping @ コード.gs:114

↓和訳
例外です。https://phantomjscloud.com のリクエストに失敗し、コード 401 を返しました。サーバーの応答は切り捨てられています。{"name": "HttpStatusCodeException", "message": "invalid Api Key. a-demo-key-with-low-quota-per-ip-address' を使用するか、アカウントを作成してください。 innerEx... (muteHttpExceptions オプションでフルレスポンスを確認)

該当のソースコード

javascript

1function phantomJSCloudScraping(URL) { 2 //スクリプトプロパティからPhantomJsCloudのAPIキーを取得する 3 let key = PropertiesService.getScriptProperties().getProperty('PHANTOMJSCLOUD_ID'); 4 //HTTPSレスポンスに設定するペイロードのオプション項目を設定する 5 let option = 6 { 7 url: URL, 8 renderType: "HTML", 9 outputAsJson: true 10 }; 11 //オプション項目をJSONにしてペイロードとして定義し、エンコードする 12 let payload = JSON.stringify(option); 13 payload = encodeURIComponent(payload); 14 //PhantomJsCloudのAPIリクエストを行うためのURLを設定 15 let apiUrl = "https://phantomjscloud.com/api/browser/v2/" + key + "/?request=" + payload; 16 //設定したAPIリクエスト用URLにフェッチして、情報を取得する。 17 let response = UrlFetchApp.fetch(apiUrl); ←ここでエラーになります。 18 //取得したjsonデータを配列データとして格納 19 let json = JSON.parse(response.getContentText()); 20 //APIから取得したデータからJSから生成されたソースコードを取得 21 let source = json["content"]["data"]; 22 return source; 23}

試したこと①スクリプトプロパティのKEYの確認

コード上ではPHANTOMJSCLOUD_IDとなっているが、
スクリプトプロパティの方のKEYがAPIKEYとなっていたので、
同じに合わせたが同じエラーが出る

イメージ説明

試したこと②デモAPIキー

APIKEY_DEMOのKEYでデモのAPIキーを入力してみたところ、
以下のエラーがでました。

error

1Exception: Request failed for https://phantomjscloud.com returned code 400. Truncated server response: {"name":"HttpStatusCodeException","message":"Invalid URL innerException: The \"url\" argument must be of type string. Received an instance of Arr... (use muteHttpExceptions option to examine full response)

↓和訳
例外が発生しました。リクエストに失敗しました。https://phantomjscloud.com コード 400 が返されました。サーバーの応答は切り捨てられています。{"name": "HttpStatusCodeException", "message": "Invalid URL innerException. "無効なURLです。引数 "url "は文字列型でなければなりません。Arr...のインスタンスを受信しました。
イメージ説明

試したこと③引数のURLを変える

配列にはいっているURLを引数にしていたが、
直接URLを引数にしたが、無効な引数と言われる

javascript

1 // var scraping_url = urlArray[0]; ←修正前 ↓修正後 2var url_test = "https://www.ebay.com/sh/ord/details?srn=4794&orderid=16-08926-69722&source=Orders&ru=https%3A%2F%2Fwww.ebay.com%2Fsh%2Ford"; 3 4 //PhantomJsCloud用の独自関数で動的なWebページのHTMLデータを取得する 5 // let html = phantomJSCloudScraping(scraping_url); ←修正前 ↓修正後 6 let html = phantomJSCloudScraping(url_test);

error

1Exception: Invalid argument: <!DOCTYPE%20html><html%20lang="en"><head><meta%20http-equiv="X-UA-Compatible"%20content="IE=Edge"><meta%20name="viewport"%20content="width=device-width,%20initial-scale=1"><link%20rel="icon"%20href="https://pages.ebay.com/favicon.ico"><link%20rel="dns-prefetch"%20href="//ir.ebaystatic.com"><link%20rel="dns-prefetch"%20href="//secureir.ebaystatic.com"><link%20rel="dns-prefetch"%20href="//i.ebayimg.com"><link%20rel="dns-prefetch"%20href="//rover.ebay.com"><script>$ssgST=new%20Date().getTime();</script><meta%20charset="utf-8"><title>Security%20Measure</title><style> 2 #dCF_captcha_text%20{ 3 display:%20none%20!important; 4 } 5 .pgHeading%20{ 6 margin:%2010px%200px%2020px%2010px; 7 padding:%2010px%200px%200px%200px; 8 } 9 .pgHeading%20>%20h1%20{ 10 line-height:%2027px; 11 text-align:%20left; 12 margin:%200px%2010px%2020px%200px; 13 font-size:%201.2em; 14 font-family:%20Arial,%20Helvetica,%20sans-serif; 15 font-weight:%20normal; 16 color:%20#5d5d5d; 17 } 18 .pgCenter%20{ 19 margin:%2010px%2010px%2010px%2010px; 20 text-align:%20justify; 21 font-size:%201.1em; 22 } 23%20%20%20%20%20%20%20%20%20%20%20%20.captcha-not-rendered-msg-div%20a:link%20{ 24%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text-decoration:%20underline; 25%20%20%20%20%20%20%20%20%20%20%20%20} 26 27~~後略~~

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

ログイン時のTokenと勘違いしているわけではないことを確認済みです。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、GAS の設定ページの「スクリプトプロパティ」と、コード中の API キーのキー名は一致させる必要があります。

コード上で「PHANTOMJSCLOUD_ID」というキー名を使用しているならば、
GAS の設定ページの「スクリプトプロパティ」も「PHANTOMJSCLOUD_ID」でなければなりません。

(質問文中のコードのオリジナルは「PHANTOMJSCLOUD_ID」というプロパティ名/キー名で正しく動くように作られています)

仮に、設定画面上のプロパティ名とコード中のキー名を一致させていても同様のエラーが発生する場合は、

  • API キーのつづりが間違っている
  • API キー自体が無効になっている
  • 無関係な文字列を API キーと勘違いしている

などの可能性があります。

PhantomJSCloud の自分のページに行って、APIキーのつづりが正しいか確認する、または、新しいAPIキーを再発行するなどして対応してください。
(下の画像に記載の API キーはデモ用であり数回しか使えません)

なお、API キーは、PhantomJSCloud の登録時に発行される「token」とは別のものです。


イメージ説明

投稿2022/08/27 22:27

編集2022/08/28 00:52
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Risney

2022/08/28 13:54

qnoir 様 早速のご回答ありがとうございます! 以下の対応をしてみましたが、未解決状態です。 ・API キーのつづりが間違っている その可能性があるかと思い、コピペしましたがダメでした。 ・API キー自体が無効になっている DEMOキーで試したところ、 エラーが出てしまったので調査中(試したこと②参照) また、 APIキー再発行する方法がわからないので、 公式サポートメールにて問い合わせ中 ・無関係な文字列を API キーと勘違いしている 補足情報に追記しましたが、 ログイン時のTokenと違うことは認識しています。
退会済みユーザー

退会済みユーザー

2022/08/28 14:20 編集

報告ありがとうございます。 念のため確認なのですが質問文のコード中の 「 let key = PropertiesService.getScriptProperties().getProperty('PHANTOMJSCLOUD_ID');」 」のところは 「 let key = PropertiesService.getScriptProperties().getProperty('APIKEY');」 」 に修正したうえで実行されているのですよね? あと、DEMOキー を使った時のエラーについては、エラー文から推測するに、DEMOキー を試したとき phantomJSCloudScraping 関数に配列を渡していたのではありませんか? 質問に記載の phantomJSCloudScraping 関数の引数に配列を渡すとそのエラーが出ます。 phantomJSCloudScraping 関数の引数URLには、配列ではなく、URLを表す文字列自体を渡す必要があります。 > 試したこと③引数のURLを変える こちらについては同じ質問のコードでAPIが通っている状態で実行したところ、INvalid Argumentというエラーは出ませんでした。(ただ、そのエラー文のINvalid Argumentより後の文字列は同じ文字列になっています) そのエラーは、質問文に記載されている範囲とは異なるところで生じたものではないかと推測しているのですがいかがでしょうか(エラー発生行番号が書かれていないのでこちらでは確証がありません)
Risney

2022/09/11 16:55 編集

返答遅くなりました。 >「let key = PropertiesService.getScriptProperties().getProperty('PHANTOMJSCLOUD_ID');」 >のところは >「let key = PropertiesService.getScriptProperties().getProperty('APIKEY');」」 >に修正したうえで実行されているのですよね? 上記はおっしゃる通り、修正した上で実行しました。 >DEMOキー を使った時のエラーについては、エラー文から推測するに、DEMOキー を試したとき >phantomJSCloudScraping 関数に配列を渡していたのではありませんか? こちらは関数は試したこと③のようにURLを直接に渡したので問題ない認識です。 >そのエラーは、質問文に記載されている範囲とは異なるところで生じたものではないかと推測しているのですが >いかがでしょうか(エラー発生行番号が書かれていないのでこちらでは確証がありません) 文章は引っ張ってこれているが、別の場所のエラーという可能性もありますね、、 引き続き調査が必要ですね。
Risney

2022/09/14 10:05

とりあえずこちらのエラーは出なくなりました。 もしかしてPhantomJsCloudに登録してすぐだったからでしょうか、、 また違うエラーが出たので、 もしお時間あればご確認いただけたら幸いです。 https://teratail.com/questions/5m8ir08m6yyv9b
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問