野良ジニアのスクラップブック

野良エンジニアによる雑記帳。技術、本、便利グッズなどを気の向くままに。

はてなブログの記事数を調べるスクリプトを作って、他のブログの総記事数を調べてみた【Google Apps Script】

こんにちわ、野良エンジニアです。

今回は「他のはてなブログの総記事数」を調べるスクリプトを作成したので、簡単に紹介しておきます。

【コピペ導入】はてなブログ用 過去記事TweetBot【全自動】
2018年3月版 はてなブログpro・独自ドメインに移行した時にやること まとめ

Amazon プライムは絶対入るべき!メリット・特典・会費・退会方法をまとめて簡単に紹介
内村さまぁ~ず 第1〜50回から選ぶオススメ神回10選【Amazonプライムビデオ】
キッチン作業が最高に捗る突っ張りキッチンラック【オススメグッズ・スペース倍増】

前置き

ちょっとした理由で他のはてなブログの記事数を調べたくなりました。

自分のブログの記事数はダッシュボードで簡単に分かりますが、他のブログの記事数を調べる方法を調べても見つかりませんでした。
※こんな方法で調べられるよー、とご存知の方がいれば教えてください。

f:id:ryota-17:20180405204824p:plain


パッと思いついたのは「月別アーカイブ」を合計する方法ですが、「表示してないブログもある」し「めんどくさい」です。

f:id:ryota-17:20180405204503p:plain


てなわけで、前に作った「【コピペ導入】はてなブログ用 過去記事TweetBot【全自動】」のコードを流用して、他ブログの記事数を調べるスクリプトを作りました。

【コピペ導入】はてなブログ用 過去記事TweetBot【全自動】


作ったもの

  • Google Spread Sheet + Google Apps Script で、他のはてなブログの総記事数を取得するやつ


実際に調べてみた

【保存版】一度は読んでおくべき有名はてなブログ30選|BIZ KARTE」や「はてなブログ読者数ランキング」から、適当にピックアップして調べてみました。

加えて、個人的にいくつかチョイスしてます。

f:id:ryota-17:20180405211802p:plain


URL 表記だと分かりづらいので、ブログ名に置き換えるとこんな感じです。4桁オーバーの方がチラホラといて凄い。

ブログ名 記事数 管理人さん
今日はヒトデ祭りだぞ! 658 ✩←ヒトデ(id:hitode99)さん
太陽がまぶしかったから 1454 池田仮名(id:bulldra)さん
NO TITLE 264 シロマ(id:shiromatakumi)さん
ゆとりずむ 566 らくからちゃ(id:lacucaracha)さん
クレジットカードの読みもの 2655 id:cardmicsさん
ぐるりみち。 1227 けいろー(id:ornith)さん
警察官クビになってからブログ 164 ハルオサン(id:Haruosan)さん
Yukihy Life 196 ゆきひー(id:ftmaccho)さん
はらぺこグリズリーの料理ブログ 319 はらぺこグリズリー(id:kakashibennett)さん
ココロクエスト~レベルアップ心理学ブログ~ 362 ねこひげ先生(id:cat-whisker)さん
散るろぐ 1088 チルド(id:cild)さん
give IT a try 711 伊藤淳一(id:JunichiIto)さん
かきのたねとピーナッツ 112 かきぴー(id:bbc-21)さん
力こそパワー 282 うぃる(id:hrktksm)さん
ARuFaの日記 3186 ARuFa(id:Arufa)さん
Everything you've ever Dreamed 848 フミコフミオ(id:Delete_All)さん
もはや日記とかそういう次元ではない 74 熊谷 真士(id:manato-kumagai)さん
LITERALLY 103 id:tsukuruiroiroさん
俺の遺言を聴いてほしい 554 id:hideyoshi1537さん
鈴木です。別館 1103 鈴木こあら(id:suzukidesu23)さん
スキナモノート 121 きなモン(id:tubamenote)さん


使い方

使いたい人がいるとも思いませんが、簡単に使い方を説明していきます。


空のスプレッドシートを作成する

スプレッドシートにアクセス、ログインします。

Google スプレッドシート

空のシートを作成して、名前を適当に入力。

f:id:ryota-17:20180318145303p:plain

f:id:ryota-17:20180318145312p:plain


調べたいブログを Spread Sheet に入力

A列にブログのアドレスを入力。

f:id:ryota-17:20180405214649p:plain


