読者です 読者をやめる 読者になる 読者になる

ゆとりずむ

東京で働く意識低い系ITコンサル(見習)。金融、時事、節約、会計等々のネタを呟きます。

MENU

はてなブログ読者登録数ランキングベスト100を作ってみた

おすすめ 日記・ブログ管理・その他


 

こんにちは、らくからちゃです。

昨日一昨日と、研修で缶詰にされていました( ´Д`)=3 なんでも、

会社:マネージャーは会社の規定上、上級職じゃないとしてはいけない。
ぼく:そうめう。僕は初級職だからお仕事できないめう。
会社:でも、君は優秀で、小規模案件なので特別に例外ということにする!
ぼく:特別に例外ということにする。
会社:これで君も、お給料は据え置きのままでマネージャーだ!おめでとう!
ぼく:やっためう!責任も残業も増えるめう!

(※弊社には何故か、優秀な社員と小規模な案件が溢れている模様)

会社:一応研修は受けてね。土曜日だけど。

ということで行ってきましたー。

それはさてき、帰りの電車でマイホットエントリーを眺めていて、こんな記事を見つけました。

はてなブログで読者登録数が多いブログってどんな記事なのかなーって気になったのですが、そもそも読者登録者ランキングなるものが存在しない…

確かに。はてなブログって、『読者登録』という仕組みを持っているくせして、それぞれのブログの読者登録数って公表していないんですよね。読者登録数が増えても、あまり読まれている気がしないのですが、やっぱりどんなブログが読者登録数が多いのかって、ちょっと気になりますよね。

こちらの記事では、

ということで、人気のブログをひたすら探し回って、読者登録数ランキングをつくりました。

このランキングは私が探しだすことができたブログしかランクインしていません。もしランキングにもれがあったら教えてくれると有り難いです。

という方法で調べていかれたようですが、もうちょっとシステマティックに出来ないかなーと思い、調べてみました。

f:id:lacucaracha:20151018114356p:plain

集計方法解説 

 ランキングを集計する方法ですが、大きく分けて

  • 対象となるブログを選定する。
  • 読者登録数をカウントする。
  • 並び替える。

といった作業が必要になるかなあと思います。はてなブログのユーザー数がどの程度いるのか分かりませんが、その一覧全てを取得することは大変困難です。今回の目的は『読者登録数』が多いブログを抽出することなので、『そこそこ人気のある』はてなブログの一覧からターゲットを選定すればよいかなあと思いました。

そこで、参考にしたのがこちら。

どういった基準で選んでいるのかは全く分かりませんが、『人気のエントリー』を定期的にtweetしているそうです。まずはここつぶやかれたtweetをベースに対象を選定することにします。

ただ、全期間のtweetを取得しようとするとapiの制約上色々と面倒くさい事になります。そこで今回は、9月から1ヶ月分くらいに当該twitterで紹介されたブログから、ランキングを抽出してみました。なお、解析は2015年10月18日時点です。

御託はここまでとして、結果を発表してみたいと思います。

( ・`д・´) いっくぞ~。

ランキング結果発表

