Help us understand the problem. What is going on with this article?

今年1番期待のアドベントカレンダーは!?

More than 1 year has passed since last update.

アドベントカレンダー多すぎ問題

今年もアドベントカレンダーの季節になってきましたが…
アドベントカレンダー多すぎません?
全部は流石に見れないですよね…
そこで期待できそうなアドベントカレンダーを見たいので、どのアドベントカレンダーが期待できるか見てみましょう。
あと僕の作った闇の魔術に対する防衛術が一番人気そうだから調べたいってのもある
時間があったら追加でいろいろ書きます。

どうやって調べるよう…

(こんなの調べても)ご褒美はないんだぞ?
とりあえず
$購読者が多い=期待されている$
とかいう、ガバガバ論理で行きます

どうやってデータ集めよう…

スクレイピングします、適当にスクレイピングのコードを書きます。
5分で書いたので汚いコードなのは、お兄さん許して亭ゆるして
ただいっぱいリクエストを投げると、サーバー壊れちゃぁぅ↑のでスリープはちゃんと入れます。とりあえず5秒あったらいいでしょ

import json
import requests
from bs4 import BeautifulSoup
from time import sleep

now_pos = 1
ad_dict = {}
while True:
    url = "https://qiita.com/advent-calendar/2018/calendars?page="+str(now_pos)
    html = requests.get(url).text
    bsObj = BeautifulSoup(html, "lxml")
    td = bsObj.find("tbody")
    if len(td.find_all("a")) == 0:
        break
    sleep(5)
    for a in td.find_all("a"):
        if "/advent-calendar/2018/" in a.get("href"):
            cal = requests.get("https://qiita.com" + a.get("href")).text
            cal_bsObj = BeautifulSoup(cal, "lxml")
            title = cal_bsObj.find("title").contents[0].replace("Advent Calendar 2018 - Qiita", "").strip()
            num = cal_bsObj.find("div", {"title":"Subscribers"})
            ad_dict[title] = num.contents[1]
            sleep(5)
    print(now_pos, end="\r")
    now_pos += 1
with open("qiita_advent_calendar_subscriber.json", "w", encoding="utf-16") as file:
    json.dump(ad_dict, file, indent=4)

このコードを動かすとqiita_advent_calendar_subscriber.jsonに

{
    "カレンダー名":"購読者数",
              ︙
}

という形で格納されます。
高読者数が整数じゃなくて文字列なのは変換し忘れていただけです、僕のせいではありません。
ゴルゴムか乾巧って奴の仕業なんだ。

でけた

早速ランキング形式で見ましょう。とりあえず以下のコードを動かします。

import json

with open("qiita_advent_calendar_subscriber.json", "r", encoding="utf-16") as file:
    data = json.load(file)
data_list = [[key, int(data[key])] for key in data]
data_list.sort(key=lambda x: x[1])
data_list.reverse()
for rank in range(15):
    print("%d位"%(rank+1), data_list[rank][0], ":", data_list[rank][1])

さっきのファイルをロードしてソートして表示するだけなので簡単ですね。
では早速結果です!!

1位 闇の魔術に対する防衛術 : 286
2位 Visual Studio Code : 278
3位 Docker : 249
4位 Vue.js : 234
5位 Vue.js #2 : 181
6位 JavaScript : 166
7位 Vim : 166
8位 AWS : 162
9位 Python : 162
10位 Go : 160
11位 Kubernetes : 153
12位 Google Cloud Platform その1 : 144
13位 Nuxt.js : 140
14位 GraphQL : 139
15位 Firebase : 139

やったぜ。
無事、闇の魔術に対する防衛術が一番期待されてる感じですね(傲慢)
あと2位がVSCodeだったのは意外でした。
4,5位のVueもすごいですね…合計だと1位かもしれません。
まあ単独1位は闇の魔術に対する防衛術ですが

まとめ

みんな闇技術に苦しめられてそう。

みんな、金髪ヤサグレ少女ってとってもいいぞ。早く戻ってこい
金髪ヤサグレ少女はとてもいいぞ、みんな、早く戻ってこーい!!!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away