自分の Qiita などでの公開リソースを一覧する
世の中に対してオープンに公開するソフトウェア系のリソースは、大昔は自らのサイトに集約して置いていましたが、最近は GitHub などのサービスが一般的になり複数のサービスにまたがって公開することが多くなりました。
そうすると、今度は自分のリソースがどのように公開されているのか、全体像が見えにくくなります。
そこで、リソースを置いている各サービスを巡回して情報を収集し、Web ページ1ページで全体を一望できるようにしてみました。
→各サービスを巡回して情報を収集し一覧ページのHTMLを生成するスクリプト(homepage.rb)
❶ 巡回するサービス
巡回するサービスは、
・RubyGems
・GitHub
・Qiita
・LinkData.org
です。
原則としてマイ・ページ相当のページのHTMLを解析しますが、HTML で取得できない情報を REST API で補います。
❷ Qiita API
Qiita に関しては、REST API を用いて記事の参照や更新ができるようになっています(→Qiita API v2ドキュメント)。
require 'json'
require 'open-uri'
require 'pp'
pp JSON.parse(open('http://qiita.com/api/v2/schema?locale=ja', 'r', &:read)) #=>
# …
# "like"=>
# {"description"=>"投稿につけられた「いいね!」を表します。Qiita:Teamでのみ有効です。",
# "links"=>
# [{"description"=>"投稿につけられた「いいね!」を作成日時の降順で返します。Qiita:Teamでのみ有効です。",
# …
# "user"=>
# {"description"=>"Qiita上のユーザを表します。",
# "links"=>
# [{"description"=>"投稿をストックしているユーザ一覧を、ストックした日時の降順で返します。",
# "href"=>"/api/v2/items/:item_id/stockers",
# …
上記のとおり、API からは Stock や Like を取得できますが、Like については Qiita:Team でのみ有効とのことです。
一方、逆にマイ・ページ相当のページのHTMLからは Like数は取得できますが、Stockユーザ数は取得できません。
そこで、主に HTML を解析する homepage.rb に REST API で stock を取得するメソッドを追加して情報を補うことにしました。
# …
require 'json'
require 'rest-client'
# …
QIITA_API = RestClient::Resource.new('http://qiita.com/api/v2')
def stocks(id)
JSON.parse(QIITA_API["/items/#{id}/stockers"].get.body)
end
# …
❸ 公開リソース一覧ページ
結果、出来上がった公開リソース一覧ページは、
http://www.asahi-net.or.jp/~dd6t-sg/
の左フレームに嵌め込んで公開しています1。
❹ Qiita への Contribution
本記事を書いている時点では、各 Qiita 記事の Like と Stock は、
機械学習関連ブックマークなど(2016-11-26) Like:0, Stock:2
機械学習関連情報をトピックモデルで分類する(2016-11-09) Like:10, Stock:9
などで、その他の記事の Like と Stock は一致しています。
これには 2016年11月16日のQiitaの変更が影響しているようです。
2016年11月16日以前は Like がなく、Contribution は Stock数でカウントされていました。
2016年11月16日に Like が追加され、Contribution は Like数でカウントされるようになりました。
この際、2016年11月16日時点での Stock 数はそのまま Like数となりましたが、以降 Stock と Like は連動していません。
このため、2016年11月16日以降の公開である機械学習関連ブックマークなどは Stock はされているものの Like はノーカウントとなっているわけです。
機械学習関連ブックマークなどの主題であるbookmarksは、現在も逐次更新中で、いちばん手間もかかっているので、なんとか広く利用していただければと思っています。
-
このフレームは動的に生成しているのではなく、適宜手動で更新しています。 ↩