आर

2016-02-25 9 views
5

में गिटहब रिलीज की गिनती डाउनलोड करें मैं GitHub API और आर v3.1.2 का उपयोग करके सार्वजनिक रेपो के download count प्राप्त करने का प्रयास कर रहा हूं। मैं निम्नलिखित है सार्वजनिक samples repo गूगल से उपयोग करना:आर

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

पुराने गीथब डाउनलोड have been deprecated की गणना करता है और अब और काम नहीं कर रहा है। आप रिलीज से डाउनलोड संख्या प्राप्त कर सकते हैं, लेकिन यह हेरफेर का एक छोटा सा ले करता है:

  1. रेपो रिलीज होना चाहिए:

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

    कुछ चेतावनियां हैं।

  2. रिलीज़ में फाइलें
  3. आपके रिपो को क्लोन करने वाले लोगों की गिनती प्राप्त करने के लिए कोई एपीआई नहीं है।

गिथब आपको डाउनलोड की गई फ़ाइलों की संख्या की गणना करने की अनुमति देता है, लेकिन यह इसके बारे में है। Google- Services repo जिसे आप किसी उदाहरण के रूप में उपयोग करते हैं, न तो रिलीज़ करता है और न ही फ़ाइलें!

+0

@doug_luce यह अच्छा है! मैंने टर्मिनल में https://github.com/allenluce/mmap-object repo को क्लोन किया और फिर मैंने क्रोम के माध्यम से रेपो ज़िप डाउनलोड किया, लेकिन गिनती अभी भी वही है (4 9)। संख्या कब बदलती है? – Hahnemann

+0

यह बदलता है, अब मैं 50 डाउनलोड देखता हूं। उन्हें बैच आधार पर ऐसा करना होगा, मुझे अपने पिछली प्रतिपादन के साथ गणना अद्यतन करते समय प्रदर्शन समस्याओं के बारे में कुछ पढ़ना याद है। –

+0

पुष्टि की! ऐसा लगता है कि मामला है।मैं हर किसी के इनपुट की सराहना करता हूं लेकिन आपकी प्रतिक्रिया बिल्कुल वही है जो मैं ढूंढ रहा था। आपके सहयोग के लिए धन्यवाद! – Hahnemann

1

एपीआई "Get a single release" में उल्लेख किया है:

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

के रूप में टिप्पणी की है, तो आप एक रेपो के रिलीज के खिलाफ इसे लागू करने की जरूरत है।
उदाहरण के तौर पर, यहां एक python gist (Philip Hansen - Hanse00) है जो download_count निकालता है।
(आर में नहीं है, लेकिन कैसे /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) 

यहाँ Brad Chapmanchapmanb द्वारा एक even shorter script है, GitHub APIv3 साथ इंटरफ़ेस के लिए sigmavirus24/github3.py (अजगर लाइब्रेरी का उपयोग):

#!/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 

(आप manymoreहै)