【GAS】sitemap.xmlをスクレイピングしてスプレッドシートにURLリストとして書き出す
sitemap.xmlをスクレイピングして、スプレッドシートに書き出しておけば、そこからBotでTwitterとかにコンテンツ投稿できたりするので、何となく便利かなーと思い作りました。
Google Apps ScriptでXMLをパースする際は、XmlServiceクラスが用意されているので、このクラスを使用して取得処理を実装します。
XmlServiceクラスに関する詳しい事はこちらの公式リファレンスで。
実装手順
スクリプトエディタを開きます。
以下のコードを書いて実行します。
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列に書き出すだけです。
以下がシートに出力した結果です。
あとは、このURLリストを煮るなる焼くなり。
BotでSNSに定期投稿しても良いでしょう。
まとめ
いかがでしたでしょうか?
Google Apps ScriptでのXMLのパースは、便利で簡単なので、やり方を覚えておくと色々な場面で応用がきくと思います。ぜひ試してみませんか。
Author And Source
この問題について(【GAS】sitemap.xmlをスクレイピングしてスプレッドシートにURLリストとして書き出す), 我々は、より多くの情報をここで見つけました https://qiita.com/kingpanda/items/e22901550bf0877b6ed6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .