GASでHTML要素をタグとクラス名で取得するコード
外出自粛で必要最低限外に出ず、仕事も休んだり働いたりなのでツールつくりがはかどります。
GASでHTML要素を取得するやつ書きました。
GASでHTML要素を取得するには、
var response = UrlFetchApp.fetch(URL);
var html = response.getContentText(文字コード);
で行って、こっからさらにタグ名で要素取得していくのがよいんだけど。
複雑なWebページだとタグ名だけで取られましても!クラス名も指定したいんですけれども!となります。
なので以下のようなメソッドを書いてみました。
// タグ名で要素のテキストを取得 function getContentOfTagName(html, tagName, className) { var i = 0; var j = 0; var startOfTag; var endOfTag; var results = [ ]; var startTagName // タグに指定のクラス名がある場合 if(className != ''){ startTagName = tagName + ' ' +className; }else{ startTagName = tagName; } while(html.indexOf('<' + startTagName,j)!=-1){ // 開始タグの"<"の開始位置を取得 j = html.indexOf('<' + startTagName,j); // 開始タグの">"位置 + 1を文字列の始めにする startOfStr = html.indexOf('>',j)+1; //終了タグ位置を文字列の終わりにする endOfStr = html.indexOf('</' + tagName + '>',j); //タグの間の文字列を配列に追加 results[i] = html.substring(startOfStr, endOfStr); j = endOfStr + 1; i++; } return results; }
タグとクラス名を指定すると書きましたが、正確には違います。
下記のようなタグの間をとりたい場合。
<p class="test">~~~~</p>
メソッドの第二引数に"p"、第三引数に"class="test""を渡します。
<p id="test" class="test">~~~~<p>
であれば、"p"と"id="test""を渡します。
タグ内の属性があれば、タグ名以降をこぴってそれを引数に渡す感じです。途中まででもいいです、別に。
"p"と”class="tes"とかでもいいです。雑です。
ちなみにタグ名だけで取得したい場合は第三引数に空文字("")を指定してください。
うごきゃあいいんだ、うごきゃあ、の精神です。