2016-02-25 2 views
5

Я пытаюсь получитьпубличного репо с использованием GitHub API и R v3.1.2. Использование общественного samples repo от Google я следующее:Загрузить кол-во выпусков GitHub в R

library(jsonlite) 
library(httr) 

url <- "https://api.github.com/repos/googlesamples/google-services/downloads" 
response <- GET(url) 
json <- content(response, "text") 
json <- fromJSON(json) 

print(json) 

Однако я заметил, что JSON возвращает пустой список. Это потому, что в этом публичном репо нет релизов? Цель состоит в том, чтобы определить, сколько раз это репо было загружено публикой - или любое другое публичное репо, если на то пошло. Возможно ли это?

+1

@MichaelChirico Я отредактировал мой вопрос. – Hahnemann

+0

Не может ли этот вопрос быть проголосован? – Hahnemann

+0

Вы можете начать щедрость, чтобы привлечь больше внимания – MichaelChirico

ответ

4

Старая загрузка Github have been deprecated и, похоже, больше не работает. Вы можете получить скачать отсчеты из релизов, но это займет немного манипуляции:

library(jsonlite) 
library(httr) 

url <- "https://api.github.com/repos/allenluce/mmap-object/releases" 
response <- GET(url) 
json <- content(response, "text") 
json <- fromJSON(json) 
print(Reduce("+", lapply(json$assets, function(x) sum(x$download_count)))) 

Есть несколько предостережений:

  1. РЬИМИ должны релизы.
  2. Релизы должны иметь файлы
  3. Нет API для получения количества людей, которые клонировали ваше репо.

Github позволяет подсчитать количество загружаемых файлов, но это о нем. Репо google-services, которое вы используете в качестве примера, не имеет ни выпусков, ни файлов!

+0

@doug_luce, это хорошо! Я клонировал https://github.com/allenluce/mmap-object repo в Терминале, а затем загрузил почтовый ящик репо через Chrome, но счет все тот же (49). Когда меняется число? – Hahnemann

+0

Это меняет, теперь я вижу 50 скачиваний. Они должны делать это на периодической основе, я помню, что читал что-то о проблемах с производительностью при обновлении счетов с их предыдущим исполнением. –

+0

Подтверждено! Кажется, это так.Я ценю вклад каждого, но ваш ответ - именно то, что я искал. Спасибо за помощь! – Hahnemann

1

В API упоминается в «Get a single release» является:

GET /repos/:owner/:repo/releases/:id 

Как прокомментировал, что вам нужно, чтобы применить его к выпускам репо.
В качестве примера можно привести python gist (по Philip Hansen - Hanse00), который извлекает download_count.
(не в R, но, чтобы показать, как используется /repos/:owner/:repo/releases/:id гиперссылка)

Экстракт:

#Iterate through every tag 
search_point = 0 
while formatted_string.find("tag_name", search_point) != -1: 
    #Find where in the string the tag and download texts are 
    find_point = formatted_string.find("tag_name", search_point) 
    download_point = formatted_string.find("download_count", find_point) 

Вот even shorter script по Brad Chapmanchapmanb, используя библиотеку sigmavirus24/github3.py (Python для взаимодействия с GitHub APIv3):

#!/usr/bin/env python 
"""Get download stats for releases from GitHub. 
Needs development version of github3. 
pip install github3 
pip install git+https://github.com/sigmavirus24/github3.py.git 
""" 
import github3 

repo = github3.repository("chapmanb", "bcbio.variation") 
for release in repo.iter_releases(): 
    for asset in release.iter_assets(): 
     print release.name, asset.name, asset.download_count 

(Вы manymoreexamples)