克隆并分析所有(或尽可能多)github java项目

时间:2016-08-03 12:09:57

标签: java github neo4j abstract-syntax-tree github-api

我想以某种方式

  1. 尽可能多地获取github java项目,解析其源代码
  2. javaparser之类的东西提取AST,将这些AST插入NoSQL数据库(可能是neo4j),并询问各种静态代码分析查询。
  3. 有关第2部分的更多信息:

    我对这个项目的第1部分有些麻烦。

    我正在考虑使用github api并执行以下操作:

    1. 编写一个尽可能多的github用户的脚本
    2. 对于每个用户,使用language = java获取所有repos,并在ramdisk目录中克隆它们(以避免磁盘I / O)并克服空间不足。
    3. 解析每个.java文件
    4. 这可行吗?你能想到我不需要克隆回购的另一种方式(例如解析“在线”java源文件)吗?

      我不需要立即解析所有github repos。我将启动并运行neo4j节点,并且我将能够在合理的时间段内添加节点(AST)。

1 个答案:

答案 0 :(得分:0)

我仔细阅读github v3 api并设法取得进展。

首先,我不需要

  
      
  1. 编写一个尽可能多的github用户的脚本
  2.   

github v3 api提供url that lists all public repositories

然后我可以通过上一个json对象(类似https://api.github.com/repos/owner/repo_name/languages)中返回的languages_url获取repo的语言,并保留Java。

有一点需要注意,是rate limiting。 Github允许经过身份验证的用户每小时5,000次请求。

考虑到上述情况,在Github上拍摄(几乎)每个公共java回购都需要一些合理的时间。

鉴于我需要2个api调用来获取repo的源代码,我可以在一小时内在下降网络连接下获得3000个java repos。 github上有数百万个公共java项目。

我想我有时会把它们全部拿走。