Google Apps ScriptでScrapboxのフィードからsitemap.xmlを生成した

Scrapbox の public プロジェクトを検索エンジンにのせたくて、sitemap.xml を作成してみました。

Google Apps Script をあまり使ったことがないので、ChatGPT に聞いたら実装してくれました。少しだけ手直ししてますが、90%ぐらいは ChatGPT が書いたものです。Google Apps Script で実行すると Google Drive にsitemap.xmlというファイルが作成されます

function myFunction() {
  // RSS feed URL
  const feedUrl = "https://scrapbox.io/api/feed/mahs-note";

  // Base URL of the site
  const baseUrl = "https://scrapbox.io/mahs-note";

  // Fetch RSS feed
  const feed = UrlFetchApp.fetch(feedUrl).getContentText();
  const document = XmlService.parse(feed);
  const root = document.getRootElement();
  const channel = root.getChild("channel");
  const items = channel.getChildren("item");

  // Create sitemap.xml
  var sitemap = '<?xml version="1.0" encoding="UTF-8"?>\n';
  sitemap += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';

  // Add home page to sitemap
  sitemap += "<url>\n";
  sitemap += "<loc>" + baseUrl + "</loc>\n";
  sitemap += "<changefreq>daily</changefreq>\n";
  sitemap += "<priority>1.0</priority>\n";
  sitemap += "</url>\n";

  // Add entries to sitemap
  sitemap = items.reduce((accumulator, item) => {
    const link = item.getChildText("link");
    const updated = item.getChildText("pubDate");
    const updatedDate = new Date(updated);
    const updatedDateString = updatedDate.toISOString();

    accumulator += "<url>\n";
    accumulator += "<loc>" + link + "</loc>\n";
    accumulator += "<lastmod>" + updatedDateString + "</lastmod>\n";
    accumulator += "<changefreq>daily</changefreq>\n";
    accumulator += "<priority>0.8</priority>\n";
    accumulator += "</url>\n";
    return accumulator;
  }, sitemap);

  sitemap += "</urlset>";

  // Save sitemap.xml to Google Drive
  DriveApp.createFile("sitemap.xml", sitemap, "application/xml");
  Logger.log("Sitemap.xml created");
}