Github: Dapatkah saya melihat jumlah unduhan untuk repo?


150

Di Github, apakah ada cara agar saya dapat melihat jumlah unduhan untuk repo?


Jumlah klon tersedia untuk pengguna yang diizinkan dengan melakukan scraping dengan nama pengguna / sandi Github seperti jumlah unduhan file aset dalam rilis . Tampaknya tidak mungkin untuk mendapatkan jumlah klon dari repo publik atau statistik unduhan pada file non-aset (mis. Repo tar.gzdan zipfile).
Allen Luce

1
Kepada siapa pun yang membaca jawaban, semua skrip yang diberikan di bawah ini memberikan rilis download_count salah, karena tidak memperhitungkan sistem paginasi GitHub, dan hanya memberikan total untuk 30 rilis terbaru,
Qiri

Jawaban:


121

Perbarui 2019:

Jawaban Ustin adalah :


Perbarui 2017

Anda masih bisa menggunakan GitHub API untuk mendapatkan jumlah download untuk rilis Anda (yang tidak persis seperti yang diminta)
Lihat " Dapatkan rilis tunggal ", download_countkolomnya.

Tidak ada lagi layar lalu lintas yang menyebutkan jumlah klon repo.
Sebaliknya, Anda harus mengandalkan layanan pihak ketiga seperti:

Rilis Git 2.14.2


Update Agustus 2014

GitHub juga mengusulkan jumlah klon untuk repo di Grafik Lalu Lintasnya:
Lihat " Grafik Klon "

http://i.stack.imgur.com/uycEZ.png


Perbarui Oktober 2013

Seperti yang disebutkan di bawah ini oleh andyberry88 , dan seperti yang saya rinci Juli lalu , GitHub sekarang mengusulkan rilis (lihat API ), yang memiliki download_countlapangan .

Michele Milidoni , dalam jawabannya (suara positif) , memang menggunakan bidang itu dalam skrip python-nya .
( ekstrak sangat kecil )

c.setopt(c.URL, 'https://api.github.com/repos/' + full_name + '/releases')
for p in myobj:
    if "assets" in p:
        for asset in p['assets']:
            print (asset['name'] + ": " + str(asset['download_count']) +
                   " downloads")

Jawaban asli (Desember 2010)

Saya tidak yakin Anda dapat melihat informasi itu (jika tercatat sama sekali), karena saya tidak melihatnya di GitHub Repository API :

$ curl http://github.com/api/v2/yaml/repos/show/schacon/grit
---
repository:
  :name: grit
  :owner: schacon
  :source: mojombo/grit # The original repo at top of the pyramid
  :parent: defunkt/grit # This repo's direct parent
  :description: Grit is a Ruby library for extracting information from a
  git repository in an object oriented manner - this fork tries to
  intergrate as much pure-ruby functionality as possible
  :forks: 4
  :watchers: 67
  :private: false
  :url: http://github.com/schacon/grit
  :fork: true
  :homepage: http://grit.rubyforge.org/
  :has_wiki: true
  :has_issues: false
  :has_downloads: true

Anda hanya dapat melihat apakah ada unduhan atau tidak.


1
Apakah ini termasuk unduhan ZIP atau hanya klon?
MarzSocks

1
@MarzSocks jika Anda berbicara tentang download_countbidang API rilis, itu harus mencakup jumlah unduhan rilis (yang tidak selalu zip, dan bukan klon)
VonC

@MarzSocks jika Anda berbicara tentang "jumlah klon", itu tidak termasuk unduhan zip. Hanya git clonecontoh. Periksa dengan dukungan GitHub untuk konfirmasi.
VonC

@danielsp masih didokumentasikan secara resmi: help.github.com/articles/viewing-traffic-to-a-repository . Tapi ya, saya juga tidak melihatnya lagi: github.com/docker/docker/graphs/contributors
VonC

File arsip sumber yang dibuat secara otomatis tampaknya bukan aset .. ( lihat komentar ini )
olejorgenb

