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

Résolu/Fermé
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 1 mai 2017 à 14:50
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 1 mai 2017 à 18:02
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
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié le 1 mai 2017 à 16:22
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
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
Modifié le 1 mai 2017 à 17:05
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 ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 mai 2017 à 17:21
"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
0
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
1 mai 2017 à 17:34
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..
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
1 mai 2017 à 17:55
Ç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...
0
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019
1 mai 2017 à 18:02
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 !
0