正如我在评论中建议的那样,您最好使用实现它的 R 包之一中的 GH API。但是,如果您决心从头开始构建它,请使用以下代码:
- 使用内置的 JSON->R 解码,
httr
免费为您提供
- 检查有效的响应代码
- 说明返回值中可能缺少的字段
- 用于
data.table
数据框架构建的效率和更容易处理
它还免费为您提供进度条pbapply
。
library(httr)
library(data.table)
library(pbapply)
get_data <- function(start, end) {
base_url <- 'https://api.github.com/users/%d/repos'
pblapply(start:end, function(i) {
resp <- GET(sprintf(base_url, i))
warn_for_status(resp)
if (status_code(resp) == 200) {
dat <- content(resp, as="parsed")
data.table(name=sapply(dat, function(x) ifelse(is.null(x[["name"]]), NA, x[["name"]])),
language=sapply(dat, function(x) ifelse(is.null(x[["language"]]), NA, x[["language"]])))
} else {
data.table(language=NA, name=NA)
}
})
}
gh <- rbindlist(get_data(1, 6))
gh
## name language
## 1: python-youtube-library Python
## 2: t NA
## 3: dotfiles VimL
## 4: pair-box NA
## 5: 6.github.com JavaScript
## 6: AndAnd.Net C#
## 7: backbone-tunes JavaScript
## 8: battletower CoffeeScript
## 9: BeastMode Ruby
## 10: blurry_search.coffee JavaScript
## 11: bootstrap CSS
## 12: browser-deprecator JavaScript
## 13: classify.js JavaScript
## 14: cocoa-example Objective-C
## 15: Colander CoffeeScript
## 16: comic_reader.js JavaScript
## 17: crawl-tools Python
## 18: CS-Projects Python
## 19: cssfast CoffeeScript
## 20: danbooru Ruby
## 21: Dex CoffeeScript
## 22: dnode-ruby Ruby
## 23: domain-gen Ruby
## 24: domainatrix Ruby
## 25: Doodler Java
## 26: dotfiles VimL
## 27: dothis Ruby
## 28: elixir-web Elixir
## 29: faster_manga CoffeeScript
## 30: favmix Java
## 31: fluent Ruby
## 32: fluid-image-grid JavaScript
## 33: freeform Ruby
## 34: FreeYourCode Ruby
## name language
轻松访问免费的 API。如果它得到一个403
但继续处理,此代码将警告您(您可以使用stop_for_status
vs更改它warn_for_status
或只是测试并自行停止)。这样你会得到不正确NA
的 s 。
IMO 使用经过身份验证的 API 访问会更加有利。