Qiitaいいな〜ランキング
Qiitaいいな〜ランキング:
「いいな〜」とは、いいねした人のことです。(「iine」に〇〇した人を表す「er」をつけて「iiner」)
QiitaのContributionsはいいねされた数(被いいね数)を中心に算出されますが、ここでは逆にいいねした数でランキングしてみました。
以下、「いいね数」という表記はいいねした数を表します。
先ずはデータの取得方法を説明します。
現在Qiitaの登録ユーザー数は30万人超です。
Qiita API ではユーザーリストを取得することができますが、最近ユーザー登録された1万人までしか取得できません。
Qiita API v2ドキュメント - ページネーション
Qiita API v2ドキュメント - GET /api/v2/users
そこで、ユーザー一覧のページをスクレイピングして全ユーザーのリストを取得しました。
ユーザー毎に以下のデータを取得しました。
Qiita API ではユーザー単位でいいね数やいいねした記事を取得することはできません。
そこでユーザーページの「いいねした記事」から取得しました。
ここの
最終いいね日とは、ユーザーが最後にいいねした日です。
ユーザーページからは記事をいいねした日は取得することはできませんが、いいねした記事の投稿日から推測できます。記事が投稿される前にいいねできるわけないので、いいねしたのは記事の投稿日以降になります。
ここでは、ユーザーの「いいねした記事」の1ページ目の中から最新の投稿日を取得してこれを最終いいね日としました。
いいねした直近20件がたまたま古い記事ばかりだとズレてしまうのですが、アクティブユーザーであるかどうかの大まかな判断に使えそうです。
2019/01/08頃に取得したデータです。
以下のユーザーは何度かリトライしましたが
https://qiita.com/kasumani/like
https://qiita.com/selious/like
有効ユーザー数は
「いいな〜」はいいねした記事があるユーザーの数です。
他にももっと詳細な統計と分析を書いていたのですが長くなるので別記事にします。
それではいいな〜ランキング上位300位の発表です。300位までにしたのは単に自分を入れたかっただけです。
いいね数が1万を超えるユーザーがいるというのはすごいですね。でもちゃんと記事を読んで評価しているんでしょうか。。。
それよりも驚きなのは、いいね数が多くても記事数・Contributionsが0のユーザーが目立つことです。
いいね数が多いユーザー = 活発なユーザー = 記事も書くユーザー だと思っていたのですが、どうやら違うようです。
Qiitaのいろいろランキング2018のContributions TOP100にランクインしている人は14人しかいませんでした。
最終いいね日を見るとほとんどが2018年12月以降ですが、中には1年以上前のユーザーもいます。
TOPいいな〜のほとんどはアクティブユーザーのようですが、休眠ユーザー・離脱ユーザーも少なからずいるようです。
データ取得に使用したコードの一部です。TypeScriptで書いています。
HTTPリクエストには node-fetch、HTMLパースには cheerio を使用しています。
良い記事を書くことはもちろんQiitaへの貢献なのですが、誰も評価(=いいね)しなかったら貢献とは見なされません。
そういう意味で、良い記事にいいねしていくことも立派な貢献ではないでしょうか。
良い記事というのはトレンドに上がったもの、みんながいいねしているものだけではありません。
例えば、初心者が書いた記事で自分にとって既知の情報であっても、良く書けている記事というのはたくさん存在します。
トレンド記事を後追いでいいねするのではなく、タグフィードなどをチェックしてこういった良記事を評価してあげることも大事だと思います。
「いいな〜」とは、いいねした人のことです。(「iine」に〇〇した人を表す「er」をつけて「iiner」)
QiitaのContributionsはいいねされた数(被いいね数)を中心に算出されますが、ここでは逆にいいねした数でランキングしてみました。
以下、「いいね数」という表記はいいねした数を表します。
データの取得方法
先ずはデータの取得方法を説明します。
全ユーザーリストの取得
現在Qiitaの登録ユーザー数は30万人超です。Qiita API ではユーザーリストを取得することができますが、最近ユーザー登録された1万人までしか取得できません。
Qiita API v2ドキュメント - ページネーション
Qiita API v2ドキュメント - GET /api/v2/users
そこで、ユーザー一覧のページをスクレイピングして全ユーザーのリストを取得しました。
ユーザー毎の取得データ
ユーザー毎に以下のデータを取得しました。- いいね数
- 最終いいね日
- 記事数
- Contributions
いいね数
Qiita API ではユーザー単位でいいね数やいいねした記事を取得することはできません。そこでユーザーページの「いいねした記事」から取得しました。
ここの
(ページ数-1)x20 + (最終ページの記事数)
がそのユーザーのいいね数になります。
最終いいね日
最終いいね日とは、ユーザーが最後にいいねした日です。ユーザーページからは記事をいいねした日は取得することはできませんが、いいねした記事の投稿日から推測できます。記事が投稿される前にいいねできるわけないので、いいねしたのは記事の投稿日以降になります。
ここでは、ユーザーの「いいねした記事」の1ページ目の中から最新の投稿日を取得してこれを最終いいね日としました。
いいねした直近20件がたまたま古い記事ばかりだとズレてしまうのですが、アクティブユーザーであるかどうかの大まかな判断に使えそうです。
取得データ統計
2019/01/08頃に取得したデータです。件数 | |
---|---|
全ユーザー数 | 308,635 |
停止アカウント | 15,532 |
エラー | 2 |
有効ユーザー | 293,101 |
いいな〜 | 117,494 |
502: Bad Gateway
で取得できませんでした。いいね数が多すぎるんでしょうかね?https://qiita.com/kasumani/like
https://qiita.com/selious/like
有効ユーザー数は
全ユーザー数 - 停止アカウント - エラー
です。「いいな〜」はいいねした記事があるユーザーの数です。
他にももっと詳細な統計と分析を書いていたのですが長くなるので別記事にします。
いいな〜ランキング
それではいいな〜ランキング上位300位の発表です。300位までにしたのは単に自分を入れたかっただけです。ランク | ユーザー | いいね数 | 記事数 | contributions | 最終いいね日 |
---|---|---|---|---|---|
1 | @hiro_matsuno2 | 30,990 | 6 | 71 | 2019/01/06 |
2 | @morika-t | 27,487 | 0 | 2 | 2018/12/27 |
3 | @Noboruhi | 22,988 | 5 | 53 | 2019/01/07 |
4 | @Reds | 14,737 | 0 | 0 | 2018/07/28 |
5 | @Neos21 | 12,155 | 0 | 0 | 2019/01/07 |
6 | @wivern888 | 8,331 | 0 | 0 | 2019/01/04 |
7 | @rentalname@github | 7,140 | 15 | 139 | 2019/01/07 |
8 | @snona | 6,928 | 1 | 32 | 2019/01/06 |
9 | @alt | 6,856 | 0 | 6,214 | 2018/12/29 |
10 | @tos-miyake | 5,726 | 39 | 892 | 2018/12/31 |
11 | @tsuyoshi_cho | 5,707 | 41 | 450 | 2018/07/29 |
12 | @mero | 5,414 | 0 | 0 | 2017/05/16 |
13 | @okumurakengo | 5,230 | 18 | 320 | 2019/01/07 |
14 | @ykominami | 5,021 | 0 | 0 | 2018/12/15 |
15 | @7of9 | 4,763 | 5,831 | 4,892 | 2019/01/08 |
16 | @fumiyasac@github | 4,655 | 43 | 2,855 | 2018/12/31 |
17 | @mono0926 | 4,618 | 94 | 15,740 | 2019/01/07 |
18 | @hnakamur | 4,520 | 187 | 5,589 | 2018/12/29 |
19 | @ThisIzuLove | 4,340 | 0 | 0 | 2018/12/05 |
20 | @bells17 | 4,232 | 35 | 211 | 2018/12/18 |
21 | @zaoriku0 | 4,170 | 18 | 87 | 2019/01/01 |
22 | @tomookaku | 4,068 | 0 | 0 | 2018/03/14 |
23 | @heliac2000 | 4,026 | 0 | 154 | 2018/12/22 |
24 | @Spike | 3,955 | 0 | 0 | 2018/12/23 |
25 | @bonk | 3,893 | 137 | 388 | 2019/01/03 |
26 | @daicon-oroshi | 3,872 | 0 | 0 | 2019/01/06 |
27 | @minewebstaff | 3,824 | 2 | 39 | 2018/10/16 |
28 | @n_slender | 3,822 | 147 | 1,385 | 2019/01/06 |
29 | @tatsuya6502 | 3,711 | 42 | 1,735 | 2018/12/23 |
30 | @mpyw | 3,668 | 282 | 20,376 | 2018/12/27 |
31 | @cutmail | 3,667 | 10 | 844 | 2018/12/21 |
32 | @ishideo | 3,601 | 0 | 0 | 2017/10/13 |
33 | @morozumi_h | 3,582 | 21 | 943 | 2018/12/24 |
34 | @sibukixxx | 3,466 | 7 | 42 | 2018/12/25 |
35 | @silverskyvicto | 3,341 | 77 | 160 | 2019/01/05 |
36 | @JunSuzukiJapan | 3,329 | 179 | 1,535 | 2019/01/07 |
37 | @teruichi81 | 3,309 | 2 | 76 | 2019/01/05 |
38 | @kimihiro_n | 3,305 | 28 | 1,425 | 2019/01/06 |
39 | @sora0077@github | 3,247 | 38 | 617 | 2018/12/27 |
40 | @fantm21 | 3,227 | 72 | 1,716 | 2018/12/09 |
41 | @tenmyo | 3,220 | 16 | 289 | 2019/01/03 |
42 | @osawasatoru | 3,203 | 0 | 0 | 2019/01/05 |
43 | @ndxbn | 3,058 | 58 | 792 | 2019/01/04 |
44 | @yuta_oxo | 3,048 | 0 | 0 | 2019/01/05 |
45 | @NaohiroKashimoto | 3,008 | 0 | 0 | 2018/10/22 |
46 | @hiromichinomata | 2,997 | 9 | 68 | 2018/12/26 |
47 | @Hiro_Matsuno | 2,992 | 0 | 0 | 2018/12/13 |
48 | @intermezzo-fr | 2,985 | 10 | 324 | 2018/12/22 |
49 | @karumado | 2,969 | 19 | 100 | 2019/01/05 |
50 | @nasum | 2,967 | 57 | 826 | 2019/01/06 |
51 | @m0a | 2,958 | 87 | 2,239 | 2019/01/05 |
52 | @bluepicky | 2,947 | 0 | 11 | 2019/01/07 |
53 | @haiju | 2,940 | 0 | 0 | 2018/10/24 |
54 | @kimukou | 2,937 | 0 | 32 | 2018/12/25 |
55 | @riocampos | 2,921 | 80 | 3,029 | 2018/11/14 |
56 | @typista | 2,915 | 11 | 134 | 2017/07/21 |
57 | @blp1526 | 2,903 | 6 | 88 | 2017/12/24 |
58 | @poad1010 | 2,844 | 72 | 504 | 2019/01/04 |
59 | @SuguruOoki | 2,827 | 88 | 166 | 2019/01/06 |
60 | @junichi | 2,812 | 2 | 31 | 2018/12/27 |
61 | @QUANON | 2,806 | 192 | 3,864 | 2019/01/04 |
62 | @bzgyma | 2,790 | 0 | 0 | 2015/09/19 |
63 | @twinbee | 2,789 | 27 | 259 | 2019/01/08 |
64 | @croudsky | 2,729 | 0 | 0 | 2019/01/01 |
65 | @1-AizawaSatoshi | 2,727 | 12 | 135 | 2018/12/15 |
66 | @akmiyoshi | 2,710 | 39 | 631 | 2014/12/18 |
67 | @hmcGit | 2,670 | 12 | 162 | 2019/01/04 |
67 | @ozaki_shigenobu | 2,670 | 0 | 0 | 2017/05/01 |
69 | @kenichi_cc | 2,628 | 16 | 3,345 | 2019/01/05 |
69 | @nilfigo | 2,628 | 6 | 92 | 2019/01/03 |
71 | @shimabukuro | 2,610 | 0 | 0 | 2019/01/05 |
72 | @saicologic | 2,605 | 89 | 708 | 2019/01/06 |
73 | @takarake | 2,575 | 28 | 125 | 2019/01/07 |
74 | @funnything | 2,556 | 9 | 178 | 2019/01/07 |
75 | @shuu56 | 2,551 | 0 | 2 | 2019/01/07 |
76 | @futoase | 2,533 | 101 | 4,548 | 2019/01/05 |
77 | @LightSpeedC | 2,532 | 39 | 2,623 | 2018/12/28 |
78 | @wint | 2,485 | 1 | 46 | 2019/01/06 |
79 | @kysnm | 2,424 | 16 | 136 | 2018/09/19 |
80 | @MegaBlackLabel | 2,379 | 11 | 495 | 2019/01/03 |
81 | @Ozuma | 2,378 | 0 | 0 | 2018/05/11 |
82 | @tokusyu | 2,353 | 0 | 2 | 2019/01/07 |
83 | @jkr_2255 | 2,333 | 370 | 4,129 | 2019/01/04 |
84 | @thoriums | 2,326 | 1 | 5 | 2018/12/24 |
85 | @kjunichi | 2,317 | 267 | 1,370 | 2018/12/25 |
86 | @Reyurnible | 2,308 | 22 | 4,197 | 2018/12/25 |
87 | @sakebook | 2,305 | 4 | 258 | 2019/01/06 |
88 | @giwa | 2,297 | 93 | 417 | 2018/12/27 |
89 | @__2 | 2,287 | 0 | 0 | 2015/09/16 |
90 | @__3 | 2,286 | 0 | 0 | 2015/09/17 |
90 | @teracy | 2,286 | 22 | 186 | 2019/01/06 |
92 | @redshoga | 2,285 | 44 | 641 | 2019/01/06 |
93 | @myblue | 2,282 | 0 | 0 | 2018/01/21 |
94 | @Nimimal | 2,275 | 142 | 1,277 | 2019/01/05 |
95 | @Humangas | 2,272 | 15 | 621 | 2018/12/19 |
96 | @quenhulu | 2,263 | 19 | 243 | 2018/12/12 |
97 | @mAster_rAdio | 2,251 | 33 | 144 | 2018/08/24 |
98 | @touyoubuntu | 2,236 | 40 | 1,012 | 2018/12/25 |
99 | @perlunit | 2,229 | 0 | 0 | 2018/12/22 |
100 | @__4 | 2,226 | 0 | 0 | 2015/09/02 |
101 | @opponitur | 2,213 | 0 | 0 | 2018/04/02 |
102 | @ktty1220 | 2,208 | 26 | 1,334 | 2018/12/12 |
103 | @soyanchu | 2,199 | 27 | 3,680 | 2018/10/25 |
104 | @keisei_1092 | 2,179 | 63 | 405 | 2018/10/18 |
105 | @nogaki | 2,164 | 0 | 0 | 2019/01/06 |
106 | @Alice_Season | 2,158 | 0 | 0 | 2015/09/17 |
107 | @kuro_kaeru | 2,149 | 0 | 0 | 2015/09/19 |
108 | @zaqz_yamato | 2,141 | 0 | 1 | 2018/08/08 |
109 | @kaizen_nagoya | 2,132 | 1,242 | 3,227 | 2018/10/27 |
110 | @Hakurei_Reimu | 2,115 | 0 | 0 | 2015/09/18 |
111 | @takuan_osho | 2,114 | 15 | 399 | 2018/12/07 |
112 | @tamanobi | 2,113 | 22 | 286 | 2019/01/05 |
113 | @mnuma | 2,112 | 16 | 617 | 2018/12/20 |
114 | @MasatoYoshioka@github | 2,102 | 29 | 439 | 2018/12/17 |
115 | @kaiware007 | 2,090 | 10 | 332 | 2019/01/07 |
116 | @ats777 | 2,087 | 0 | 2 | 2019/01/06 |
117 | @17number | 2,082 | 2 | 49 | 2018/12/20 |
118 | @Touhou | 2,080 | 0 | 0 | 2015/09/15 |
119 | @SatoTakeshiX | 2,075 | 50 | 781 | 2018/12/09 |
120 | @Twin_Drive | 2,070 | 0 | 0 | 2015/09/19 |
121 | @taku1201 | 2,060 | 6 | 50 | 2018/12/27 |
122 | @LordOfNightmare | 2,056 | 0 | 0 | 2018/12/22 |
122 | @sounisi5011 | 2,056 | 42 | 1,496 | 2018/12/20 |
124 | @cisco_gxr | 2,034 | 0 | 0 | 2015/09/19 |
125 | @cvusk | 2,032 | 67 | 1,631 | 2019/01/04 |
126 | @applideveloper | 2,019 | 11 | 548 | 2019/01/06 |
127 | @tadsan | 2,004 | 192 | 10,841 | 2018/12/31 |
128 | @hiroaki-dev | 2,001 | 2 | 34 | 2019/01/06 |
129 | @makopy_inside | 2,000 | 9 | 25 | 2019/01/07 |
130 | @suica | 1,999 | 0 | 0 | 2019/01/05 |
131 | @ktykogm | 1,997 | 1 | 12 | 2019/01/05 |
132 | @morinpic | 1,974 | 0 | 0 | 2018/12/25 |
133 | @yshr446 | 1,973 | 0 | 0 | 2019/01/05 |
134 | @licht | 1,968 | 0 | 0 | 2019/01/06 |
135 | @webgyo | 1,953 | 1 | 4 | 2018/10/30 |
136 | @DolphinJP | 1,951 | 0 | 0 | 2018/11/27 |
137 | @shima11 | 1,946 | 0 | 0 | 2018/09/10 |
138 | @acro5piano | 1,942 | 201 | 4,808 | 2019/01/04 |
139 | @travitu | 1,941 | 0 | 0 | 2018/12/10 |
140 | @shiozaki | 1,940 | 79 | 2,271 | 2019/01/07 |
140 | @hndr | 1,940 | 0 | 0 | 2018/12/11 |
142 | @saitotak | 1,935 | 45 | 4,465 | 2018/12/29 |
143 | @satotin | 1,932 | 151 | 848 | 2019/01/07 |
144 | @konaka | 1,931 | 0 | 0 | 2018/05/10 |
145 | @manzyun | 1,930 | 31 | 419 | 2019/01/05 |
146 | @droibit | 1,928 | 21 | 805 | 2018/12/21 |
147 | @hamu502 | 1,926 | 0 | 0 | 2018/08/10 |
147 | @uri | 1,926 | 59 | 1,475 | 2019/01/04 |
147 | @ukisoft | 1,926 | 38 | 439 | 2018/12/31 |
150 | @TomoyaIgarashi | 1,925 | 15 | 69 | 2018/12/08 |
151 | @yahihi | 1,909 | 30 | 600 | 2018/12/31 |
152 | @doorfkin | 1,908 | 0 | 0 | 2018/09/22 |
153 | @mesiobass | 1,904 | 1 | 21 | 2018/12/20 |
154 | @piacere_ex | 1,896 | 91 | 1,853 | 2019/01/06 |
155 | @sekka | 1,893 | 0 | 0 | 2016/12/02 |
156 | @takehito-koshimizu | 1,890 | 6 | 77 | 2018/12/31 |
157 | @susieyy | 1,887 | 50 | 12,110 | 2018/12/09 |
158 | @tamadon | 1,884 | 12 | 176 | 2018/12/27 |
159 | @mfks17 | 1,881 | 30 | 429 | 2018/12/25 |
160 | @umeneri | 1,876 | 23 | 101 | 2018/12/24 |
161 | @daikiojm | 1,871 | 95 | 1,040 | 2018/12/31 |
161 | @kesuzuki | 1,871 | 11 | 238 | 2019/01/04 |
163 | @kyamane | 1,868 | 0 | 0 | 2018/06/17 |
164 | @tadauki | 1,866 | 0 | 0 | 2018/11/12 |
165 | @KatagiriSo | 1,860 | 49 | 363 | 2018/12/14 |
166 | @tukiyo3 | 1,852 | 1,604 | 10,117 | 2018/12/18 |
167 | @ytakky | 1,847 | 0 | 0 | 2017/05/04 |
168 | @daichan4649@github | 1,844 | 0 | 0 | 2018/12/28 |
169 | @cheezenaan | 1,840 | 1 | 4 | 2018/12/29 |
170 | @htomine | 1,826 | 4 | 656 | 2019/01/04 |
170 | @yyano | 1,826 | 43 | 415 | 2018/12/27 |
172 | @dkt | 1,822 | 0 | 0 | 2018/06/05 |
173 | @sakatuba@github | 1,817 | 4 | 88 | 2019/01/07 |
173 | @syug | 1,817 | 4 | 38 | 2018/12/28 |
175 | @teradonburi | 1,815 | 101 | 5,660 | 2019/01/04 |
176 | @tripmatango | 1,813 | 3 | 11 | 2019/01/03 |
176 | @nrhide | 1,813 | 0 | 0 | 2018/12/18 |
178 | @yousan | 1,808 | 126 | 2,717 | 2019/01/05 |
179 | @sh1928kd | 1,803 | 2 | 18 | 2019/01/03 |
180 | @a_yasui | 1,796 | 156 | 1,560 | 2019/01/07 |
181 | @hirokaki | 1,788 | 0 | 0 | 2016/11/29 |
182 | @opengl-8080 | 1,781 | 264 | 19,969 | 2018/12/24 |
183 | @manners | 1,777 | 0 | 0 | 2017/12/13 |
183 | @ykhroki | 1,777 | 0 | 0 | 2018/07/09 |
185 | @xxxDATxxx | 1,773 | 7 | 43 | 2019/01/06 |
186 | @takecy | 1,768 | 4 | 68 | 2019/01/01 |
187 | @sasurai_usagi3 | 1,766 | 34 | 626 | 2018/12/27 |
188 | @toshiyuki | 1,764 | 0 | 0 | 2017/10/23 |
189 | @idahobean | 1,751 | 5 | 15 | 2019/01/02 |
190 | @naari3 | 1,747 | 7 | 74 | 2019/01/03 |
191 | @p-o-t-s | 1,746 | 6 | 25 | 2019/01/04 |
192 | @t44cd | 1,745 | 2 | 12 | 2019/01/01 |
193 | @helloinfoloth | 1,743 | 1 | 2 | 2016/11/15 |
194 | @b4b4r07 | 1,739 | 57 | 14,809 | 2017/06/21 |
195 | @aki77 | 1,731 | 16 | 245 | 2018/12/15 |
196 | @tammifull | 1,730 | 0 | 0 | 2019/01/01 |
197 | @ynott | 1,728 | 86 | 730 | 2019/01/06 |
198 | @takaken | 1,720 | 5 | 15 | 2018/12/22 |
199 | @samuraijap | 1,714 | 5 | 34 | 2019/01/06 |
200 | @pirohiropiro | 1,711 | 0 | 4 | 2019/01/03 |
201 | @shy_azusa | 1,703 | 20 | 332 | 2018/10/23 |
202 | @ongaeshi | 1,693 | 153 | 2,335 | 2018/12/25 |
203 | @st450 | 1,681 | 30 | 136 | 2018/12/26 |
204 | @SaitoTsutomu | 1,676 | 223 | 2,986 | 2019/01/05 |
205 | @hidepon4162 | 1,675 | 0 | 0 | 2019/01/04 |
205 | @singo405 | 1,675 | 2 | 123 | 2018/12/27 |
207 | @mm36 | 1,667 | 73 | 1,868 | 2018/12/27 |
208 | @letusfly85 | 1,649 | 61 | 565 | 2018/12/24 |
209 | @usiusi360 | 1,642 | 34 | 1,247 | 2018/12/25 |
210 | @koara-local | 1,641 | 237 | 3,083 | 2018/12/07 |
211 | @syokenz | 1,639 | 16 | 605 | 2018/12/25 |
211 | @HideNaka | 1,639 | 4 | 20 | 2018/12/28 |
213 | @veryblue | 1,636 | 2 | 63 | 2018/12/21 |
214 | @n-oshiro | 1,634 | 61 | 1,088 | 2019/01/01 |
215 | @dnby | 1,632 | 0 | 0 | 2017/02/14 |
216 | @ken0nek | 1,622 | 31 | 1,241 | 2019/01/02 |
217 | @ysk_brave | 1,615 | 3 | 10 | 2019/01/05 |
218 | @umihico | 1,613 | 2 | 37 | 2018/12/04 |
219 | @kkawauchi | 1,609 | 2 | 1 | 2019/01/07 |
220 | @iskw | 1,607 | 0 | 0 | 2019/01/03 |
221 | @snaka | 1,601 | 385 | 3,466 | 2018/12/26 |
222 | @kanase | 1,600 | 1 | 41 | 2018/12/18 |
223 | @tell | 1,597 | 17 | 77 | 2018/12/13 |
224 | @kiimiiis | 1,592 | 73 | 1,042 | 2018/12/31 |
225 | @gachakra | 1,589 | 0 | 0 | 2018/12/04 |
225 | @snowholic | 1,589 | 0 | 0 | 2019/01/03 |
227 | @seiiichi_o | 1,585 | 2 | 52 | 2019/01/06 |
228 | @delta93815 | 1,584 | 0 | 0 | 2017/11/28 |
229 | @sgr-ksmt | 1,577 | 44 | 1,368 | 2019/01/07 |
229 | @sukune332 | 1,577 | 0 | 0 | 2018/09/13 |
231 | @yumios | 1,576 | 0 | 0 | 2019/01/01 |
232 | @yoshifuji | 1,572 | 16 | 41 | 2018/12/25 |
233 | @shunsuke | 1,569 | 0 | 0 | 2018/12/21 |
234 | @yoshimaa | 1,566 | 0 | 0 | 2018/12/15 |
235 | @yu01 | 1,563 | 10 | 33 | 2018/05/27 |
236 | @koogawa | 1,553 | 70 | 6,002 | 2019/01/05 |
237 | @r-ngtm | 1,552 | 138 | 1,897 | 2018/12/27 |
238 | @polidog | 1,550 | 38 | 623 | 2018/12/27 |
239 | @shogito | 1,549 | 2 | 81 | 2018/08/27 |
239 | @spiegel-im-spiegel | 1,549 | 91 | 2,292 | 2018/12/03 |
241 | @Shunta_Suzuki | 1,545 | 0 | 0 | 2018/07/13 |
242 | @mom0tomo | 1,541 | 45 | 475 | 2019/01/03 |
243 | @kurosawa_kuro | 1,536 | 29 | 745 | 2019/01/01 |
243 | @wonton14 | 1,536 | 12 | 79 | 2019/01/06 |
245 | @Blacpans | 1,533 | 4 | 22 | 2019/01/03 |
246 | @ayaniimi213 | 1,532 | 20 | 208 | 2019/01/03 |
247 | @hkwid | 1,527 | 7 | 119 | 2019/01/07 |
248 | @terrierscript | 1,525 | 131 | 6,671 | 2018/12/14 |
249 | @tomiacannondale | 1,517 | 5 | 9 | 2018/03/27 |
250 | @morizotter | 1,513 | 49 | 2,129 | 2018/12/10 |
251 | @htks0720 | 1,512 | 0 | 0 | 2017/08/17 |
252 | @okoppe8 | 1,506 | 61 | 1,625 | 2019/01/06 |
253 | @uni | 1,503 | 0 | 0 | 2018/12/28 |
253 | @ymiyamae | 1,503 | 30 | 274 | 2018/06/05 |
255 | @ainame | 1,497 | 28 | 854 | 2018/12/17 |
256 | @shinriyo@github | 1,492 | 25 | 574 | 2018/10/31 |
256 | @sirokujira | 1,492 | 5 | 1 | 2018/12/28 |
258 | @COBRA0318 | 1,488 | 0 | 0 | 2018/02/12 |
258 | @moto_pipedo | 1,488 | 8 | 76 | 2019/01/06 |
260 | @igiy | 1,485 | 1 | 2 | 2019/01/06 |
261 | @cigalecigales | 1,481 | 45 | 1,872 | 2018/12/30 |
262 | @plasticstraw | 1,480 | 13 | 472 | 2018/09/21 |
263 | @61503891 | 1,477 | 53 | 538 | 2018/12/26 |
264 | @ozw_sei | 1,473 | 78 | 1,030 | 2018/12/24 |
265 | @wgkoro@github | 1,465 | 3 | 98 | 2018/12/25 |
266 | @yusabana | 1,464 | 34 | 2,817 | 2018/12/15 |
267 | @nagakenjs | 1,461 | 2 | 104 | 2018/08/24 |
268 | @carotene4035 | 1,456 | 13 | 2,987 | 2019/01/06 |
269 | @yuyawata | 1,455 | 0 | 0 | 2018/04/18 |
270 | @SNAMGN | 1,454 | 7 | 13 | 2019/01/06 |
271 | @te20 | 1,453 | 11 | 146 | 2018/12/30 |
272 | @jTakasuRyuji | 1,450 | 107 | 431 | 2018/12/19 |
272 | @ddsystem | 1,450 | 1 | 8 | 2019/01/03 |
274 | @jack-low | 1,447 | 38 | 220 | 2019/01/05 |
274 | @tjun1 | 1,447 | 0 | 0 | 2018/10/11 |
276 | @scivola | 1,446 | 79 | 3,841 | 2019/01/08 |
277 | @hogenishi | 1,441 | 1 | 4 | 2019/01/04 |
278 | @yuku_t | 1,438 | 205 | 18,693 | 2018/12/27 |
279 | @SuperAlloyZZ | 1,436 | 0 | 0 | 2018/08/14 |
279 | @soundTricker | 1,436 | 86 | 4,281 | 2018/12/23 |
281 | @dyoshikawa | 1,433 | 32 | 121 | 2019/01/05 |
282 | @ono_tug | 1,432 | 1 | 7 | 2018/12/22 |
283 | @gonjitti | 1,430 | 0 | 0 | 2018/09/03 |
284 | @ikemura23 | 1,429 | 60 | 161 | 2018/12/26 |
285 | @AnzNetJp | 1,428 | 14 | 162 | 2019/01/03 |
286 | @hironow | 1,427 | 0 | 0 | 2018/12/25 |
287 | @ina_ryu | 1,424 | 4 | 13 | 2018/05/13 |
288 | @diamonddai | 1,422 | 1 | 6 | 2019/01/01 |
289 | @naohta | 1,420 | 0 | 1 | 2019/01/07 |
290 | @amaron518 | 1,419 | 0 | 0 | 2018/01/21 |
290 | @sujii | 1,419 | 0 | 0 | 2018/12/25 |
292 | @redamoon | 1,418 | 54 | 1,915 | 2018/12/20 |
293 | @uasi | 1,417 | 118 | 10,655 | 2019/01/06 |
294 | @usagimaru | 1,406 | 177 | 9,669 | 2018/12/22 |
295 | @gungle | 1,405 | 5 | 52 | 2019/01/05 |
295 | @shuheilab | 1,405 | 0 | 0 | 2018/12/07 |
297 | @tag1216 | 1,404 | 110 | 9,764 | 2019/01/06 |
298 | @ygkn | 1,401 | 31 | 1,074 | 2018/11/14 |
299 | @taka_kobayashi | 1,393 | 0 | 0 | 2018/05/13 |
300 | @yyh-gl | 1,392 | 11 | 93 | 2019/01/05 |
それよりも驚きなのは、いいね数が多くても記事数・Contributionsが0のユーザーが目立つことです。
いいね数が多いユーザー = 活発なユーザー = 記事も書くユーザー だと思っていたのですが、どうやら違うようです。
Qiitaのいろいろランキング2018のContributions TOP100にランクインしている人は14人しかいませんでした。
最終いいね日を見るとほとんどが2018年12月以降ですが、中には1年以上前のユーザーもいます。
TOPいいな〜のほとんどはアクティブユーザーのようですが、休眠ユーザー・離脱ユーザーも少なからずいるようです。
ソースの一部抜粋
データ取得に使用したコードの一部です。TypeScriptで書いています。HTTPリクエストには node-fetch、HTMLパースには cheerio を使用しています。
qiita.ts
import {URL, resolve} from "url"; import * as cheerio from "cheerio"; import fetch from "node-fetch"; const QIITA_URL = "https://qiita.com/"; const opt = { headers: { 'Accept-Language': 'ja' } }; const fetchHtml = async (url: string): Promise<CheerioStatic> => { const response = await fetch(url, opt); if (response.status >= 500) { throw new Error(`status: ${response.status} ${response.text()}`); } const text = await response.text(); return cheerio.load(text); }; export class UsersPage { static CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".split(''); static async fetch(char: string, page: number): Promise<UsersPage> { const url = resolve(QIITA_URL, `/users?char=${char}&page=${page}`); const $ = await fetchHtml(url); return new UsersPage($, page); } constructor(readonly $: CheerioStatic, readonly pageNumber: number) {} get users(): string[] { const users = this.$('.UsersPage__user'); return users.map((i, user) => this.$(this.$(user).find('.media__body a')[0]).text()).get(); } get nextLink() { const nextLink = this.$('.pagination a[rel=next]'); return nextLink ? this.$(nextLink).attr('href') : null; } } export class UserPage { static ITEMS_PER_PAGE = 20; constructor(readonly $: CheerioStatic, readonly username: string) {} get suspended(): boolean { return this.$('.er-SuspendedUser').length !== 0; } get contributions() { return parseInt(this.$(`a[href='/${this.username}/contributions'] span`).first().text()); }; get itemsCount() { return parseInt(this.$(`a[href='/${this.username}'] span`).first().text()); } } export class LikeArticle { constructor(readonly $: CheerioStatic, readonly article: Cheerio) {} get date() { const text = this.article.find('.ItemLink__info').first().text(); return text.match(/[0-9]{4}\/[0-9]{2}\/[0-9]{2}/)[0]; } } export class LikesPage extends UserPage { static async fetch(username: string, page: number = 1): Promise<LikesPage> { const $ = await fetchHtml(resolve(QIITA_URL, `/${username}/like?page=${page}`)); return new LikesPage($, username, page); } static async iterator(user: string) { const firstPage = await this.fetch(user, 1); const last = firstPage.lastPageNumber; return { page: 0, hasNext() { return this.page <= last; }, async next() { this.page++; return this.page === 1 ? firstPage : await LikesPage.fetch(user, this.page); }, }; } static async getLikesCount(page: LikesPage): Promise<number> { const lastPageNumber = page.lastPageNumber; if (lastPageNumber <= 1) { return page.likes.length; } const lastPage = await this.fetch(page.username, lastPageNumber); return (lastPageNumber - 1) * this.ITEMS_PER_PAGE + lastPage.likes.length; } constructor(readonly $: CheerioStatic, readonly username: string, readonly pageNumber: number) { super($, username); } get likes(): LikeArticle[] { return this.$('.tableList article').map((i, article) => { return new LikeArticle(this.$, this.$(article)); }).get() as LikeArticle[]; } get lastPageNumber(): number { const pageLinks = this.$('.pagination a'); if (!pageLinks.length) { return 1; } const lastUrl = resolve(QIITA_URL, pageLinks.last().attr('href')); return parseInt(new URL(lastUrl).searchParams.get('page'), 10); } }
最後に、言いたいこと
良い記事を書くことはもちろんQiitaへの貢献なのですが、誰も評価(=いいね)しなかったら貢献とは見なされません。そういう意味で、良い記事にいいねしていくことも立派な貢献ではないでしょうか。
良い記事というのはトレンドに上がったもの、みんながいいねしているものだけではありません。
例えば、初心者が書いた記事で自分にとって既知の情報であっても、良く書けている記事というのはたくさん存在します。
トレンド記事を後追いでいいねするのではなく、タグフィードなどをチェックしてこういった良記事を評価してあげることも大事だと思います。
コメント
コメントを投稿