順位ブログ投稿者(敬称略)読者数
1 はてなブログ開発ブログ hatenablog 5421
2 週刊はてなブログ hatenablog 3779
3 それは恋とか愛とかの類ではなくて moarh 3309
4 暇な女子大生が馬鹿なことをやってみるブログ aku_soshiki 2292
5 Everything you've ever Dreamed Delete_All 2133
6 脱社畜ブログ dennou_kurage 1997
7 ARuFaの日記 Arufa 1980
8 いばや通信 ibaya 1822
9 はなこのブログ。 hana5521 1447
10 ぐるりみち。 ornith 1405
11 今日、なに食べよう?〜有機野菜の畑から~ homare-temujin 1331
12 Green★Pharmacy hikaru233391 1278
13 スズコ、考える。 suminotiger 1269
14 さっきもUたやん horahareta13 1250
15 僭越ながら【1テーマの本を30冊読んで勉強するブログ】 sclo-a 1247
16 外資系OLのぐだぐだ toianna 1208
17 鈴木です。 suzukidesu23 1148
18 斗比主閲子の姑日記 topisyu 1144
19 クレジットカードの読みもの cardmics 1137
20 しっきーのブログ skky17 1133
21 妖怪男ウォッチ papuriko 1125
22 太陽がまぶしかったから bulldra 1120
23 コスパ最強!!一人暮らしの簡単節約料理レシピ kakashibennett 1096
24 世界の中心はここだ atnnnas 1060
25 おうつしかえ banban 1006
26 インターネットの備忘録 hase0831 1003
27 いつか電池がきれるまで fujipon 1002
28 読書で本から学ぶブログ【書評・感想】 dokushohon 982
29 ゆとりずむ lacucaracha 953
30 かくいう私も青二才でね TM2501 937
31 phaの日記 pha 930
32 田舎で底辺暮らし pokonan 910
33 自省log juverk 906
34 ゆるふわいずむ yuki3mori 895
35 楽に生きる方法 megumakou2014 892
36 めざせ 野菜1日350g! ちまこ通信 chimako-tsushin 882
37 ←ズイショ→ zuiji_zuisho 847
38 攻めは飛車角銀桂守りは金銀三枚 lightgauge 840
39 むすメモ! tukatukasa 826
40 クソログ lets0720 810
41 モテ貯金 horitsukiko 794
42 ナナオクプリーズ nanaoku 787
43 ハッピーエンドを前提として ui0723 776
44 今日はヒトデ祭りだぞ! hitode99 768
45 あざなえるなわのごとし paradisecircus69 764
46 散るろぐ cild 743
47 じゃじゃ嫁日記 rise_more 733
48 マネー報道 MoneyReport MoneyReport 733
49 ネットの海の渚にて dobonkai 717
50 田舎暮らしおひとりさまの日々 hozumi3081 716
51 自分の仕事は、自分でつくる igooke 714
52 hitode909の日記 hitode909 686
53 心がよろけそうなときに読むポンコツ日記 ponkotukko 682
54 手の中で膨らむ akikomainichi 665
55 Hagex-day info hagex 659
56 コミックエッセイ-モノクロ家計簿 ohg0524 652
57 オレシピ - 俺のレシピはお前のレシピ- log134 642
58 ビジョンミッション成長ブログ kobabiz 623
59 orangestarの雑記 orangestar 609
60 人生かっぽ —佐藤大地ブログ daichi6388 603
61 paiza開発日誌 paiza 596
62 mizchi's blog mizchi 593
63 レールを外れてもまだ生きる - ベンチャーOLブログ colopon 592
64 pal-9999のサッカーレポート pal-9999 589
65 トウフ系 kaishaku01 584
66 歴ログ -世界史専門ブログ- titioya 570
67 サラリーマン休日副業で月10万円以上目指すページ linuxdiary 565
68 いつか朝日が昇るまで gerge0725 563
69 ひかる人財プロジェクト hikarujinzai 558
70 ボンダイ gudachan 551
71 うちの子流~発達障害と生きる nanaio 550
72 魔法使いのシンプルライフ erisalife 549
73 山猫日記 LMIURA 538
74 カリントボンボン neji-ko 532
75 日日平安part2 tomii23 527
76 脱貧困ブログ kentaroupeace 527
77 メディアの輪郭 kana-boon 524
78 give IT a try JunichiIto 521
79 うさもふ dougacc 516
80 人生いつも三日ボーズ ysk_wtnb 486
81 poco blog glasstruct 485
82 銀座で働くデータサイエンティストのブログ TJO 485
83 家計とお買いモノと。 mocaca 458
84 こみねもすなるだいありー ashiyakomine 456
85 月曜9時のparty people jetstarmine 454
86 小娘のつれづれ drifter_2181 451
87 c71の一日 c71 441
88 $shibayu36->blog; shiba_yu36 440
89 A1理論はミニマリスト A1riron 439
90 Sakak's Gadget Blog keisuke9498 433
91 ミニマリストと呼ばれたい haru501227 425
92 心に火を、指先にペンを defender_21 425
93 ✘╹◡╹✘ r7kamura 424
94 malzack blog mlzk 421
95 はてなブックマーク開発ブログ hatenabookmark 415
96 プロジェクトマネジメントの話とか wiz7 414
97 I AM A DOG OKP 404
98 さよなら自分 f-aso 394
99 備後「あこう浪士」  釣り場の周辺 akouroushix 393
100 niko life... niko_97 383

結果についての分析

だいたい見ていると、900を超えたあたりから一気に間隔が詰まってきている気がしますね。あと、『はてな』といえば、ITエンジニアなイメージだったのですが、並べてみると読者登録だけでみると、主婦やOLの方も多い気がしますね。

また、ホットエントリーなどでは全く見かけないブログも多数あり、はてなの世界の中でも、はてなブックマークを普段利用する層とそうでない層とでどうも生息圏が分かれているのかなあなんて思う結果です。

実際、読者登録が増えたからといって、ほいほいホットエントリーに入るのか?といわれると、体感的にはちょっと違うかなと思っています。新着や人気までは入りやすいのですが、ホットエントリーに入るためには、ある程度の記事の品質は必要なのかなあというような気がしています。

解析用ソースコード

