octokit.rbを使って、githubの情報を見てみた
■使用例) ユーザのリポジトリの情報を取得、出力する
github_scouter/github_scouter.rb at master · eiel/github_scouter · GitHub
を参考にして書いてみました。
事前準備
対象環境にoctokitをインストールします。
gem install octokit
コード
require 'octokit' # github user name @name = "kazuhirosaji" options = { auto_paginate: true, access_token: nil, # 必要に応じて入力する } # Clientオブジェクトを生成 @client = Octokit::Client.new(options) # Repositories情報を取得 repos = @client.repositories(@name) # リポジトリ情報の出力 repos.each do |repo| puts "name: #{repo.name}, language: #{repo.language}" puts "url: #{repo.url}" # puts "repository info = #{repo.attrs}" puts "" end
これで、kazuhirosajiアカウントが持っているリポジトリの名前、使用言語と、URLの一覧が表示されます。
■repositories()で取得したデータについて
上記コードの
repos = @client.repositories(@name)
にて、reposにはリポジトリの情報配列が入ります。
Octokitのドキュメントによるとrepositories()は
- (Array<Sawyer::Resource>) repositories(user = nil, options = {}) (also: #list_repositories, #list_repos, #repos) List user repositories.
となっており、配列の中身は "Sawyer::Resource" クラスのオブジェクトが入っています。この"Sawyer::Resource"はユーザ情報等を取得した際にも使用されているようです。
取得したreposにはどんなデータが入っているか?
ここからが今回悩んだポイント。url(リポジトリのURL)やlanguage(リポジトリの言語情報)の他には何が入っているのでしょうか?Octokitのドキュメントを見ただけではわからず、、ちょっと調べてみたのでまとめます。
結論
先に結論から。GitHub API v3に対象データの情報もまとめられていました。
Repositoriesの情報はこちらからurl, language情報の他にfork数等も取得できることがわかります。ちなみに、Usersの情報だったらこちらから。
Github APIページを見つけるまでの話
以下はGithub APIのページに情報があることに気づくまでの四苦八苦の話。
先に書いた通り、配列の中身は"Sawyer::Resource"オブジェクトとなっているようなのでSawyer::Rsourceのソースを覗いてみました。
。。。よくわかりませんでしたが、Class Resourceの中に、
attr_reader :attrs
と記載があったので、こちらが属性一覧に違いない!使ってみたところ、url、languageを含めたデータの中身の一覧を見れました。先の例のコードのrepos.each の箇所を変更することで、repoの属性一覧を閲覧できます。
repos.each do |repo| puts "name: #{repo.name}, language: #{repo.language}" puts "url: #{repo.url}" puts "repository info = #{repo.attrs}" # 有効にする! puts "" end
実行結果(一部抜粋)
. . url: https://api.github.com/repos/kazuhirosaji/testapp repository info = {:id=>12173584, :name=>"testapp", :full_name=>"kazuhirosaji/testapp", :owner=>{:login=>"kazuhirosaji"....
さらにOctokit内で、Sawyerを生成している箇所を調べたところ、どうやらjson形式で受けとったデータをSawyerオブジェクトに格納しているようであることがわかり、ようやく、Github APIに欲しい情報があることに気づけました。
情報の見方はわかったので、次はoctokit使って何かおもしろいもの作りたいなと思います。