82

Saya telah menulis aplikasi web kecil dalam javascript untuk menunjukkan jumlah unduhan semua aset dalam rilis yang tersedia dari proyek apa pun di Github. Anda dapat mencoba aplikasinya di sini: http://somsubhra.github.io/github-release-stats/


5
Saya terus mendapatkan pesan 'Tidak ada rilis untuk proyek ini' atau 'Proyek tidak ada'. Apa yang salah dong?
Alex

Saya mendapatkan pesan yang sama. Itu tidak benar.
cryptic0

3
Ya. Saya juga. Sepertinya aplikasi ini sudah lama berhenti bekerja.
Daan van den Bergh

1
Aplikasi ini tidak benar, karena hanya menyertakan 30 rilis terbaru yang diberikan oleh GitHub dalam respons API, seperti yang dijelaskan di sini: developer.github.com/v3/guides/traversing-with-pagination . Diperlukan untuk mengulang halaman dari tautan "berikutnya" yang diberikan di tajuk untuk menghitung total yang benar. Contoh repo adalah slamdata / quasar, di mana metode ini memberikan jumlah yang sangat salah.
Qiri

Aplikasi hanya menghitung repo dengan rilis
SM Pat

13

Jumlah PENGUNJUNG harus tersedia di bawah dasbor Anda> Lalu Lintas (atau statistik atau wawasan):

masukkan deskripsi gambar di sini


12

GitHub telah menghentikan dukungan unduhan dan sekarang mendukung 'Rilis' - https://github.com/blog/1547-release-your-software . Untuk membuat rilis, gunakan GitHub UI atau buat tag beranotasi (http: // git-scm.com/book/ch2-6.html) dan tambahkan catatan rilis ke dalamnya di GitHub. Anda kemudian dapat mengupload biner, atau 'aset', ke setiap rilis.

Setelah Anda memiliki beberapa rilis, GitHub API mendukung mendapatkan informasi tentang mereka, dan asetnya.

curl -i \
https://api.github.com/repos/:owner/:repo/releases \
-H "Accept: application/vnd.github.manifold-preview+json"

Cari entri 'download_count'. Info lebih lanjut di http://developer.github.com/v3/repos/releases/ . Bagian dari API ini masih dalam ATM periode pratinjau sehingga dapat berubah.

Perbarui November 2013:

API rilis GitHub sekarang keluar dari periode pratinjau sehingga header 'Terima' tidak lagi diperlukan - http://developer.github.com/changes/2013-11-04-releases-api-is-official/

Tidak ada salahnya untuk terus menambahkan tajuk 'Terima'.


Apakah saya salah berpikir bahwa github saat ini tidak lagi menampilkan downloadsbidang dalam aset (setidaknya menggunakan teknik ini)?
Demis

Metode ini sepertinya masih berhasil untuk saya. download_countadalah bidang yang menunjukkan jumlah unduhan - misalnya di api.github.com/repos/twbs/bootstrap/releases . Perlu dicatat bahwa hanya 'rilis' yang akan muncul dalam daftar ini, tag yang muncul di halaman rilis repo tidak muncul dalam daftar API, lihat developer.github.com/v3/repos/releases . Misalnya github.com/jquery/jquery/releases mencantumkan beberapa tag di bawah bagian rilis tetapi daftar kosong dikembalikan untuk api.github.com/repos/jquery/jquery/releases .
andyberry88

Terima kasih! Repo saya tampaknya tidak memiliki kolom seperti itu, bahkan dengan beberapa tag yang disetel sebagai "rilis" - ini tidak menghitung unduhan rilis zip / tarballed (atau kolom tersebut dihilangkan jika count=0)? Atau hanya menampilkan bidang untuk permintaan Klon? Lihat ini, dengan no download_count: api.github.com/repos/demisjohn/pytrimsetup/releases . Halaman github untuk itu ada di sini: github.com/demisjohn/pyTRIMSetup/releases
Demis