GAS を作成する

「ツール」 → 「 スクリプト エディタ」をクリック。別ウィンドウ(タブ)が開きます。

f:id:ryota-17:20180318150045p:plain


プロジェクト名、ファイル名を変更する

プロジェクト名、ファイル名を適当に入力。

f:id:ryota-17:20180318150527p:plain


コードをコピペする

このコードをコピーして、先ほどのファイルに上書き。

// 記事一覧を書き出すシート
var TARGET_SHEET = "シート1";

// 記事数のカウント
function countBlogPosts() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName(TARGET_SHEET);
  var lastRow = sheet.getLastRow();

  // スプレッドシートの更新とタイミングが重なった場合は何も投稿しない
  if(lastRow == 0) return;

  // スプレッドシートからデータ取得
  var blogUrls = sheet.getRange("A1").offset(0, 0, lastRow).getValues();
  for(var i=0; i<blogUrls.length; i++) {
    scrapingHatenaBlog(blogUrls[i][0], i + 1);
  }
}

// スプレッドシートに記事一覧情報 入力
function scrapingHatenaBlog(url, row) {
  var myActiveSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var myActiveSheet = myActiveSpreadSheet.getSheetByName(TARGET_SHEET);

  // RSS 取得
  var nonce = getNonce("");
  if (url.substr(-1) === "/")
    url = url.substr(0, url.length - 1);
  var response = UrlFetchApp.fetch(url + "/feed?page=" + nonce);

  // エントリー情報 抽出
  var myRegexp = /<entry>([\s\S]*?)<\/updated>/gi;
  var match = response.getContentText().match(myRegexp);

  // 記事数
  var post_cnt = 0;
  
  // 過去記事を全て処理
  while(match != null) {
    post_cnt += match.length;
    
    // 2ページ目以降を処理するために nonce 更新
    var matchData = match[match.length - 1];
    var published = fetchString(matchData, "<published>", "<\/published>");
    nonce = getNonce(published);

    // 2ページ目以降を取得
    response = UrlFetchApp.fetch(url + "/feed?page=" + nonce);
    match = response.getContentText().match(myRegexp);
  }
  
  // 記事数書き込み
  myActiveSheet.getRange(row, 2).setValue(post_cnt);
}

// Nonce 取得
function getNonce(dateString) {
  var date = new Date();
  if(dateString != "") {
    date = new Date(dateString);
  }
  return Math.floor((date.getTime()/1000)).toString();
}

// 文字列抽出
function fetchString(str, pre, suf) {
  var reg = new RegExp(pre + '.*?' + suf);
  var data = str.match(reg)[0]
  .replace(pre, '')
  .replace(suf, '');
  return data;
}


実行:ブログの記事数を取得する

「関数を選択」→「countBlogPosts」→「再生マーク」で実行。

f:id:ryota-17:20180405215338p:plain


Google の認証が必要(needs your permission to access your data on Google)と表示されたら「許可を確認」をクリック。この表示が出ない場合もあるので、その場合は先に進んでください。

f:id:ryota-17:20180318163548p:plain


スプレッドシートを作成した Google アカウントを選択(or ログイン)

f:id:ryota-17:20180318163620p:plain


「このアプリは確認されていません」と表示されたら、「詳細」→「"アプリ名"(安全ではないページ)に移動」をクリック。

f:id:ryota-17:20180318163737p:plain

f:id:ryota-17:20180318163752p:plain


Google のアクセス許可(アプリ連携)画面が表示されたら、「許可」をクリック。

f:id:ryota-17:20180318163835p:plain


あとは放置しておけば実行完了するはずです。たまにエラーになるので、その場合はまた実行してみてください。


まとめ

Google Apps Script ではてなブログの記事数を取得するやつ作ったよ
3桁後半や4桁台の人もいて驚愕したよ

継続は力なりグワね〜

誰かブックマークレット化して欲しいグワ〜


【コピペ導入】はてなブログ用 過去記事TweetBot【全自動】
2018年3月版 はてなブログpro・独自ドメインに移行した時にやること まとめ

Amazon プライムは絶対入るべき!メリット・特典・会費・退会方法をまとめて簡単に紹介
内村さまぁ~ず 第1〜50回から選ぶオススメ神回10選【Amazonプライムビデオ】
キッチン作業が最高に捗る突っ張りキッチンラック【オススメグッズ・スペース倍増】