お問い合わせ
    氏名

    メールアドレス

    件名

    お問い合わせ内容



    会員登録(無料)
    ログイン
    スキルアップは今すぐこちら!▶

    【GAS】Basic認証されているHTMLの表からデータを取得&パースしてスプレッドシートに連動させる方法

    GAS(グーグルアップススクリプト)
    この記事は約6分で読めます。

    公開されているHTMLの表であればIMPORTLANGE関数でどうにか取得できるのですが、これがBasic認証されているようなWEBページの場合、関数だけではどうにもこうにもデータが取得できません。その時はGASを使ってデータを取得する方法があります(コードにIDなどをセットする)

    パースライブラリをインポートする

    まずは、パースを利用するために下記のライブラリをインポートします。

    パースライブラリ▼

    1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw

    ライブラリ+の場所からライブラリが追加できます。

    スクリプトIDを入れて検索をかけると「Parser」という便利なライブラリが追加できます。

    これでブラウザ上から取得したデータをパースできるようになります。

    表からパースするスクリプトを作る

    あとは、大体このような感じで、Basic認証されているページからデータを取得できるかと思います。

    function getHtmlValue() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spreadsheet.getSheetByName("シート名");
    
      const url = "http://XXXXXXXXXXXXXXXXXXXX";
      const id = "XXXXXX";
      const pass = "XXXXXX";
    
      // BASIC認証
      const options = {
        "headers" : {"Authorization" : " Basic " + Utilities.base64Encode(id + ":" + pass)}
      };
      const response = UrlFetchApp.fetch(url, options);
      const content = response.getContentText("UTF-8");
    
      const table_block = Parser.data(content).from('<table>').to('</table>').build();
      const content_block = Parser.data(table_block).from('<tr>').to('</tr>').iterate();
    
     // リスト用の変数を宣言
      let data_a="";
      let k =3;
      // content_blockの要素繰り返し(今回は1回)
        for (var i = 1; i < content_block.length; i++) {
      // tr要素<td>に囲まれている部分
        list_data = Parser.data(content_block[i]).from('<td>').to('</td>').iterate();
        data_a = Parser.data(content_block[i]).from('<a href=XXXX.html?p=').to('>').iterate();
    
        for(var j = 1; j < list_data.length; j++){
          topick = list_data[j];
          topick2 = data_a[0];
          
          if(j==1){
              sheet.getRange(k,j).setValue(data_a[0]);
            }else{
              sheet.getRange(k,j).setValue(list_data[j-1]);
            }
       }
       // 
       k++;
      }
    
    function getHtmlValue() {
      var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = spreadsheet.getSheetByName("シート名");
    
      const url = "http://XXXXXXXXXXXXXXXXXXXX";
      const id = "XXXXXX";
      const pass = "XXXXXX";
    
      // BASIC認証
      const options = {
        "headers" : {"Authorization" : " Basic " + Utilities.base64Encode(id + ":" + pass)}
      };
      const response = UrlFetchApp.fetch(url, options);
      const content = response.getContentText("UTF-8");
    
      const table_block = Parser.data(content).from('<table>').to('</table>').build();
      const content_block = Parser.data(table_block).from('<tr>').to('</tr>').iterate();
    
     // リスト用の変数を宣言
      let data_a="";
      let k =3;
      // content_blockの要素繰り返し(今回は1回)
        for (var i = 1; i < content_block.length; i++) {
      // tr要素<td>に囲まれている部分
        list_data = Parser.data(content_block[i]).from('<td>').to('</td>').iterate();
        data_a = Parser.data(content_block[i]).from('<a href=XXXX').to('>').iterate();
    
        for(var j = 1; j < list_data.length; j++){
          topick = list_data[j];
          topick2 = data_a[0];
          
          if(j==1){
              sheet.getRange(k,j).setValue(data_a[0]);
            }else{
              sheet.getRange(k,j).setValue(list_data[j-1]);
            }
       }
       // 
       k++;
      }
    
    }

    表の抽出や整形は工夫が必要かと思いますので、改変ください。

    まとめ

    だいたいこの流れでBasic認証されているサイトの内容は取得できるかと思います。ただしIDなどはスクリプトを開く権限のあるユーザーであれば、誰でも見れるようになっていますので、作成と使用には注意が必要です。

    あと、よそのサイトのデータは取得しないほうが無難です(スクレイピングになってしまいますので…)。あくまで自分のサイト内での取得に留めておきましょう。

    ご参考ください😃

    0 件のコメント

    コメント
    タイトルとURLをコピーしました