2019 Tech Connect! Summer 勝手に振り返り

2019/7/31～2019/8/9の期間で、[弊社](https://www.lis.co.jp/)で勝手に始める真夏のアドベントカレンダーとして「[Tech Connet! Summer](https://qiita.com/dgkz/items/2862d5e6b77203a126b3)」なるイベントをやりました。
(自分もクマさんチームの4日目として[記事書いてます](https://qiita.com/n-tanimoto/items/947e74716e11fb8554ad#_reference-17f68eea960c3a3c641b)。)
一通り投稿も終わったので、各記事についたいいね数とか集計してみたいと思います。

---
集計に関しては対象記事をトップページからBeautifulSoupでスクレイピングし、取得した記事IDで[Qiita API](https://qiita.com/api/v2/docs)を発行してコメント数、いいね数、ストック数を取得したいと思います。
(覚えたばかりのBeautifulSoupを使いたいだけ)

コードは以下

```python
import os
import json
import requests
import time
from bs4 import BeautifulSoup
from selenium import webdriver
import chromedriver_binary
from urllib.parse import urljoin

def read():
    api_endpoint = 'https://qiita.com/api/v2/'
    headers = {'Authorization': 'Bearer ' + os.environ['QIITA_AUTH']}

    try:
        options = webdriver.chrome.options.Options()
        options.add_argument("--headless")
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("start-maximized")
        options.add_argument("disable-infobars")
        options.add_argument("--disable-extensions")
        options.add_argument("--disable-gpu")
        options.add_argument("--no-sandbox")
        driver = webdriver.Chrome(options=options)

        url = 'https://qiita.com/dgkz/items/2862d5e6b77203a126b3'
        driver.get(url)
        soup = BeautifulSoup(driver.page_source, 'html.parser')

        item = soup.find('div', id='item-2862d5e6b77203a126b3')

        tables = item.find_all('tbody')
        print('|タイトル|コメント数|いいね数|ストック数|')
        print('|:---|---:|---:|---:|')
        for table in tables:
            rows = table.find_all('tr')
            for row in rows:
                tmp = row.find_all('td')[2].find('a')['href'].split('#')[0]
                item_id = tmp[tmp.find('items/'):]

                item_url = urljoin(api_endpoint, item_id)
                item_detail = requests.get(item_url, headers=headers).json()
                title = item_detail['title']
                url = item_detail['url']
                comments = item_detail['comments_count']
                likes = item_detail['likes_count']

                stockers_url = urljoin(api_endpoint, item_id + '/stockers?per_page=100')
                stockers = len(requests.get(stockers_url, headers=headers).json())

                print('|[%s](%s)|%d|%d|%d|' % (title, url, comments, likes, stockers))

    except Exception as e:
        print(e)
    finally:
        driver.quit()


if __name__ == '__main__':
    read()
```

トップページの読み込み部分はSelenium使って処理しないと本文部分がうまく取れません。
ついでなので出力をQiitaのMarkdownでテーブル表示できるようにしてます。
実際に出力された内容をそのままコピペしたのが下の表です。

|タイトル|コメント数|いいね数|ストック数|
|:---|---:|---:|---:|
|[ハムスターの写真を撮りたい](https://qiita.com/mk-takahashi/items/b58721cbe1947f6c0631)|0|143|58|
|[PHP+Watson Assistant+楽天書籍検索APIでChatBotを作る！](https://qiita.com/mefuku/items/28acc2e149e5abecf192)|1|49|35|
|[WebVRに入門する](https://qiita.com/h-yamasaki/items/5e7190431a3beb81be12)|0|35|12|
|[楽天APIとLINE Messaging APIによるレシピ検索ボット ~Elasticsearchを添えて~](https://qiita.com/n-tanimoto/items/947e74716e11fb8554ad)|0|52|41|
|[ラズパイ電子工作～PWM制御を用いた簡易扇風機～](https://qiita.com/t_slash_k/items/ebf2bc1cb376d461c54a)|0|43|31|
|[小難しいコーディングは一切不要！！！たったの15分でLINE Clovaにクソアプリを解き放ってTシャツをゲットする方法を発明したよ。](https://qiita.com/taisuke3/items/68e7ec15e963741db55d)|0|102|62|
|[字幕オペレーター的タイピング効率化のススメ その２～IME辞書編～](https://qiita.com/cl_bump/items/38d9d9dd008ac694f953)|0|36|19|
|[【Dialogflow】コード無しで会話型チャットボットの作成](https://qiita.com/s-hchika/items/d2e2eacb5322698ba2e9)|0|33|17|
|[自分のポモドーロを作りましょう](https://qiita.com/Go_in_lis/items/a311ffec9fa4fc3edca4)|2|46|34|
|[この暑さを何とかしてくれるBotを作る！！！](https://qiita.com/r-kanai/items/be2a03f44b0620cbafdf)|1|31|14|
|[俺は静的"コード"解析がしたい。](https://qiita.com/following_ng/items/3dbc8033e70f02cba2d0)|0|94|34|
|[電気の流れ方も忘れたおじさんによる電子工作　序](https://qiita.com/hunyu/items/3b8a64f4f8e7a9e20b9d)|1|55|20|
|[THETA SCで自分を監視。追い込まれた状態で英語学習。[対談][360camera画像あり]](https://qiita.com/KIMI-D/items/62e29e106e8155030767)|0|17|0|
|[生産性向上へのショートカット](https://qiita.com/dgkz/items/fdfdab61928abcf35002)|1|115|84|
|[近くで予約可能なホテルを探すチャットボットを作ってみた](https://qiita.com/p3ngu1n/items/8b448a25b96b4fa744f7)|0|49|38|
|[Arduino工作を見据えて](https://qiita.com/ydraft/items/ad2b964ab7c6d1ca54c8)|0|16|3|
|[discordで簡単な受け応え(とGoogle検索)ができるbotを作ろう](https://qiita.com/o-chang/items/e45fb7074654f8eb26ea)|2|54|53|
|[JavaでNumer0nみたいなゲームを作ってみた](https://qiita.com/k-igarashi214/items/e006bd24dc6fba05a47d)|4|31|18|
|[チャレンジ！クロスプラットフォーム開発（Xamarin.Forms編）](https://qiita.com/yoshi-hanzo/items/7537391d33b4a1534a37)|0|16|7|
|[M5StackのNeoPixelユニットで空中に絵を描く](https://qiita.com/mashed-p/items/6b52776a5fab2c31d617)|0|15|3|

いい感じに取れました。スクレイピング楽しいです。
いいね数は各記事見ればわかりますが、ストック数はAPI叩かないと見えない？ので、こうやって出してみると新鮮でよいです。
やっぱがっつり技術系の記事だとストック数伸びるみたいですね。(ポエム系だといいねはつくけどストックはつかない感じ)

---