Jumlah unduhan hanya tersedia untuk aset rilis, bukan untuk arsip kode sumber tag. Jika Anda melihat URL bootstrap yang saya berikan di atas, mereka memiliki bootstrap-XYZ-dist.zipaset yang download_countterkait dengan bidang tersebut. Jika Anda ingin melihat berapa banyak orang yang mendownload rilis, Anda perlu mengupload zip rilis. Sejauh yang saya tahu, tidak ada cara untuk melihat berapa banyak orang yang telah mengkloning / mendownload arsip melalui API. Tampilan grafik (dari stackoverflow.com/a/4339085/2634854 di atas) mungkin memberi Anda apa yang Anda cari.
andyberry88

Terima kasih telah menjelaskan. Grafiknya memang membantu.
Demis

7

Sebelumnya, ada dua metode untuk mengunduh kode di Github: mengkloning atau mengunduh sebagai zip a .git repo, atau mengunggah file (misalnya, biner) untuk diunduh nanti.

Saat mengunduh repo (klon atau unduh sebagai zip), Github tidak menghitung jumlah unduhan untuk batasan teknis. Menggandakan repositori adalah operasi hanya-baca. Tidak diperlukan otentikasi. Operasi ini dapat dilakukan melalui banyak protokol, termasuk HTTPS, protokol yang sama dengan yang digunakan halaman web untuk menampilkan repo di browser. Sangat sulit untuk menghitungnya.

Lihat: http://git-scm.com/book/en/Git-on-the-Server-The-Protocols

Baru-baru ini, Github menghentikan fungsionalitas pengunduhan. Ini karena mereka memahami bahwa Github berfokus pada pembuatan perangkat lunak, dan bukan dalam mendistribusikan binari.

Lihat: https://github.com/blog/1302-goodbye-uploads


7

Seperti yang disebutkan, GitHub API mengembalikan jumlah unduhan rilis file biner. Saya mengembangkan skrip kecil untuk dengan mudah mendapatkan jumlah unduhan berdasarkan baris perintah.


Di mana saja saya dapat melihat contoh penggunaan ini? Bisakah itu ditambahkan ke lencana Github? Jika tidak, apakah mungkin menggunakan Google Analytics untuk mendapatkan jumlah unduhan ke lencana Github?
eonist

7

Terlambat, tapi inilah jawaban yang Anda inginkan:

https://api.github.com/repos/ [git username] / [git project] /releases

Selanjutnya, temukan id proyek yang Anda cari di data. Ini harus berada di dekat bagian atas, di samping url. Lalu, navigasikan ke

https://api.github.com/repos/ [git username] / [git project] /releases/ [id] / assets

Field bernama download_count adalah jawaban Anda.

EDIT: Modal penting di nama pengguna dan nama proyek Anda


kenapa aset saya tidak memiliki konten, hanya menampilkan "[]"
Griffan

Apakah Anda mengetik semuanya dengan benar? Pastikan Anda memiliki rilis dan memeriksa proyek yang benar.
LeChosenOne

Saya menemukan bahwa mereka hanya melacak file biner dalam rilis, bukan kode sumber tarball atau zip, yang menyebalkan
Griffan

Ya. Rilis adalah biner untuk dibagikan kepada orang lain, bukan kode sumber untuk pengembang.
LeChosenOne

5
Apakah ini masih berfungsi? Saya mendapatkan:{ "message": "Not Found", "documentation_url": "https://developer.github.com/v3" }
eonist

6

Untuk memeriksa berapa kali file / paket rilis diunduh, Anda dapat membuka https://githubstats0.firebaseapp.com

Ini memberi Anda jumlah unduhan total dan pemecahan total unduhan per tag rilis.


Perhatikan bahwa ini hanya berfungsi untuk file biner dalam rilis, bukan kode sumber itu sendiri, yang berarti bahwa jika Anda tidak mengunggah file lain untuk diunduh, itu tidak akan dihitung. Itu mungkin menggunakan Github API dari jawaban LeChosenOne.
JoniVR

