RubyでGitHub APIにアクセスするには octokit gemを使う。
gem 'octokit'
あるリポジトリのコントリビューターを取得する。
require 'octokit'
client.auto_paginate = true
members = client.contributors('rails/rails')
users = users = members.map{|member| client.user member.login }
rails/railsのコントリビューターはブラウザで見ると3988人いるが、APIで取得できたのは380人までだった。
members.size
# => 380
取得したコントリビューターから、ロケーションが日本のどこかになっているユーザーを取得する。
regexp = /日本|japan|北海道|hokkaido|青森|aomori|岩手|iwate|宮城|miyagi|秋田|akita|山形|yamagata|福島|fukushima|茨城|ibaraki|栃木|tochigi|群馬|gunma|埼玉|saitama|千葉|chiba|東京|tokyo|神奈川|kanagawa|新潟|niigata|富山|toyama|石川|ishikawa|福井|fukui|山梨|yamanashi|長野|nagano|岐阜|gifu|静岡|shizuoka|愛知|aichi|三重|mie|滋賀|shiga|京都|kyoto|大阪|osaka|兵庫|hyogo|奈良|nara|和歌山|wakayama|鳥取|tottori|島根|shimane|岡山|okayama|広島|hiroshima|山口|yamaguchi|徳島|tokushima|香川|kagawa|愛媛|ehime|高知|kochi|福岡|fukuoka|佐賀|saga|長崎|nagasaki|熊本|kumamoto|大分|oita|宮崎|miyazaki|鹿児島|kagoshima|沖縄|okinawa/
users.select {|user| user.location.to_s.downcase.match? regexp }
railsのコントリビューターのうち、日本をロケーションに指定しているのは下記の方々でした。
rails開発ありがとうございます。
users.select do |user|
user.location.to_s.downcase.match? regexp
end.map do |user|
member = members.find{|member| member.login == user.login }
<<~MD
**#{user.login} (#{user.name})** #{member.contributions} contributions
<img src="#{user.avatar_url}" width="50">
MD
end.each {|str| puts str }
kamipo (Ryuta Kamizono) 2713 contributions
amatsuda (Akira Matsuda) 843 contributions
yui-knk (Yuichiro Kaneko) 234 contributions
kennyj (Toshinori Kajihara) 233 contributions
sikachu (Prem Sichanugrist) 223 contributions
yahonda (Yasuo Honda) 205 contributions
yhirano55 (yhirano55) 152 contributions
JuanitoFatas (Juanito Fatas) 92 contributions
koic (Koichi ITO) 83 contributions
kenta-s (kenta-s) 40 contributions
giraffate (Takayuki Nakata) 34 contributions
mtsmfm (Fumiaki MATSUSHIMA) 30 contributions
soartec-lab (Shodai Suzuki) 27 contributions
tricknotes (Ryunosuke Sato) 25 contributions
shioyama (Chris Salzberg) 21 contributions
take (Takehiro Adachi) 20 contributions
willnet (Shinichi Maeshima) 18 contributions
akihiro17 (Hiroaki Izu) 14 contributions
riseshia (Shia) 10 contributions
ttanimichi (Tsukuru Tanimichi) 10 contributions
ryohashimoto (Ryo Hashimoto) 9 contributions