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

  • 17
    Like
  • 0
    Comment
More than 1 year has 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