Github: Posso ver o número de downloads de um repo?


139

No Github, há uma maneira de ver o número de downloads de um repositório?


As contagens de clones estão disponíveis para usuários autorizados, raspando com um nome de usuário / senha do Github, assim como as contagens de downloads de arquivos de ativos nas versões . Não parece possível obter contagens de clones de repositórios públicos ou baixar estatísticas em arquivos que não são de ativos (por exemplo, repositórios tar.gze ziparquivos).
Allen Luce

1
Para quem lê as respostas, todos os scripts fornecidos abaixo, fornecendo o release download_count, estão errados, pois não levam em conta o sistema de paginação do GitHub e fornecem apenas o total dos 30 lançamentos mais recentes.
Qiri

Respostas:


116

Atualização 2019:

A resposta de Ustin aponta para:


Atualização 2017

Você ainda pode usar a API do GitHub para obter a contagem de downloads de seus lançamentos (o que não é exatamente o que foi solicitado).
Consulte o campo " Obter um único release " download_count.

Não há mais uma tela de tráfego mencionando o número de clones de recompra.
Em vez disso, você precisa contar com serviços de terceiros como:

Lançamento do Git 2.14.2


Atualização agosto de 2014

O GitHub também propõe o número de clones para repo no Gráfico de Tráfego:
Veja " Clone Graphs "

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


Atualização de outubro de 2013

Conforme mencionado abaixo por andyberry88 , e como eu detalhei em julho passado , o GitHub agora propõe lançamentos (veja sua API ), que possui um download_countcampo .

Michele Milidoni , em sua resposta (votada) , usa esse campo em seu script python .
( extrato muito pequeno )

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

Resposta original (dezembro de 2010)

Não tenho certeza de que você possa ver essas informações (se elas estiverem gravadas), porque não as vejo na API de repositório do GitHub :

$ 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

Você só pode ver se ele possui downloads ou não.


1
Isso inclui downloads ZIP ou apenas clones?
MarzSocks

1
@MarzSocks se você está falando sobre o download_countcampo da API lançamento, que deve incluir o número de downloads de libertação (que nem sempre são zip, e não são clones)
VonC

@MarzSocks se você estiver falando sobre "número de clones", que não deve incluir os downloads de zip. Somente as git cloneinstâncias. Verifique com o suporte do GitHub para confirmação.
VonC

@danielsp ainda, ainda está oficialmente documentado: help.github.com/articles/viewing-traffic-to-a-repository . Mas sim, eu também não o vejo mais: github.com/docker/docker/graphs/contributors
VonC

Os arquivos de origem gerados automaticamente não são aparentemente ativos .. ( veja este comentário )
olejorgenb

81

Eu escrevi um pequeno aplicativo da Web em javascript para mostrar a contagem do número de downloads de todos os ativos nas versões disponíveis de qualquer projeto no Github. Você pode experimentar o aplicativo aqui: http://somsubhra.github.io/github-release-stats/


5
Continuo recebendo mensagens 'Não há lançamentos para este projeto' ou 'O projeto não existe'. O que eu estou errado?
28515 Alex

Estou recebendo a mesma mensagem. Isso não pode estar certo.
precisa saber é o seguinte

3
Sim. Eu também. Parece que este aplicativo parou de funcionar há muito tempo.
Daan van den Bergh

1
Este aplicativo não está correto, pois inclui apenas as 30 versões mais recentes fornecidas pelo GitHub em uma resposta da API, conforme detalhado aqui: developer.github.com/v3/guides/traversing-with-pagination É necessário percorrer as páginas de o link "próximo" fornecido no cabeçalho para calcular o total correto. Um exemplo de repositório é slamdata / quasar, em que esse método fornece um total totalmente incorreto.
Qiri 16/01/19

O aplicativo conta apenas repositórios com lançamentos
SM Pat

12

O GitHub descontinuou o suporte ao download e agora suporta 'Lançamentos' - https://github.com/blog/1547-release-your-software . Para criar uma versão, use a interface do usuário do GitHub ou crie uma tag anotada (http: // git-scm.com/book/ch2-6.html) e adicione notas de versão no GitHub. Você pode fazer upload de binários, ou 'ativos', para cada release.

Depois de ter alguns lançamentos, a API do GitHub suporta a obtenção de informações sobre eles e seus ativos.

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

Procure a entrada 'download_count'. Há mais informações em http://developer.github.com/v3/repos/releases/ . Esta parte da API ainda está no período de visualização ATM, portanto pode ser alterada.

Atualizar novembro de 2013:

A API de lançamentos do GitHub agora está fora do período de visualização, portanto o cabeçalho 'Accept' não é mais necessário - http://developer.github.com/changes/2013-11-04-releases-api-is-official/

