Qiita
ShellScript
Bash

Qiita APIをシェルスクリプトから叩いてContributionを取得

More than 3 years have passed since last update.


はじまり

Qiita APIでは、下記のような感じでユーザの情報をJSONで取得することができる。


$ curl http://qiita.com/api/v2/users/KENJU | python -m json.tool

{
"description": "",
"facebook_id": "kenjuw",
"followees_count": 40,
"followers_count": 98,
"github_login_name": "KENJU",
"id": "KENJU",
"items_count": 143,
"linkedin_id": "kenjuwagatsuma",
"location": "Hong Kong",
"name": "Kenju Brown",
"organization": "",
"permanent_id": 48264,
"profile_image_url": "https://avatars.githubusercontent.com/u/4186381?",
"twitter_screen_name": "kenju_wagatsuma",
"website_url": ""
}

目的の行だけ取得したいときは、いろいろな技を使って抽出してあげればいい。たとえば、awkを使う。

$ curl http://qiita.com/api/v2/users/KENJU | python -m json.tool | awk '/facebook_id/{print $0}'

"facebook_id": "kenjuw",


問題発生

しかし、ここで問題発生。

「Qiita APIではContribution Countが取得できない!!!」

そこでいろいろぐぐってみると、以下の記事を発見。

Qiita Contribution ランキング 公開 もっとも貢献度が高い人は?


コンソールアプリでスクレイピングした結果を SQLite に格納、HTML ファイルを出力しているだけです。Azure Web アプリ上に配置し、定期的な実行は、Azure Web ジョブを利用しています。全般的なことは、コンソールアプリ + Azure Web ジョブ で静的 Web サイトの作成 で紹介しています。


ということで、普通にHTMLを持ってきて、必要な部分を抜き出してあげるという一番原始的な手段で。


解決策

ということで、こんな感じのシェルスクリプトを書いてみる。


  • curlでGETしたhtml文字列をuserpage.htmlに一旦保存

  • 保存したuserpage.htmlから、該当する部分をegrepコマンドで抽出

  • 更に、そこから必要な数値のみを抽出


# GET user page html
curl http://qiita.com/KENJU > userpage.html

# extracts <span class="userPage_contributionCount">????</span>
span_tag=`egrep -o '<span class=\"userPage_contributionCount\">([0-9]+)<\/span>' userpage.html`

# extracts only contribution count
contributionCount=$(echo $span_tag | egrep -o '[0-9]+')
echo $contributionCount