2016-08-03 7 views
0

Я хочу, чтобы как-тоClone и анализировать все (или как можно больше) GitHub проектов Java

  1. получить так много проектов GitHub Java, как это возможно, разобрать их исходный код
  2. извлечь AST с чем-то вроде javaparser, вставьте эти АСТ в базу данных NoSQL (возможно, neo4j) и задайте различные типы запросов анализа статического кода.

Более подробная информация о части 2 здесь:

У меня есть некоторые проблемы в отношении части 1 данного проекта.

Я м думал об использовании GitHub API и выполните следующие действия:

  1. Написать скрипт, который получает столько пользователей GitHub, как это возможно
  2. Для каждого пользователя, получить все операции РЕПО с языком = Java, и клон их в каталоге ramdisk (чтобы избежать ввода/вывода диска) и преодолеть нехватку места.
  3. Анализировать каждый .java файл

ли это возможно? Можете ли вы подумать о другом способе, в котором мне не нужно клонировать репо (например, проанализировать «онлайн» исходные файлы java)?

Мне не нужно анализировать все репозитории github сразу. У меня будет узел neo4j, и я смогу добавить узлы (AST) на разумный период времени.

ответ

0

Я внимательно прочитал github v3 api и сумел добиться прогресса.

Прежде всего, мне не нужно

  1. Написать скрипт, который получает столько пользователей GitHub как можно

в GitHub v3 апи обеспечивает url that lists all public repositories.

Я могу получить язык репо через languages_url, возвращенный в предыдущем объекте json (что-то вроде https://api.github.com/repos/owner/repo_name/languages) и сохранить Java.

Следует отметить, что rate limiting. Github позволяет 5000 запросов в час для аутентифицированного пользователя.

Учитывая вышеизложенное, необходимо потратить некоторое разумное количество времени для обработки (почти) каждого публичного java-репо в Github.

Учитывая, что мне нужно 2 вызова api для получения исходного кода репо, я могу получить 3000 java-репозиций под сетевым соединением спуска через час. На github существует несколько миллионов проектов Java.

Предполагаю, что через несколько дней я принесу их все.

 Смежные вопросы

  • Нет связанных вопросов^_^