Google Apps Script では、JavaScriptで読み込み準備後にコンテンツを生成するような動的なWebページの情報を取得することはできない。そのため、レンダリング後の情報を取得するために、PhantomJsCloud という外部ツールを利用する。無料版と有償版があるが、1日500ページのアクセスまでは無料となる。
ぼくの場合は無料版で十分なので早速利用してみる。
- 「Sign up now!」ボタンをクリックする
- メールアドレスでアカウントを作成する
- メールアドレス宛てにPhontomJsCloudからメールが届く
- メールの中のメールアドレス確認用リンクをクリックする
- パスワードを任意に決めて、「Finish and Log in」をクリックする
- ApiKeyが発行されるので、メモしておく
ApiKeyはスクリプト側で必要となるのでコピーしておく。
/**
* 動的ページのレンダリング後の情報を取得する
*
* @param {string} URL
* @return {string} URLのソースコード
*/
function phantomJSCloud(URL) {
const key = 'xxxxxxxxxxxxxxxxxxxxxxxxx'; // 取得したApiKeyをセットする
// HTTPSレスポンスのオプション項目を設定する
let option = {
url: URL,
renderType: 'HTML',
outputAsJson: true
};
// オプション項目をJSONにしてエンコードする
let payload = JSON.stringify(option);
payload = encodeURIComponent(payload);
// PhantomJsCloudへリクエストするURLを設定して、ソースコードを取得する
let apiUrl = "https://phantomjscloud.com/api/browser/v2/"+ key +"/?request=" + payload,
response = UrlFetchApp.fetch(apiUrl),
json = JSON.parse(response.getContentText()),
source = json["content"]["data"];
return source;
}