No entanto, não fará mal continuar adicionando o cabeçalho 'Aceitar'.


Estou errado ao pensar que o github atualmente não mostra mais um downloadscampo nos ativos (pelo menos usando esta técnica)?
Demis

Este método ainda parece estar funcionando para mim. download_counté o campo que indica o número de downloads - por exemplo, em api.github.com/repos/twbs/bootstrap/releases . Vale ressaltar que apenas 'releases' aparecerão nesta lista, as tags que aparecerem na página de releases de um repositório não aparecerão na listagem da API, consulte developer.github.com/v3/repos/releases . Por exemplo, github.com/jquery/jquery/releases lista várias tags na seção releases, mas uma lista vazia é retornada para api.github.com/repos/jquery/jquery/releases .
andyberry88

Obrigado! Meus repositórios não parecem ter esse campo, mesmo com algumas tags definidas como "releases" - isso não conta os downloads dos releases compactados / compactados (ou o campo será omitido se count=0)? Ou mostra apenas o campo para solicitações de clone? Veja isto, sem download_count: api.github.com/repos/demisjohn/pytrimsetup/releases . A página do github está aqui: github.com/demisjohn/pyTRIMSetup/releases
Demis

As contagens de download estão disponíveis apenas para recursos de liberação, não para os arquivos de código-fonte da tag. Se você olhar para os URLs de bootstrap que forneci acima, eles têm um bootstrap-XYZ-dist.zipativo ao qual o download_countcampo se refere. Se você quiser ver quantas pessoas estão baixando uma versão, é necessário fazer o upload de um zip de liberação. Tanto quanto sei, não há como ver quantas pessoas clonaram / fizeram o download de um arquivo morto por meio da API. A exibição de gráficos (de stackoverflow.com/a/4339085/2634854 acima) pode fornecer o que você está buscando.
precisa saber é o seguinte

Obrigado por esclarecer. Os gráficos são realmente úteis.
Demis

12

A contagem de VISITANTES deve estar disponível em seu painel> Tráfego (ou estatísticas ou informações):

insira a descrição da imagem aqui


7

Anteriormente, havia dois métodos de código de download no Github: clonar ou fazer o download como zip em um repositório .git ou fazer upload de um arquivo (por exemplo, um binário) para download posterior.

Ao baixar um repositório (clonar ou baixar como zip), o Github não conta o número de downloads por limitações técnicas. Clonar um repositório é uma operação somente leitura. Não há autenticação necessária. Essa operação pode ser realizada por meio de vários protocolos, incluindo HTTPS, o mesmo protocolo que a página da Web usa para mostrar o repositório no navegador. É muito difícil contar.

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

Recentemente, o Github descontinuou a funcionalidade de download. Isso ocorreu porque eles entendem que o Github está focado na criação de software, e não na distribuição de binários.

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


7

Como mencionado, a API do GitHub retorna a contagem de downloads de lançamentos de arquivos binários. Desenvolvi um pequeno script para obter facilmente a contagem de downloads por linha de comando.


Em qualquer lugar eu posso ver um exemplo disso em uso? Pode ser adicionado a um selo do Github? Caso contrário, seria possível usar o Google Analytics para obter a contagem de downloads do selo do Github de alguma forma?
eonist

6

Muito tarde, mas aqui está a resposta que você deseja:

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

Em seguida, localize o ID do projeto que você está procurando nos dados. Deve estar perto do topo, próximo aos URLs. Em seguida, navegue até

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

O campo chamado download_count é sua resposta.

EDIT: maiúsculas importam em seu nome de usuário e nome do projeto


como é que os meus bens não tem nenhum conteúdo, mostrando apenas "[]"
Griffan

Você digitou tudo corretamente? Verifique se você possui liberações e está verificando o projeto correto.
LeChosenOne

Eu descobrir que eles só manter o controle de arquivos binários na liberação, não fonte tarball código ou zip, que suga
Griffan

Sim. Um release é um binário a ser entregue a outras pessoas, não o código fonte para os desenvolvedores.
LeChosenOne

5
Isso ainda funciona? Estou recebendo:{ "message": "Not Found", "documentation_url": "https://developer.github.com/v3" }
eonist

5

A API do Github não fornece mais as informações necessárias. Dê uma olhada na página de lançamentos , mencionada na resposta de Stan Towianski . Conforme discutimos nos comentários a essa resposta, a API do Github apenas relata os downloads de um dos três arquivos que ele oferece por release.

Eu verifiquei as soluções, fornecidas em outras respostas a estas perguntas. A resposta de Vonc apresenta a parte essencial da solução de Michele Milidoni . Eu instalei o script gdc com o seguinte resultado

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