さて、今回の集計は、エクセル方眼紙と日々戦う28歳会社員、なんちゃって応用技術者が3時間ちょいくらいで書いたコードを元に出力された結果となります。

『動けばいいや』の崇高な精神のもと作ったものですので、とてもお見せ出来るようなものではないのですが、個人的な備忘録も兼ねてはっつけておきます。読者登録だけだと、古くからのユーザーが優位になりますので、登録されている読者がアクティブかどうか(直近3日以内にブクマor2週間以内に記事投稿など)も判断して集計したかったのですが、それはまた後日ということで。


package hatenablogsubscribercount;

import twitter4j.*;
import org.jsoup.*;
import java.util.*;
import java.net.*;
import java.io.*;
import java.sql.*;

public class HatenaBlogSubscriberCount {

    public static void main(String[] args) {

        Twitter twitter = new TwitterFactory().getInstance();	//認証なしで接続
        try {

            //DB宣言部
            java.sql.Connection conn = null;
            String dbUrl = "jdbc:derby://localhost:1527/";
            String dbName = "HatenaBlogSubscriberCount";
            String driver = "org.apache.derby.jdbc.ClientDriver";
            String userName = "hbsc";
            String password = "hbsc";
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(dbUrl + dbName, userName, password);
            conn.setAutoCommit(false);

            PreparedStatement stmt = null;
            String blogurl = "";

            stmt = conn.prepareStatement("delete from BLOG_TWEETED");
            stmt.executeUpdate();

//ひとまずTLを取得
            Map<String, RateLimitStatus> ratelimitA = twitter.getRateLimitStatus("block", "statuses");
            RateLimitStatus ratelimit = ratelimitA.get("/statuses/user_timeline");
             System.out.println(ratelimit);
            
             for (int i = 1; i < ratelimit.getRemaining()-1; i++) {
             ResponseList statuses = twitter.getUserTimeline("hatenablog", new Paging(i, 200));

             for (Status status : statuses) {
             for (URLEntity urlentity : status.getURLEntities()) {
             URL url = new URL(urlentity.getExpandedURL());
             java.sql.Time time = new java.sql.Time(status.getCreatedAt().getTime());
             java.sql.Date date = new java.sql.Date(status.getCreatedAt().getDate());
                        
             stmt = conn.prepareStatement("insert into BLOG_TWEETED(POSTURL,POSTHOST,TWEETTIME,TWEETDATE) values(?,?,?,?) ");
             stmt.setString(1, url.toString());
             stmt.setString(2, url.getHost());
             stmt.setTime(3,  time);
             stmt.setDate(4,  date);
             stmt.executeUpdate();
             }
                    
             System.out.println(status.getText());
                    
             }
             }

//結果からSumallyの対象を集計             
           stmt = conn.prepareStatement("delete from BLOG_SUMALLY");
           stmt.executeUpdate();
            
            stmt = conn.prepareStatement("select POSTHOST from BLOG_TWEETED group by POSTHOST");
            ResultSet rs = stmt.executeQuery();
            rs.next();

//ひたすらデータを集計して突っ込む
            while (rs.next()) {
                blogurl = "http://" + rs.getString("POSTHOST");

                org.jsoup.nodes.Document document;
                try {
                    document = Jsoup.connect(blogurl).get();

                    String title = document.getElementsByTag("title").text();
                    document = Jsoup.connect(blogurl + "/about").get();
                    String subscriber = document.select("span.about-subscription-count").text().replaceAll(" 人", "");
                    String bloguser = document.select("html").attr("data-author");
                    /* for(org.jsoup.nodes.Element subscriber : document.select("div.info").select("a")){
                     System.out.println(subscriber.attr("href"));
                     }*/

                    System.out.println("title:" + title + " bloguser:" + bloguser + " subscriber:" + subscriber);

                    stmt = conn.prepareStatement("insert into BLOG_SUMALLY(BLOGURL,BLOGTITLE,BLOGUSER,SUBSCRIBER) values(?,?,?,?) ");
                    stmt.setString(1, rs.getString("POSTHOST"));
                    stmt.setString(2, title);
                    stmt.setString(3, bloguser);
                    stmt.setInt(4, parseInt(subscriber,0));
                    stmt.executeUpdate();


                } catch (Exception e) {
                }
            }
            conn.commit();
            conn.close();
        } catch (Exception e) {
            System.err.println(e.getMessage());
            e.printStackTrace();
        }
    }

    public static int parseInt(String value, int defaultValue) {
        try {
            // intに変換して返す
            return Integer.parseInt(value);
        } catch (NumberFormatException e) {
            // デフォルト値を返す
            return defaultValue;
        }
    }
}

ではでは、今日はこの辺で