Google Apps Script で、URL を Parse して、
domain 部や、path を取得しないといけない機会があり、
document.createElement使おうとしたり、
URL使おうとしたのですが、
動作せず、URI.js使うことにしたので、
その際にやったことを記載します。


参考


実装

document.createElement を使うが動作せず

Apps Script は、document オブジェクトがないってことだと思います。

  • createElementTest.gs
    function createElementTest() {
        var parser = document.createElement('a');
    }
    

URL関数を使うが動作せず

「URL は定義されていません」になります。

  • urlTest.gs
    function urlTest() {
        var parser = new URL("http://www.example.com/files-tmb/1234/abc.png?key=val");
    }
    

URI.js を使う

URL をparseできる ライブラリがないか検索したところ、
URI.js - URLs in Javascript見つけました。

jqueryのplugin のjquery.URI.js と、スタンドアロン版のURI.jsあるようで、
スタンドアロン版を、スクリプトエディタ上に貼り付けたところ、
動きそうな雰囲気があり、以下のようなテストコードを記載しました。

  • uriTest.gs

    function uriTest() {
      var uri = new URI("http://www.example.com:8080/files-tmb/1234/abc.png?key=val");
        Logger.log("href = %s", uri.href());
        Logger.log("host = %s", uri.host());
        Logger.log("hostname = %s", uri.hostname());
        Logger.log("origin = %s", uri.origin());
        Logger.log("password = %s", uri.password());
        Logger.log("pathname = %s", uri.pathname());
        Logger.log("port = %s", uri.port());
        Logger.log("protocol = %s", uri.protocol());  
        Logger.log("search = %s", uri.search());  
    }
    
    以下のようなログが出力されます。
    URL と同様の動作をしています。

  • OUTPUT

    href = http://www.example.com:8080/files-tmb/1234/abc.png?key=val
    host = www.example.com:8080
    hostname = www.example.com
    origin = http://www.example.com:8080
    password = 
    pathname = /files-tmb/1234/abc.png
    port = 8080
    protocol = http
    search = ?key=val
    

その他の機能について

API としては、URL 自体を引数にとって、Parseしてくれる以外にも、
Serializing したり、Normalizing (正しい形式のURLに変換する) したり、
非常に多機能なようです。
詳細は、URI.js - API Documentation記載されてますので、興味ある方はご確認ください。
多機能な分サイズがそれなりに大きいので、一部の機能を使うために導入するのはあれかもしれませんが、
個人的に、Google Apps Script書く際は、重宝しそうです。

以上です。

コメント