5

Github API tidak lagi memberikan informasi yang dibutuhkan. Lihatlah halaman rilis , yang disebutkan dalam jawaban Stan Towianski . Seperti yang kita bahas di komentar untuk jawaban itu, Github API hanya melaporkan unduhan 1 dari tiga file yang dia tawarkan per rilis.

Saya telah memeriksa solusinya, disediakan dalam beberapa jawaban lain untuk pertanyaan ini. Jawaban Vonc menyajikan bagian penting dari solusi Michele Milidoni . Saya menginstal skrip gdc-nya dengan hasil sebagai berikut

# ./gdc stant
mdcsvimporter.mxt: 37 downloads
mdcsvimporter.mxt: 80 downloads
How-to-use-mdcsvimporter-beta-16.zip: 12 downloads

Seperti yang Anda lihat dengan jelas, gdc tidak melaporkan jumlah unduhan file tar.gz dan zip.

Jika Anda ingin memeriksa tanpa menginstal apa pun, coba halaman web tempat Somsubhra telah menginstal solusinya, yang disebutkan dalam jawabannya . Isi 'stant' sebagai nama pengguna Github dan 'mdcsvimporter2015' sebagai nama Repositori dan Anda akan melihat hal-hal seperti:

Download Info:
mdcsvimporter.mxt(0.20MB) - Downloaded 37 times.
Last updated on 2015-03-26

Sayangnya, sekali lagi hanya laporan tanpa unduhan file tar.gz dan zip. Saya telah memeriksa dengan cermat informasi yang dikembalikan API Github, tetapi tidak diberikan di mana pun. Download_count yang dikembalikan API masih jauh dari selesai saat ini.


3

Saya akhirnya menulis skrip pengikis untuk menemukan jumlah klon saya:

#!/bin/sh
#
# This script requires:
#   apt-get install html-xml-utils
#   apt-get install jq
#
USERNAME=dougluce
PASSWORD="PASSWORD GOES HERE, BE CAREFUL!"
REPO="dougluce/node-autovivify"

TOKEN=`curl https://github.com/login -s -c /tmp/cookies.txt | \
     hxnormalize | \
     hxselect 'input[name=authenticity_token]' 2>/dev/null | \
     perl -lne 'print $1 if /value=\"(\S+)\"/'`

curl -X POST https://github.com/session \
     -s -b /tmp/cookies.txt -c /tmp/cookies2.txt \
     --data-urlencode commit="Sign in" \
     --data-urlencode authenticity_token="$TOKEN" \
     --data-urlencode login="$USERNAME" \
     --data-urlencode password="$PASSWORD" > /dev/null

curl "https://github.com/$REPO/graphs/clone-activity-data" \
     -s -b /tmp/cookies2.txt \
     -H "x-requested-with: XMLHttpRequest" | jq '.summary'

Ini akan mengambil data dari titik akhir yang sama dengan yang digunakan grafik klon Github dan mengeluarkan total darinya. Data tersebut juga termasuk hitungan per hari, ganti .summarydengan hanya .untuk melihat yang tercetak cantik.


2

Berdasarkan jawaban VonC dan Michele Milidoni, saya telah membuat bookmarklet ini yang menampilkan statistik unduhan dari binari rilis yang dihosting github.

Catatan: Karena masalah dengan browser yang terkait dengan implementasi Kebijakan Keamanan Konten, bookmarklet dapat melanggar sementara beberapa arahan CSP dan pada dasarnya mungkin tidak berfungsi dengan baik saat dijalankan di github saat CSP diaktifkan.

Meskipun sangat tidak disarankan, Anda dapat menonaktifkan CSP di Firefox sebagai solusi sementara. Buka about: config dan setel security.csp.enable menjadi false.


2

Untuk mencoba membuatnya lebih jelas:
untuk proyek github ini: stant / mdcsvimporter2015
https://github.com/stant/mdcsvimporter2015
dengan rilis di
https://github.com/stant/mdcsvimporter2015/releases

