[メモ] Qiita: 投稿記事の閲覧数をコマンドラインで取得

## 概要

- 投稿した記事の閲覧数を知りたい
- 参考:"[Qiita:Team のデータを収集して分析する](http://qiita.com/yosukesuzuki/items/ddc7678722d1a1323df3)
"によると、[Qiita API](https://qiita.com/api/v2/docs)で取得できない、、らしい。(今も?)
- 自分のアカウントでログインして、記事を開いて取得しないといけない、、らしい。
- ブラウザで、ログインして、そのクッキーをつかわせてもらう。
 

## 環境
- Bash on Ubuntu On Windows 10
	- [`bash`](https://www.gnu.org/software/bash/) : 元々ある
	- [`curl`](https://curl.haxx.se/) : `sudo apt install -y curl` #たぶんデフォで入ってる
	- [`jq`](https://stedolan.github.io/jq/) : jsonのフィルタ - `sudo apt install -y jq`
	- [`pup`](https://github.com/ericchiang/pup) : htmlのフィルタ <br> [リリース](https://github.com/ericchiang/pup/releases)へ行き、うまいzipを取得、解凍、`/usr/local/bin`あたりにコピー。<br>`pushd . && cd /tmp && sudo apt install unzip -y &&  wget https://github.com/ericchiang/pup/releases/download/v0.4.0/pup_v0.4.0_linux_amd64.zip && unzip pup_*amd64.zip && sudo mv -v pup /usr/local/bin && popd`



## 手順 (上から順番に実行しよう)
1. ブラウザでログインして、ログイン用クッキーを取得(`user_session_key`と`_qiita_login_session`)。
	- Firefox: ツール > オプション > プライバシー > Cookieを個別に削除/Cookieを表示 : `qiita.com`を検索
	- Chrome: 設定 > (一番下にある)詳細設定 > コンテンツの設定 > Cookie : Cookieを検索のとこに、`qiita.com`を入れる。

2. ログインできるかテスト.うまくいくと、ユーザ名が表示される

	```bash
## クッキーの値をセット
QIITA_COOKIE_user_session_key='isu3~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~aik'
QIITA_COOKIE__qiita_login_session='a3lQ~~~~~~~...省略....~~~~~~5cd8'
##
curl -s -H "Cookie: user_session_key=${QIITA_COOKIE_user_session_key}; _qiita_login_session=${QIITA_COOKIE__qiita_login_session}" http://qiita.com | pup '.userInfo_urlName a json{}' | jq '.[] .text' -r
```

	```shell-session:実行例
mt08@wsl:~$ curl -s -H "Cookie: user_session_key=${QIITA_COOKIE_user_session_key}; _qiita_login_session=${QIITA_COOKIE__qiita_login_session}" http://qiita.com | pup '.userInfo_urlName a json{}' | jq '.[] .text' -r
mt08
```


3. 記事の投稿数とContribution数を取得

	```bash
curl -s -H "Cookie: user_session_key=${QIITA_COOKIE_user_session_key}; _qiita_login_session=${QIITA_COOKIE__qiita_login_session}" http://qiita.com > home.html
ITEM_COUNT=`cat home.html | pup '.userInfo_postsCount json{}' | jq '.[].text' -r`
CONTRIBUTION_COUNT=`cat home.html | pup '.userInfo_contribution_value json{}' | jq '.[].text' -r`
echo ${ITEM_COUNT} ${CONTRIBUTION_COUNT}
```

4. 記事ID取得 
	一度に100記事しか取得できないので、ループさせる.

	
	```bash
	QIITA_USER=qiita
	cp /dev/null ids.txt
	LOOPS=$(( $(( $ITEM_COUNT + 99 )) / 100 ))
	for i in `seq $LOOPS`; do echo $i; curl -s "https://qiita.com/api/v2/users/${QIITA_USER}/items?per_page=100&page="${i} > ${i}.json ; cat ${i}.json | jq -r '.[].id' >>  ids.txt ; done

	```
	`ids.txt`が生成

5. 記事取得. いいね数(js-likecount)と閲覧数(.ArticleAsideHeader__viewCount)取得

	```bash
	# 現在のUnix(Epoch)時間でワークフォルダ作成
	EPOCH=`date +%s`
	mkdir ${EPOCH}
	cd ${EPOCH}
	#
	# 記事取得
	time for i in `cat ../ids.txt` ; do echo $i; curl -s -H "Cookie: user_session_key=${QIITA_COOKIE_user_session_key};_qiita_login_session=${QIITA_COOKIE__qiita_login_session}" http://qiita.com/${QIITA_USER}/items/${i}  > ${i}.html ; done
	#
	# csvを作成 (id, like, view)
	cp /dev/null ../${EPOCH}.csv
	time for i in `cat ../ids.txt` ; do echo $i, `cat $i.html | pup '.js-likecount json{}' | jq '.[].text' -r`, `cat $i.html | pup '.ArticleAsideHeader__viewCount json{}' | jq ".[].text" -r`,  | tee -a ../${EPOCH}.csv; done
	#
	cd ..
	#
	# いいねの多い順から、10個表示
	sort -n -k2 -r ${EPOCH}.csv | head -10 
	#
	# 閲覧数の多い順から、10個表示
	sort -n -k3 -r ${EPOCH}.csv | head -10 

	```


	```shell-session:実行例
mt08@wsl:~/w$ sort -n -k2 -r ${EPOCH}.csv | head -10
319a73f34d2b95c9dab8, 40, 3864,
f2e4f9d3b1ed00849e23, 32, 13364,
...
...
mt08@wsl:~/w$ sort -n -k3 -r ${EPOCH}.csv | head -10
ae6fa258710579651a8f, 12, 15299,
1cef63cf9ed804d0f237, 18, 13903,
...
...
mt08@wsl:~/w$
```


## その他
- どろくさいな...