LoginSignup
12
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-07-25

概要

  • 投稿した記事の閲覧数を知りたい
  • 参考:"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

手順 (上から順番に実行しよう)

  1. ブラウザでログインして、ログイン用クッキーを取得(user_session_key_qiita_login_session)。

    • Firefox: ツール > オプション > プライバシー > Cookieを個別に削除/Cookieを表示 : qiita.comを検索
    • Chrome: 設定 > (一番下にある)詳細設定 > コンテンツの設定 > Cookie : Cookieを検索のとこに、qiita.comを入れる。
  2. ログインできるかテスト.うまくいくと、ユーザ名が表示される

    ## クッキーの値をセット
    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
    
  3. 記事の投稿数と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記事しか取得できないので、ループさせる.

    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)取得

    # 現在の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$
    

その他

  • どろくさいな...
12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5