5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【GAS】sitemap.xmlをスクレイピングしてスプレッドシートにURLリストとして書き出す

Last updated at Posted at 2019-06-13

sitemap.xmlをスクレイピングして、スプレッドシートに書き出しておけば、そこからBotでTwitterとかにコンテンツ投稿できたりするので、何となく便利かなーと思い作りました。

Google Apps ScriptでXMLをパースする際は、XmlServiceクラスが用意されているので、このクラスを使用して取得処理を実装します。

XmlServiceクラスに関する詳しい事はこちらの公式リファレンスで。

#実装手順

スクリプトエディタを開きます。

スクリーンショット 2019-06-14 1.11.00.png

以下のコードを書いて実行します。

function getxml() {
  var sitemapUrl = "ここにsitemap.xmlのUrl";
  var xmlString = "http://www.sitemaps.org/schemas/sitemap/0.9";

  var xmlText = UrlFetchApp.fetch(sitemapUrl).getContentText();
  var document = XmlService.parse(xmlText);
  var xmlProtocol = XmlService.getNamespace(xmlString);
  var urlEntries = document.getRootElement().getChildren('url', xmlProtocol);
  
  var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
  var urlArray = [];

  for (var urlIndex= 0; urlIndex < urlEntries.length; urlIndex++) {
    if(urlIndex == 0 || urlIndex == 1){
      urlIndex = urlIndex + 1;
    }
    // シートに書き込む
    var rIndex = "A" + urlIndex;
    sheet.getRange(rIndex).setValue(urlEntries[urlIndex].getChild('loc', xmlProtocol).getText());
  }
}

細かく見ていきましょう。

var xmlText = UrlFetchApp.fetch(sitemapUrl).getContentText();
var document = XmlService.parse(xmlText);

UrlFetchAppクラスのparseメソッドでXMLを取得して、XmlServiceのparseメソッドでXMLをパースします。

var xmlProtocol = XmlService.getNamespace(xmlString);
var urlEntries = document.getRootElement().getChildren('url', xmlProtocol);

でドキュメント全体の構造を取得し、getChildren()で目的のurl要素を抽出します。

  var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
  var urlArray = [];

  for (var urlIndex= 0; urlIndex < urlEntries.length; urlIndex++) {
    if(urlIndex == 0 || urlIndex == 1){
      urlIndex = urlIndex + 1;
    }
    // シートに書き込む
    var rIndex = "A" + urlIndex;
    sheet.getRange(rIndex).setValue(urlEntries[urlIndex].getChild('loc', xmlProtocol).getText());
  }

あとは取得したURLリストをシートのA列に書き出すだけです。
以下がシートに出力した結果です。

スクリーンショット_2019-06-14_0_57_46.jpg

あとは、このURLリストを煮るなる焼くなり。
BotでSNSに定期投稿しても良いでしょう。

#まとめ
いかがでしたでしょうか?

Google Apps ScriptでのXMLのパースは、便利で簡単なので、やり方を覚えておくと色々な場面で応用がきくと思います。ぜひ試してみませんか。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?