Liste des projets Github (java) + téléchargement

[Résolu/Fermé]
Signaler
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
-
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
-
Bonjour à toutes et à tous,

Après quelques recherches infructueuses sur google, je viens vers vous ^^

En fait, je cherche un moyen assez efficace de télécharger quelques milliers de projets github (java).. Existe-t-il une liste des projets existants que l'on peut trier selon le langage ? Et à partir de cette liste, avoir le nom du projet et avoir le moyen de le télécharger (pour récupérer un zip).

Toutes les apis que je trouve ne permettent pas d'avoir un tel résultat. Je ne sais pas si quelqu'un s'est déjà penché sur le sujet.. ?

Merci à tous pour votre réponse,

Mikis

1 réponse

Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 904
Bonjour,

L'API Github te permet de récupérer la liste des projets d'une organisation.
Dans le flux JSON renvoyé tu devrais considérer l'attribut "language" pour filtrer ceux qui ont pour valeur "Java" et l'attribut "clone_url" avec lequel tu peux ensuite faire un git clone pour récupérer le projet.

Exemple avec https://api.github.com/orgs/twitter/repos
[
...
{
id: 578435,
name: "elephant-bird",
full_name: "twitter/elephant-bird",
...
created_at: "2010-03-25T01:49:40Z",
updated_at: "2017-05-01T03:28:32Z",
pushed_at: "2017-04-15T02:44:16Z",
git_url: "git://github.com/twitter/elephant-bird.git",
ssh_url: "git@github.com:twitter/elephant-bird.git",
clone_url: "https://github.com/twitter/elephant-bird.git",
svn_url: "https://github.com/twitter/elephant-bird",
...
language: "Java",
...
},
...
{
id: 1175517,
name: "joauth",
full_name: "twitter/joauth",
...
created_at: "2010-12-16T22:21:23Z",
updated_at: "2017-04-30T02:00:39Z",
pushed_at: "2017-02-16T06:31:32Z",
git_url: "git://github.com/twitter/joauth.git",
ssh_url: "git@github.com:twitter/joauth.git",
clone_url: "https://github.com/twitter/joauth.git",
svn_url: "https://github.com/twitter/joauth",
...
language: "Java",
...
}
...
]
git clone https://github.com/twitter/elephant-bird
git clone https://github.com/twitter/joauth
Remarque : si tu veux faire régulièrement des mises à jours de projets que tu as déjà cloné il faudra ensuite faire des
git pull
.
La confiance n'exclut pas le contrôle
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
1
Merci de ta réponse,

J'avais trouvé cette partie là mais le problème c'est que j'aimerai récupérer les projets "au hasard". En fait, je ne connais pas l'organisation et en faisant

https://api.github.com/organizations

Il ne me donne que 29 organisations (qui ont peut-être des dizaines de projets) mais j'en ai besoin de plus.. (pareil pour la liste des projets de twitter par exemple, je ne vois pas pourquoi il ne m'en donne que 29 alors qu'il y en a beaucoup plus)..

Edit :

avec ?per_page=100 je peux en avoir plus..

Le soucis reste quand même le fait que : pour avoir quelques milliers de projets, je dois récupérer le nom de combien d'organisations par exemple ?
Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 904
"je ne vois pas pourquoi il ne m'en donne que 29 alors qu'il y en a beaucoup plus"
En fait tu en as 30 car c'est la valeur par défaut de la pagination.
Tu peux augmenter la pagination et te déplacer d'une page à l'autre en fournissant des paramètres en plus :

https://api.github.com/orgs/twitter/repos?per_page=100&page=1
https://api.github.com/orgs/twitter/repos?per_page=100&page=2
https://api.github.com/orgs/twitter/repos?per_page=100&page=3

Remarque : Twitter a 135 projets donc la page 1 renvoie 100 éléments, la page 2 en renvoie 35 et la page 3 renvoie 0 élément.

Pour la liste des organisations c'est un peu différent, comme expliqué dans la documentation : https://developer.github.com/v3/orgs/#list-all-organizations

Au début tu fais :
https://api.github.com/organizations?per_page=100

Comme le dernier élément a pour identifiant 8085 tu continues avec :
https://api.github.com/organizations?per_page=100&since=8085
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
1
Oui je vois, le "since" fonctionne parfaitement.

Penses-tu que "List all public repositories" serait une meilleure alternative pour récupérer quelques milliers de projets d'un coup ?
L'avantage serait de ne pas avoir à faire une recherche sur les organisations avant..
Messages postés
16410
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 octobre 2021
2 904
Ça fonctionnerait aussi, avec le même mécanisme de paramétrage ?since

Exemple : https://api.github.com/repositories?since=578434
Et on retombe sur l'id 578435 qui correspondait au premier projet Twitter en Java

Cependant, je pense que quand on fait de l'aléatoire, avoir une hiérarchie plus importante est meilleure qu'une liste à plat.

Si tu cherche directement par repo, tu vas devoir faire tes pages 100 par 100 pour lister les id qui vont de 1 à 90 millions (environ)
Alors que par organisation tu auras une profondeur moins importante puisque les id vont de 1 à 28 millions (environ).

Donc il vaut mieux taper une organisation au hasard, puis un projet au hasard au sein de cette organisation, plutôt que de taper directement un projet au hasard.

Remarque : tu peux aussi être malin et tirer aléatoirement un nombre entier pour aller chercher l'identifiant de projet correspondant, mais dans ce cas tu n'as même plus besoin de lister ni les organisations, ni les repositories.

Exemple : je tires au hasard 1234567 et je prends le projet correspondant.
https://api.github.com/repositories/1234567

Evidemment il faut un peu de chance pour que ce soit un projet Java...
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
1
Ah oui très bonne idée !

Il faut également qu'il ne tire pas deux fois le même nombre ^^

Merci pour l'idée en tout cas, j'espère que je pourrai faire de cette manière !