从用户';s在ruby中的公共github回购
我想编写一个小ruby脚本来迭代用户的所有公共repo,并获得一个特定的文件(如果有的话)。这里有一个小代码片段,可以在文件存在的irb中运行,但是我得到了一个404,所以一定是出了什么问题,但我没有看到:从用户';s在ruby中的公共github回购,ruby,github,Ruby,Github,我想编写一个小ruby脚本来迭代用户的所有公共repo,并获得一个特定的文件(如果有的话)。这里有一个小代码片段,可以在文件存在的irb中运行,但是我得到了一个404,所以一定是出了什么问题,但我没有看到: require 'octokit' user = Octokit.user 'octokit' repos = user.rels[:repos].get.data > repos[3].name => "octokit.rb" Octokit.contents rep
require 'octokit'
user = Octokit.user 'octokit'
repos = user.rels[:repos].get.data
> repos[3].name
=> "octokit.rb"
Octokit.contents repos[3], path:'Gemfile'
Octokit::NotFound: GET https://api.github.com/contents/Gemfile: 404 - Not Found // See: https://developer.github.com/v3
这个特定的repo()在根级别肯定有一个名为“Gemfile”的文件,但它仍然报告一个404。这就是您要查找的
require 'octokit'
user = Octokit.user("octokit")
repos = user.rels[:repos].get.data
Octokit.contents repos[3].full_name, path:"Gemfile"
Octokit#contents
为repo
接受以下对象类型:
Integer @id = repo
String @owner, @name = repo.split('/') #this is what I used with #full_name
Repository @owner = repo.owner; @name = repo.name
Hash @name = repo[:repo] ||= repo[:name]; @owner = repo[:owner] ||= repo[:user] ||= repo[:username]
当您使用get.data
时,实际上没有存储库
您有一个Sawyer::Resource
,它没有处理功能,因此当它生成您获得的url时,/
可能有更好的方法,但这是调整特定代码的最简单方法
更新
使repos
更易于访问您可以创建如下Hash
:
repos = Hash[user.rels[:repos].get.data.map{|r| [r.name, Octokit::Repository.new(r.full_name)]}]
#=> {"go-octokit"=>octokit/go-octokit, "octokit.net"=>octokit/octokit.net, "octokit.objc"=>octokit/octokit.objc, "octokit.rb"=>octokit/octokit.rb}
Octokit.contents repos["octokit.rb"], path: "Gemfile"
我认为这会增加可读性,或者您可以使用monkey patchSawyer::Resource
class Sawyer::Resource
def to_repo
Octokit::Repositiory.new(self.full_name)
end
end
repos = user.rels[:repos].get.data.map(&:to_repo) #this will return an array of `Octokit::Repository` Objects
Octokit.contents repos[3], path:'Gemfile'
这就是你要找的
require 'octokit'
user = Octokit.user("octokit")
repos = user.rels[:repos].get.data
Octokit.contents repos[3].full_name, path:"Gemfile"
Octokit#contents
为repo
接受以下对象类型:
Integer @id = repo
String @owner, @name = repo.split('/') #this is what I used with #full_name
Repository @owner = repo.owner; @name = repo.name
Hash @name = repo[:repo] ||= repo[:name]; @owner = repo[:owner] ||= repo[:user] ||= repo[:username]
当您使用get.data
时,实际上没有存储库
您有一个Sawyer::Resource
,它没有处理功能,因此当它生成您获得的url时,/
可能有更好的方法,但这是调整特定代码的最简单方法
更新
使repos
更易于访问您可以创建如下Hash
:
repos = Hash[user.rels[:repos].get.data.map{|r| [r.name, Octokit::Repository.new(r.full_name)]}]
#=> {"go-octokit"=>octokit/go-octokit, "octokit.net"=>octokit/octokit.net, "octokit.objc"=>octokit/octokit.objc, "octokit.rb"=>octokit/octokit.rb}
Octokit.contents repos["octokit.rb"], path: "Gemfile"
我认为这会增加可读性,或者您可以使用monkey patchSawyer::Resource
class Sawyer::Resource
def to_repo
Octokit::Repositiory.new(self.full_name)
end
end
repos = user.rels[:repos].get.data.map(&:to_repo) #this will return an array of `Octokit::Repository` Objects
Octokit.contents repos[3], path:'Gemfile'
这就是你要找的
require 'octokit'
user = Octokit.user("octokit")
repos = user.rels[:repos].get.data
Octokit.contents repos[3].full_name, path:"Gemfile"
Octokit#contents
为repo
接受以下对象类型:
Integer @id = repo
String @owner, @name = repo.split('/') #this is what I used with #full_name
Repository @owner = repo.owner; @name = repo.name
Hash @name = repo[:repo] ||= repo[:name]; @owner = repo[:owner] ||= repo[:user] ||= repo[:username]
当您使用get.data
时,实际上没有存储库
您有一个Sawyer::Resource
,它没有处理功能,因此当它生成您获得的url时,/
可能有更好的方法,但这是调整特定代码的最简单方法
更新
使repos
更易于访问您可以创建如下Hash
:
repos = Hash[user.rels[:repos].get.data.map{|r| [r.name, Octokit::Repository.new(r.full_name)]}]
#=> {"go-octokit"=>octokit/go-octokit, "octokit.net"=>octokit/octokit.net, "octokit.objc"=>octokit/octokit.objc, "octokit.rb"=>octokit/octokit.rb}
Octokit.contents repos["octokit.rb"], path: "Gemfile"
我认为这会增加可读性,或者您可以使用monkey patchSawyer::Resource
class Sawyer::Resource
def to_repo
Octokit::Repositiory.new(self.full_name)
end
end
repos = user.rels[:repos].get.data.map(&:to_repo) #this will return an array of `Octokit::Repository` Objects
Octokit.contents repos[3], path:'Gemfile'
这就是你要找的
require 'octokit'
user = Octokit.user("octokit")
repos = user.rels[:repos].get.data
Octokit.contents repos[3].full_name, path:"Gemfile"
Octokit#contents
为repo
接受以下对象类型:
Integer @id = repo
String @owner, @name = repo.split('/') #this is what I used with #full_name
Repository @owner = repo.owner; @name = repo.name
Hash @name = repo[:repo] ||= repo[:name]; @owner = repo[:owner] ||= repo[:user] ||= repo[:username]
当您使用get.data
时,实际上没有存储库
您有一个Sawyer::Resource
,它没有处理功能,因此当它生成您获得的url时,/
可能有更好的方法,但这是调整特定代码的最简单方法
更新
使repos
更易于访问您可以创建如下Hash
:
repos = Hash[user.rels[:repos].get.data.map{|r| [r.name, Octokit::Repository.new(r.full_name)]}]
#=> {"go-octokit"=>octokit/go-octokit, "octokit.net"=>octokit/octokit.net, "octokit.objc"=>octokit/octokit.objc, "octokit.rb"=>octokit/octokit.rb}
Octokit.contents repos["octokit.rb"], path: "Gemfile"
我认为这会增加可读性,或者您可以使用monkey patchSawyer::Resource
class Sawyer::Resource
def to_repo
Octokit::Repositiory.new(self.full_name)
end
end
repos = user.rels[:repos].get.data.map(&:to_repo) #this will return an array of `Octokit::Repository` Objects
Octokit.contents repos[3], path:'Gemfile'
到该位置的正确路径是
https://api.github.com/repos/octokit/octokit.rb/contents/Gemfile
其中路径等于https://api.github.com/repos/:owner/:repo/contents/:file_name
到该位置的正确路径是https://api.github.com/repos/octokit/octokit.rb/contents/Gemfile
路径的位置等同于https://api.github.com/repos/:owner/:repo/contents/:file_name
到该位置的正确路径是https://api.github.com/repos/octokit/octokit.rb/contents/Gemfile
其中路径等于https://api.github.com/repos/:owner/:repo/contents/:file_name
该位置的正确路径是https://api.github.com/repos/octokit/octokit.rb/contents/Gemfile
其中路径等于https://api.github.com/repos/:owner/:repo/contents/:file_name
工作正常。谢谢大家!@UltraSarus i更新了我的答案,并根据您的实现,提供了一些可能对您有用的其他内容。工作非常完美。谢谢大家!@UltraSarus i更新了我的答案,并根据您的实现,提供了一些可能对您有用的其他内容。工作非常完美。谢谢大家!@UltraSarus i更新了我的答案,并根据您的实现,提供了一些可能对您有用的其他内容。工作非常完美。谢谢大家!@UltraSarus i更新了我的答案,并提供了一些其他可能对您有用的东西,具体取决于您的实现。