Como você pode ver claramente, o gdc não informa a contagem de downloads dos arquivos tar.gz e zip.

Se você quiser verificar sem instalar nada, tente a página da Web em que Somsubhra instalou a solução, mencionada em sua resposta . Preencha 'stant' como nome de usuário do Github e 'mdcsvimporter2015' como nome do Repositório e você verá coisas como:

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

Infelizmente, mais uma vez, apenas um relatório sem os downloads dos arquivos tar.gz e zip. Examinei cuidadosamente as informações que a API do Github retorna, mas elas não são fornecidas em nenhum lugar. O download_count que a API retorna está longe de ser completo hoje em dia.


5

Para verificar o número de vezes que um arquivo / pacote de lançamento foi baixado, acesse https://githubstats0.firebaseapp.com

Ele fornece uma contagem total de downloads e uma divisão do total de downloads por tag de lançamento.


Observe que isso funciona apenas para arquivos binários na versão, não para o próprio código-fonte, o que significa que, se você não fizer upload de outros arquivos a serem baixados, isso não será contado. Provavelmente está usando a API do Github da resposta do LeChosenOne.
JoniVR 11/02/19

3

Acabei escrevendo um script de raspador para encontrar minha contagem de clones:

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

Isso irá capturar os dados do mesmo ponto final que o gráfico de clones do Github usa e cuspir os totais a partir dele. Os dados também incluem contagens por dia, substitua .summarypor apenas .para ver aquelas bem impressas.


2

Com base nas respostas VonC e Michele Milidoni, criei este bookmarklet que exibe estatísticas de downloads de binários liberados hospedados no github.

Nota: Devido a problemas nos navegadores relacionados à implementação da Política de Segurança de Conteúdo, os bookmarklets podem violar temporariamente algumas diretivas do CSP e basicamente podem não funcionar corretamente quando executados no github enquanto o CSP está ativado.

Embora seja altamente desencorajado, você pode desativar o CSP no Firefox como uma solução temporária. Abra about: config e defina security.csp.enable como false.


2

Para tentar deixar isso mais claro:
para este projeto do github: stant / mdcsvimporter2015
https://github.com/stant/mdcsvimporter2015
com lançamentos em
https://github.com/stant/mdcsvimporter2015/releases

vá para http ou https: (observação adicionada "api." e "/ repos")
https://api.github.com/repos/stant/mdcsvimporter2015/releases

você obterá essa saída json e poderá procurar por "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"

ou na linha de comando do:
wget --no-check-certificate https://api.github.com/repos/stant/mdcsvimporter2015/releases


Até onde eu vejo, o github conta apenas o primeiro dos três arquivos que você oferece para download, como mdcsvimporter-beta-18.zip. Você já encontrou uma maneira de obter um número de download de coisas como v19.zip?
Jan Ehrhardt

Eu tenho apenas três versões para o md2015 e a v19 é a primeira a ser exibida. A v19 veio após esta postagem, portanto não é mostrada aqui. Você foi ao URL :-)? "download_count": 31, "created_at": "2015-03-26T04: 22: 13Z", "updated_at": "2015-03-26T04: 22: 13Z", "browser_download_url":
Stan Towianski


Oi. Não tenho certeza de onde você criou esses URLs de download, mas essa é uma pergunta para o github. Parece apenas contar os arquivos que libero (3), e nem mesmo os arquivos zip de origem que ele cria (outros 2 por meu release). Eu escrevi um aplicativo java para mim mesmo que corro para fazer essa ligação, recuperar o json e analisar e mostrar apenas a contagem de downloads.
Stan Towianski

Que pena. Aparentemente, o Github não está fornecendo as informações que precisamos (mais?). Dos 3 * 3 arquivos que você tem em github.com/stant/mdcsvimporter2015/releases, ele apenas relata o doenload_count do arquivo de lançamento, não dos arquivos * .tar.gz e * .zip. Farei uma resposta separada, pois afeta todas as outras soluções.
Jan Ehrhardt

1

Como já foi dito, você pode obter informações sobre seus Releases por meio da API .

Para quem usa o WordPress, desenvolvi este plugin: Downloads de versão do GitHub . Ele permite que você obtenha a contagem de downloads, links e mais informações para lançamentos de repositórios do GitHub.

Para resolver a questão original, o código curto [grd_count user="User" repo="MyRepo"]retornará o número de downloads de um repositório. Esse número corresponde à soma de todos os valores da contagem de downloads de todas as versões de um repositório GitHub.

Exemplo: Exemplo





0

Aqui está uma solução python usando o pip install PyGithubpacote

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))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.