buka http atau https: (catatan ditambahkan "api." dan "/ repos")
https://api.github.com/repos/stant/mdcsvimporter2015/releases

Anda akan mendapatkan keluaran json ini dan Anda dapat mencari "download_count":

    "download_count": 2,
    "created_at": "2015-02-24T18:20:06Z",
    "updated_at": "2015-02-24T18:20:07Z",
    "browser_download_url": "https://github.com/stant/mdcsvimporter2015/releases/download/v18/mdcsvimporter-beta-18.zip"

atau pada baris perintah lakukan:
wget --no-check-certificate https://api.github.com/repos/stant/mdcsvimporter2015/releases


Sejauh yang saya lihat, github hanya menghitung yang pertama dari tiga file yang Anda tawarkan untuk diunduh, seperti mdcsvimporter-beta-18.zip. Apakah Anda pernah menemukan cara untuk mendapatkan download_count dari hal-hal seperti v19.zip?
Jan Ehrhardt

Saya hanya memiliki 3 rilis untuk md2015, dan v19 adalah yang pertama muncul. v19 muncul setelah posting ini jadi tidak ditampilkan di sini. Apakah Anda membuka url :-)? "download_count": 31, "create_at": "2015-03-26T04: 22: 13Z", "updated_at": "2015-03-26T04: 22: 13Z", "browser_download_url":
Stan Towianski


Hai. Saya bahkan tidak yakin di mana Anda mendapatkan url unduhan itu, tetapi itu adalah pertanyaan untuk github. Tampaknya hanya menghitung file yang saya rilis (3), dan bahkan bukan file zip sumber yang dibuatnya (2 lagi per rilis saya). Saya menulis aplikasi java untuk diri saya sendiri yang saya jalankan untuk melakukan panggilan ini, mendapatkan kembali json, dan mengurai dan hanya menampilkan jumlah unduhan.
Stan Towianski

Sangat buruk. Ternyata Github tidak memberikan info yang kita butuhkan (lagi?). Dari file 3 * 3 yang Anda miliki di github.com/stant/mdcsvimporter2015/releases, ini hanya melaporkan doenload_count dari file rilis itu sendiri, bukan file * .tar.gz dan * .zip. Saya akan membuat jawaban terpisah karena itu mempengaruhi semua solusi lainnya.
Jan Ehrhardt


1

Seperti yang telah dinyatakan, Anda bisa mendapatkan informasi tentang Rilis Anda melalui API .

Bagi mereka yang menggunakan WordPress, saya mengembangkan plugin ini: GitHub Release Downloads . Ini memungkinkan Anda untuk mendapatkan jumlah unduhan, tautan, dan informasi lebih lanjut untuk rilis repositori GitHub.

Untuk menjawab pertanyaan awal, kode pendek [grd_count user="User" repo="MyRepo"]akan mengembalikan jumlah unduhan untuk repositori. Jumlah ini sesuai dengan jumlah semua nilai jumlah unduhan dari semua rilis untuk satu repositori GitHub.

Contoh: Contoh



0

Bagi mereka yang membutuhkan solusi dengan Python, saya menulis skrip sederhana.


Skrip Python:


Pemakaian:

ghstats.py [user] [repo] [tag] [options]


Dukung:

  • Mendukung Python 2 dan Python 3 di luar kotak.
  • Dapat digunakan sebagai modul mandiri dan modul Python.

0

Berikut adalah solusi python menggunakan pip install PyGithubpaket tersebut

from github import Github
g = Github("youroauth key") #create token from settings page


for repo in g.get_user().get_repos():
    if repo.name == "yourreponame":
        releases = repo.get_releases()
        for i in releases:
            if i.tag_name == "yourtagname":
                for j in i.get_assets():
                    print("{} date: {} download count: {}".format(j.name, j.updated_at, j._download_count.value))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.