2016-02-25 38 views
5

Sto cercando di ottenere lo download count di un repo pubblico utilizzando GitHub API e R v3.1.2. Utilizzando il pubblico samples repo da Google Ho il seguente:Conteggio download della versione di GitHub in 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) 

Tuttavia, ho notato che JSON restituisce una lista vuota. È perché non ci sono versioni in questo repo pubblico? L'obiettivo è determinare quante volte questo repo è stato scaricato dal pubblico o qualsiasi altro repo pubblico per quella materia. È possibile?

+1

@MichaelChirico Ho modificato la mia domanda. – Hahnemann

+0

Questa domanda può essere sollevata in qualche modo? – Hahnemann

+0

Si potrebbe iniziare una taglia per ottenere più attenzione – MichaelChirico

risposta

4

Il vecchio download di Github conta have been deprecated e non sembra funzionare più. È possibile ottenere scaricare i conteggi da stampa, ma ci vuole un po 'di manipolazione:

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)))) 

Ci sono alcune avvertenze:

  1. Il pronti contro termine deve avere rilasci.
  2. Le versioni devono contenere file
  3. Non esiste alcuna API per ottenere il conteggio delle persone che hanno clonato il repository.

Github consente di contare il numero di file rilasciati che sono stati scaricati, ma questo è tutto. Il repository di servizi di google che usi come esempio non ha né versioni né file!

+0

@doug_luce questo è buono! Ho clonato il repository https://github.com/allenluce/mmap-object in Terminal e poi ho scaricato il repo zip tramite Chrome, ma il conteggio è sempre lo stesso (49). Quando cambia il numero? – Hahnemann

+0

Cambia, ora vedo 50 download. Devono fare questo su base batch, ricordo di aver letto qualcosa sui problemi di prestazioni durante l'aggiornamento conta con la loro resa precedente. –

+0

Confermato! Questo sembra essere il caso.Apprezzo l'input di tutti ma la tua risposta è esattamente ciò che stavo cercando. Grazie per l'aiuto! – Hahnemann

1

L'API di cui al "Get a single release" è:

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

Come ha commentato, è necessario applicare contro release di un pronti contro termine.
Ad esempio, ecco uno python gist (di Philip Hansen - Hanse00) che estrae lo download_count.
(non in R, ma per mostrare come viene utilizzato l'URL /repos/:owner/:repo/releases/:id)

Estratto:

#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) 

Ecco un even shorter script da Brad Chapmanchapmanb, usando la libreria sigmavirus24/github3.py (Python per l'interfacciamento con il 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 

(Hai manymoreexamples)