概要
- 投稿した記事の閲覧数を知りたい
- 参考:"Qiita:Team のデータを収集して分析する
"によると、Qiita APIで取得できない、、らしい。(今も?) - 自分のアカウントでログインして、記事を開いて取得しないといけない、、らしい。
- ブラウザで、ログインして、そのクッキーをつかわせてもらう。
環境
- Bash on Ubuntu On Windows 10
-
bash
: 元々ある -
curl
:sudo apt install -y curl
#たぶんデフォで入ってる -
jq
: jsonのフィルタ -sudo apt install -y jq
-
pup
: htmlのフィルタ
リリースへ行き、うまいzipを取得、解凍、/usr/local/bin
あたりにコピー。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
-
手順 (上から順番に実行しよう)
-
ブラウザでログインして、ログイン用クッキーを取得(
user_session_key
と_qiita_login_session
)。- Firefox: ツール > オプション > プライバシー > Cookieを個別に削除/Cookieを表示 :
qiita.com
を検索 - Chrome: 設定 > (一番下にある)詳細設定 > コンテンツの設定 > Cookie : Cookieを検索のとこに、
qiita.com
を入れる。
- Firefox: ツール > オプション > プライバシー > Cookieを個別に削除/Cookieを表示 :
-
ログインできるかテスト.うまくいくと、ユーザ名が表示される
クッキーの値をセット
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
-
記事の投稿数とContribution数を取得
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$
その他
- どろくさいな...