• SIS Lab
  • >
  • Blog
  • >
  • Google Apps Scriptで、ページ毎のはてなブックマーク数を週次で取得する

Google Apps Scriptで、ページ毎のはてなブックマーク数を週次で取得する

更新日:2023.05.05 作成日:2020.07.20

7/20現在、 Blog KPI Collector(GAS)で各種KPIを自動取得する で設定したGoogle Apps Scriptでサイト全体のブックマーク数を取得しています。

「はてなブックマーク数」の推移を追っていく際に、全体としてどのぐらい増えたのかは分かるのですが、どのページで増えたのかが分かりません。 そこで、ページ毎のはてなブックマーク数も合わせて取得するようにしました。

ページ毎のはてなブックマーク数を取得する

ページ毎のはてなブックマーク数は、以下のAPIを利用することで簡単に取得できます。

はてなブックマーク件数取得API - Hatena Developer Center

このAPIをGoogle Apps Scriptから叩くことにしました。

function getBookmarks(url) {
  let encodeUrl = encodeURIComponent(url);
  let response = UrlFetchApp.fetch('https://bookmark.hatenaapis.com/count/entry?url=' + encodeUrl);
  return response.getContentText();
}

サイトマップからURLを抽出して逐次はてなブックマーク数を取得する

以下のGoogle Apps Scriptを毎週実行して、結果を貯めてみることにします。

sitemap.xmlには、通常の記事ページ以外にもタグページやカテゴリページのURLも含まれています。 そのため下記の通りURLがhttps://www.meganii.com/blogで始まるもの、かつ、被はてなブックマークが0よりも大きいものを出力するようにしています。

function main() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('bookmarks');
  const today = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd");
  
  const feedURL = "https://www.meganii.com/ja/sitemap.xml";
  const response = UrlFetchApp.fetch(feedURL);
  const document = XmlService.parse(response.getContentText());
  const root = document.getRootElement();
  const sitemap = XmlService.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9");
  const entries = root.getChildren("url", sitemap);
  for (let i = 0; i < entries.length; i++) {
    const url = entries[i].getChild('loc', sitemap).getText();
    const isPostPage = /^https:\/\/www\.meganii\.com\/blog/.test(url);
    if (isPostPage){
      const count = getBookmarks(url);
      if (count > 0) {
        sheet.appendRow([
          today,
          url,
          count
        ]);
      }
    }
  }
}

Google Apps Scriptで、ページ毎のはてなブックマーク数を週次で取得する

Related contents