非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Google Apps Script: サーバーサイドJavaScriptってことは外部HTMLが解析できる

   

通常のWebサービスって、クライアントサイドにHTML/JavaScript、サーバーサイドにPHPを使うのが一般的なんですが、データベースへのアクセスとか外部ページのHTML解析なんかは、基本サーバーサイドでないと処理できません。JavaScriptでは処理できないんです。

ところが、Google Apps Scriptの場合、gsファイルはサーバーサイドなので、なんとサーバーサイドの処理をJavaScriptで実現できてしまうんです。その1つに今まで紹介してきたデータべースFusion Tablesへのアクセスなんですが、外部HTMLの解析もできてしまうんじゃないかと思って、ちょっとやってみました。結論を先に書くと「可能」です。

いきなりYahoo!みたいな大サイズのページを読み込むのもアレなので、まずはテスト用の簡単なページを用意しました。

http://pineplanter.moo.jp/test/

2

テストページのHTMLは以下の通りです。

<!DOCTYPE html>
<html>
<head>
<meta charset=“UTF-8” />
<title>テスト</title>
</head>
<body>
<h1>テスト</h1>
<br/>
<p>
このページはテストです。
</p>
</body>
</html>

 

これをGoogle Apps Scriptから読み込みます。通常のクライアントサイドJavaScriptではできませんが、ここはサーバーサイドの強みです。

コード.gs

doGet()は今まで通りのものです。これはindex.htmlとコード.gsとを接続するための関数なのでテンプレです。getHTMLは、index.htmlから渡されたurlを読み込んで、HTMLタグを返す関数になります。

3

function doGet() {
  var t = HtmlService.createTemplateFromFile(‘index.html’);
  return t.evaluate();
}
function getHTML(url){
  var myXml = UrlFetchApp.fetch(url).getContentText();
  return myXml;
}

 

index.html

こちらは、[HTML読込]ボタンを押すことで、urlをコード.gsに投げて、受けた結果を<div id=”TEST”></div>内に表示させるものです。タグを表示させるために、”<” を エスケープ文字の”&lt;”に変換しています。

4

<!DOCTYPE html>
<html>
   <head>
      <base target=“_top”>
      <title>Google Apps Script Test</title>
   </head>
   <script>
      function getHTML(){
          google.script.run.withSuccessHandler(result).getHTML(‘http://pineplanter.moo.jp/test/’);
          function result(data){
             data = data.replace(/</g, “&lt;”);
             document.getElementById(“TEST”).innerHTML = data;
          }
      }
   </script>
   <body>
      <h1>Google Apps Script Test</h1>
      <div></div>
      <div id=“TEST”></div>
      <button onclick=“getHTML()”>HTML読込</button>
   </body>
</html>

 

動作結果

動作結果は以下の通り成功です。ちゃんとタグが現れました。今回は同じドメイン内のページを読み込みましたが、Yahoo!ページでもAmazonページでも読み込むことが可能です。

5

 - Google Apps Script, Google Dirve