利用GitHub大数据查询接口统计分析最流行的代码规范

675 查看

我们翻译了最流行的代码规范系列文章,涵盖了以下主流编程语言:

这些代码规范是sideeffect.kr通过分析GitHub上托管的开源代码得出的。sideeffect.kr将用于统计分析的代码开源了。

安装

npm install
bower install

然后将github token保存为github.json文件,置于.tokens目录下。

依赖

popularconvention基于以下技术构建:

  • Node.js
  • CoffeeScript
  • MongoDB

GitHub公共数据

GitHub上每天都会有大量的活动,包括报告bug、推送代码、发起合并请求,等等。sideeffect.kr就是通过查询GitHub的公共数据统计分析流行的代码规范的。

GitHub以Google BigQuery的形式提供公共数据的查询接口。你可以使用Google BigQuery语句来查询这些数据,例如,以下代码会找出推送数最多的100个Ruby仓库:

SELECT repository_name, count(repository_name) as pushes, repository_description, repository_url
FROM [githubarchive:github.timeline]
WHERE type="PushEvent"
    AND repository_language="Ruby"
    AND PARSE_UTC_USEC(created_at) >= PARSE_UTC_USEC('2012-04-01 00:00:00')
GROUP BY repository_name, repository_description, repository_url
ORDER BY pushes DESC
LIMIT 100

利用Google BigQuery,弹指之间查询GitHub的整个数据集。如果你不需要实时查询,那么你也可以使用GitHub Archive提供的按小时打包的数据。(自2011-02-12起)例如:

  1. April 11, 2012, 3PM UTC

    wget http://data.githubarchive.org/2012-04-11-15.json.gz
    
  2. April 11, 2012

    wget http://data.githubarchive.org/2012-04-11-{0..23}.json.gz
    
  3. April 2012

    wget http://data.githubarchive.org/2012-04-{01..31}-{0..23}.json.gz
    

数据格式为JSON,你可以用你惯用的语言来处理。下面是一个Ruby的例子:

require 'open-uri'
require 'zlib'
require 'yajl'

gz = open('http://data.githubarchive.org/2012-03-11-12.json.gz')
js = Zlib::GzipReader.new(gz).read

Yajl::Parser.parse(js) do |event|
  print event
end

编撰 SegmentFault