唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

はてなブックマーク数が多い2016年のアドベントカレンダーの記事

QiitaとAdventarにあるアドベントカレンダーについて、個別の記事とカレンダー全体のはてなブックマーク数のランキングを27日の0時ごろに集計した
個別記事上位100件のURLについては軽く目で見て最近の記事でなかったりするURLをフィルタリングしてある(漏れはありそう

↓途中経過は下に
sucrose.hatenablog.com

ちなみにQiitaは公式のランキングがあります
Advent Calendar 2016ランキング - Qiita

カレンダーの合計ランキング

以下カレンダーとカレンダーに登録されている記事のはてなブックマークの合計数のランキング

順位 カレンダー名 はてなブックマーク数
1 はてな 4846
2 システムエンジニア 3453
3 LITALICO Engineers 2585
4 クラウドワークス 2393
5 Supership株式会社 1981
6 Linux 1943
7 トレタ 1871
8 DeepLearning 1791
9 N高 1508
10 Shell Script 1484
11 Fujitsu 1447
12 転職(その2) 1397
13 Ruby on Rails 1337
14 UI Design 1292
15 ピクシブ株式会社 1289
16 Recruit Engineers 1121
17 freee Engineers 1120
18 eureka 1111
19 さくらインターネット 1106
20 おうちハック 1092
21 React 1083
22 Emacs 1064
23 Goodpatch 1003
24 フリーランス残酷物語 974
25 Go 946
26 Product Manager 931
27 家庭を支える技術 905
28 Chainer 877
29 筋肉 852
30 Pepabo Managers 848
31 KMC 847
32 Deep Learning 809
33 機械学習に必要な高校数学やり直しアドベントカレンダー 790
34 Go (その3) 781
35 Yahoo! JAPAN Tech 751
36 ドワンゴ 750
37 Kobe University 718
38 pepabo 716
39 Go (その2) 686
40 Retty Inc. 633
41 Electron 616
42 pyspa 607
43 素数大富豪 604
44 KAYAC 589
45 feedforce 580
46 クローラー/Webスクレイピング 559
47 カノジョできないエンジニア 532
48 SHIROBAKO 528
49 Serverless 521
50 オールアバウト 517
51 GetWild 506
52 技術翻訳 505
53 Vim 498
54 Tech-Circle Hands on 488
55 MySQL Casual 485
56 ベーシック 482
57 FLASHer 472
58 Vim (その2) 470
59 Life is Tech ! 449
60 Akerun 438
61 Fablic 422
62 Docker 421
63 Speee 417
64 VAddy 401
65 イノベーター・ジャパン 387
66 Mackerel 382
67 つくりおき 377
68 CyberAgent Developers 367
69 iOS その2 364
70 C++ 358
71 なんでもセキュリティ 357
72 Slack 356
73 健康 354
74 FreeBSD 342
75 転職 339
76 CSS 338
77 今年読んだ一番好きな論文2016 333
78 脆弱性"&'<<>\ 329
79 ソフトウェアテスト 329
80 PHP 323
81 Mithril.js 301
82 CureApp 293
83 Ruby 292
84 ポエム 285
85 気に入ったインタビュー 281
86 自宅サーバの思い出 276
87 ドリコム 272
88 http2 263
89 Ambient for Christmas 262
90 Git 262
91 Python 244
92 Vim 8.0 233
93 TensorFlow 232
94 Haskell 230
95 Distributed computing (Apache Hadoop, Spark, ...) 213
96 第2のドワンゴ 211
97 Angular 211
98 フロントエンドエンジニア 207
99 Web Accessibility 200
100 KLab 198

記事別ランキング

アドベントカレンダー一覧ページも含む

順位 記事名 はてなブックマーク数 カレンダー名
1 質問は恥ではないし役に立つ - Qiita 2235 システムエンジニア
2 高校生にWeb上でプログラミングを教え始めたエンジニアがこの8ヶ月間で得た気づき - Qiita 1502 N高
3 プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita 1247 Shell Script
4 数千ページのワイヤーフレームを書いてきたWebディレクターがUI設計時に気を付けている8つのこと。 - 笑顔を創りたいWeb屋の日常 1179 UI Design
5 イケイケなベンチャーの開発チームが、大企業的な開発チームになってしまう5つの兆候 - Qiita 1123 クラウドワークス
6 プログラミング勉強を加速させる7つの習慣 - Qiita 1096 LITALICO Engineers
7 いまさら聞けないLinuxとメモリの基礎&vmstatの詳しい使い方 - Qiita 938 さくらインターネット
8 Emacsは衰退しました - Qiita 920 Emacs
9 【定番】 新しいWebサービスを開発・運営するときに使いたいサービス 【2016年末版】 - Qiita 831 トレタ
10 転職する時に必ずチェックしたい募集要項 - Qiita 830 転職(その2)
11 子どもがいる家庭で使うRaspberryPi&Slack | もやし工房 子どもがいる家庭で使うRaspberryPi&Slack – もやし工房 767 家庭を支える技術
12 文字列アルゴリズムの学びかた - Hatena Developer Blog 761 はてな
13 電気工事士の資格を取ってコンセントやスイッチを改造しようぜ - Qiita 743 おうちハック
14 府大生が趣味で世界一の認識精度を持つニューラルネットワークを開発してしまった論文を読んだ - Qiita 727 Deep Learning
15 DeepLearning研究 2016年のまとめ - Qiita 724 DeepLearning
16 低レイヤーの歩き方 - るくすの日記 ~ Out_Of_Range ~ 714 Kobe University
17 筋トレを継続する技術 - Qiita 713 筋肉
18 2016年、サーバーサイドエンジニアがゼロからReact/Reduxを学習したときの方法を振り返る | BLOG | 株式会社スタジオ・アルカナ 693 React
19 俺が悪かった。素直に間違いを認めるから、もうサービスクラスとか作るのは止めてくれ - Qiita 693 Ruby on Rails
20 マネジメントって何すればいいの〜?1年間マネジメントに向き合ったのでまとめを書きます - Qiita 688 Supership株式会社
21 ディープラーニングで「インド人を右に」を理解する: Generative Adversarial Network による画像モーフィング - 加藤大晴のウェブサイト 658 DeepLearning
22 ビビりなエンジニアが大企業を辞めて起業した話 - 最速配信研究会(@yamaz) 639 Supership株式会社
23 チームの良さを確認するためにやったこと - Web錯誤 626 Product Manager
24 次世代監視の大本命! Prometheus を実運用してみた - Qiita 593 freee Engineers
25 開発速度と品質のトレードオフの判断基準の合意 - Hatena Developer Blog 588 はてな
26 Retty流『2200万ユーザを支える機械学習基盤』の作り方 - Qiita 579 Retty Inc.
27 こんな私でもニューラルネットワークをスクラッチで実装できました(30歳 男性) - seri::diary 562 トレタ
28 「パッと見素数」に気をつけろ! - アジマティクス 553 素数大富豪
29 富士通がAdvent Calendarに参加することになった理由 - blog 545 Fujitsu
30 ゼネコンを九ヶ月で辞めた話 - (。・ω・。)ノ・☆':*;':* 532 KMC
31 Linuxネットワークドライバの開発 - Handwriting 518 Linux
32 初心者がchainerで線画着色してみた。わりとできた。 - Qiita 515 Chainer
33 10ms以下のレスポンスタイムを支える継続的負荷テスト - taketo957の日記 510 はてな
34 原理原則で理解するDocker - Qiita 507 オールアバウト
35 独断と偏見で選ぶ、新人Rubyプログラマの為の技術書21選 - Qiita 507 LITALICO Engineers
36 「関数型プログラミングって何?」日本語訳 - Okapies' Archive 493 技術翻訳
37 至高のDockerイメージ生成を求めて - Qiita 491 Supership株式会社
38 一から始めるJavaScriptユニットテスト - Hatena Developer Blog 486 はてな
39 フリーランスになって、嫌な思い出 - Qiita 475 フリーランス残酷物語
40 Linux スケジューラーのコア実装とシステムコール - Qiita 465 Linux
41 リクルートテクノロジーズのフロントエンド開発 2016 - from scratch 433 Recruit Engineers
42 単純作業を自動化して人類の無駄な時間をなくそう - 竹迫の近況報告 409 Recruit Engineers
43 画像認識対決 ~Microsoft VS Google VS IBM~ - Qiita 406 Life is Tech !
44 ドワンゴの呪い - @nalgami 400 転職(その2)
45 SELinux を使おう.使ってくれ. - Qiita 391 Linux
46 大きな組織で情報共有するためのOSSつくってみた - Qiita 365 Fujitsu
47 SIの現場のiOSアプリケーション開発 - Qiita 362 システムエンジニア
48 2016年のディープラーニング論文100選 - Qiita 351 Fujitsu
49 キャリアが気になる、35歳以降が気になるエンジニアのみなさんに43歳現役エンジニアからたったひとつのアドバイス - かっぱラクガキ帳 350 健康
50 コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記 346 C++
51 カノジョできないエンジニア Advent Calendar 2016 - Qiita 344 カノジョできないエンジニア
52 テスト計画の立て方 - Qiita 337 システムエンジニア
53 ほころびていくコミュニティとなかなかできない世代交代、そしてさよならアドベントカレンダー - Qiita 334 FreeBSD
54 フリーランスアニメーター 瀬川美里 - Konifar's WIP 334 SHIROBAKO
55 LinuxのARPとL2スイッチのお話 - masayoshiの日記 326 はてな
56 Redisアプリケーションパターン | おそらくはそれさえも平凡な日々 325 はてな
57 実録!!データ構造リファクタリング -- 僕とメッセージ機能の300日戦争 - Qiita 325 クラウドワークス
58 GitLabの運用方法をドーンと公開!! - pixiv inside 321 ピクシブ株式会社
59 コードレビューするのが怖いと思っていたエンジニアが半年間コードレビューを経験して思った 10 のこと - ポンコツWebエンジニアのかっこ悪く生きる日記 318 pepabo
60 はてな社内で行なっている機械学習勉強会について紹介します - Hatena Developer Blog 317 はてな
61 ネイピア数eの定義がなぜあの形か,先生は説明をしてくれなかった - ロボット・IT雑食日記 316 機械学習に必要な高校数学やり直しアドベントカレンダー
62 (短いビット長の)RSA暗号を解いてみる - clock-up-blog 314 なんでもセキュリティ
63 クリスマスなリア充すら羨む幸せを手に入れるため、新規事業に携わるエンジニアが持つべき12つの心構え - Qiita 299 LITALICO Engineers
64 Chrome拡張の権限でどこまで(悪いことを)できるのか?とその対策【デモあり】 - Qiita 298 Tech-Circle Hands on
65 サーバーサイドレンダリング不要論 - Qiita 296 Mithril.js
66 Flashが教えてくれたこと、HTML5で失ったもの。(仮 - Qiita 293 FLASHer
67 CSRFトークン インタビューズ - Qiita 293 VAddy
68 React のソースコードを読んでみよう! - マルシテイア 284 React
69 Linuxの不揮発メモリ対応について - Qiita 282 Linux
70 Railsで大規模アプリケーションを正しく設計するために避けるべき3つの機能 - Qiita 280 クラウドワークス
71 Ruby on Railsで作ったWebサービスを5倍速くしてメモリを半分以下にした話 - Qiita 265 ベーシック
72 JavaScript でも型チェックと契約による設計で安定した開発をする - Qiita 254 CureApp
73 GoでとあるAPIサーバを実装し直した話 - Mercari Engineering Blog 253 Go
74 Electron アプリをつくる時に便利なパッケージ - はやくプログラムになりたい 240 Electron
75 わけわかんない進化をゴチャゴチャ言わずに直接観察する話 - 雨に煙る 239 今年読んだ一番好きな論文2016
76 大規模Webアプリケーションにおける複雑性とアーキテクチャ設計に関する一考察 - Qiita 232 クラウドワークス
77 割れ窓理論を導入してWebサービスのクオリティに直結した話 - pixiv inside 230 ピクシブ株式会社
78 はてなブログのデプロイを約6倍高速化したはなし - Sexually Knowing 228 はてな
79 HTTP の新しいステータスコード 103 Early Hints | blog.jxck.io 225 http2
80 Go 言語 Webフレームワークはこれを使おう 2016年12月版 - Witch on the Other Shore 223 Go (その2)
81 今年のうちに知っておきたい!ES2017に入る5つの新仕様 - エンジニアをリングする 216 Goodpatch
82 GetWild Advent Calendar 2016 - Qiita 210 GetWild
83 マネージャーに期待すること | ペパボ社長ブログ 206 Pepabo Managers
84 Mackerelにおけるフロントエンドのパフォーマンス改善の取り組み - Hatena Developer Blog 192 はてな
85 私のロールモデル: エンジニア立ち居振舞い番外編 - ローファイ日記 189 pepabo
86 マイクロサービス時代に捧ぐ、Railsでの中規模APIサーバ開発のための技術構成 - Qiita 188 Ruby on Rails
87 エンジニア個人が自主的に成長するように促す - エンジニア組織の自律的成長 - 人間とウェブの未来 184 Pepabo Managers
88 女子高生だったときに気が狂ってWin98でサーバーをたてた話 - Catch me If you can 181 自宅サーバの思い出
89 PICTでテストケースの組み合わせ爆発にさよならを - エンジニアをリングする 180 Goodpatch
90 d . █████に入社してました 180 pyspa
91 2016年のサーバレスアーキテクチャ総まとめ - めもおきば 174 Serverless
92 機械学習で美少女化 ~ あるいはNEW GAME! の世界 ~ - Qiita 170 ドワンゴ
93 フリーランス残酷物語 Advent Calendar 2016 - Qiita 169 フリーランス残酷物語
94 サービスクラスについては僕も悪かったと思っているけど、それでもCQSは実現したいんだ - Qiita 168 Ruby on Rails
95 安全な脆弱性の作り方 - 葉っぱ日記 168 脆弱性"&'<<>\
96 ヤフーの社内システムを紹介します - Yahoo! JAPAN Tech Blog 165 Yahoo! JAPAN Tech
97 クリック・タッチを無効化するCSS「pointer-events: none;」がお手軽で便利 - Yahoo! JAPAN Tech Blog 164 Yahoo! JAPAN Tech
98 次に何を勉強するかを決めるための作戦 - hakobe-blog ♨ 163 はてな
99 静的解析ツール「RubyCritic」のUIが良くなっていたので紹介したいです! - パラボラアンテナと星の日記 163 feedforce
100 「ボトムアップの見かけはとても重要」 - ninjinkun's diary 161 Product Manager

ソースコード

結果の収集に使ったソースコード

# -*- coding: utf-8 -*-

import pyquery
import time
import requests

banned = set(['http://www.4gamer.net/games/074/G007497/20120713064/', 'http://horiemon.com/talk/11346/', 'https://twitter.com/', 'https://www.google.co.jp'])


def getQiitaCalendarList(year, page):
    calendar_list = pyquery.PyQuery(url='http://qiita.com/advent-calendar/{}/calendars?page={}'.format(year, page))
    calendars = set()
    for elm in calendar_list.find('.adventCalendarList_calendarTitle > a'):
        a = pyquery.PyQuery(elm)
        href = a.attr('href')
        calendars.add((href[22:], a.text()))
    return calendars

def getQiitaArticles(name):
    calendar = pyquery.PyQuery(url='http://qiita.com/advent-calendar/2016/{}'.format(name))
    article = set()
    for elm in calendar.find('.adventCalendarItem_entry > a'):
        a = pyquery.PyQuery(elm)
        url = a.attr('href')
        if 'http' in url and url not in banned:
            article.add(url)
    return article

def getAdventarCalendarList(year):
    calendar_list = pyquery.PyQuery(url='http://www.adventar.org/calendars?year={}'.format(year))
    urls = set()
    for elm in calendar_list.find('.mod-calendarList-title > a'):
        a = pyquery.PyQuery(elm)
        href = 'http://www.adventar.org' + a.attr('href')
        urls.add((href, a.text()))
    return urls

def getAdventarArticles(url):
    calendar = pyquery.PyQuery(url=url)
    article = set()
    for elm in calendar.find('.mod-entryList-url > a'):
        a = pyquery.PyQuery(elm)
        if 'http' in a.text() and a.attr('href') not in banned:
            url = a.attr('href')
            article.add(url)
    return article

def getHatenaBookmarkCount(urls):
    assert len(urls) <= 50
    try:
        return requests.get('http://api.b.st-hatena.com/entry.counts', params={'url': urls}).json()
    except:
        time.sleep(2)
        return requests.get('http://api.b.st-hatena.com/entry.counts', params={'url': urls}).json()

if __name__ == '__main__':
    result = []
    result_article = []
    
    calendars = set()
    for i in range(1, 27):
        calendars |= getQiitaCalendarList(2016, i)
        time.sleep(1)

    for name, title in calendars:
        articles = getQiitaArticles(name)
        calendar_url = 'http://qiita.com/advent-calendar/2016/' + name
        urls = [calendar_url] + list(articles)
        hatebu_count = getHatenaBookmarkCount(urls)
        result.append((sum(hatebu_count.values()), calendar_url, title))
        result_article.extend([(url, count, calendar_url, title) for url, count in hatebu_count.items()])
        time.sleep(1)
    
    calendars = getAdventarCalendarList(2016)
    time.sleep(1)
    
    for calendar_url, title in calendars:
        articles = getAdventarArticles(calendar_url)
        urls = [calendar_url] + list(articles)
        hatebu_count = getHatenaBookmarkCount(urls)
        result.append((sum(hatebu_count.values()), calendar_url, title))
        result_article.extend([(url, count, calendar_url, title) for url, count in hatebu_count.items()])
        time.sleep(1)
    
    result.sort(reverse=True)
    print u'|*順位|*カレンダー名|*はてなブックマーク数|'.encode('utf-8')
    for i, (count, name, title) in enumerate(result[:100], 1):
        print u'|{0}|<a href="{1}">{2}</a>|{3}|'.format(i, name, title, count).encode('utf-8')
    
    result_article.sort(key=lambda x: -x[1])
    print
    print u'|*順位|*記事名|*はてなブックマーク数|*カレンダー名|'.encode('utf-8')
    for i, (url, count, calendar_url, title) in enumerate(result_article[:100], 1):
        print u'|{0}|<a href="{1}">{2}</a>|{3}|<a href="{4}">{5}</a>|'.format(i, url, pyquery.PyQuery(url=url).find('title').text().replace('|', '&#x7c;'), count, calendar_url, title).encode('utf-8')
        time.sleep(1)