概要
- 投稿した記事の閲覧数を知りたい
- 参考:"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
実行例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}
-
記事ID取得
一度に100記事しか取得できないので、ループさせる.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
が生成 -
記事取得. いいね数(js-likecount)と閲覧数(.ArticleAsideHeader__viewCount)取得
# 現在の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
実行例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$
その他
- どろくさいな...