API GitHub

api git

On rentre gentiment dans le game des API avec L’API GitHub. On utilisera Python pour jouer avec.

Si tu ne sais pas ce qu’est une API, tu peux lire ce cours.

Générer Token GitHub

Comment générer son/ses token Github :

On se connecte sur son compte GitHub / on crée un compte si ce n’est pas déjà fait.

On clique sur « Generate new token »

On arrive sur la page suivante
« Note » nous permet d’entrer un nom pour notre token
Et les « scopes » en dessous sont en faites les droits d’accès du token sur les différentes fonctionnalités (lecture des dépôts, écriture, suppression, données utilisateurs, etc…)

API github

Enfin on génère le Token avec « Generate Token »

On à maintenant notre token sous forme de longue chaîne de caractères composé de lettres et de chiffres.

Utilisation de l’API GitHub

Pour s’authentifier on ajoute le token dans le paramètre headers qui sera ensuite utilisé dans la requête :

headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"} 

Récupérer les données d’un utilisateur sur GitHub

Pour tester l’api on va commencer par créer un petit programme qui récupère, dans cet exemple je vais récupérer les données public du comptede la Nasa :

Pour commencer on importe le module « requests »

import requests

Voici donc l’URL pour obtenir les données utilisateurs :

https://api.github.com/users/nom_utilisateur 

Dans notre code :

url = "https://api.github.com/users/nasa"
headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"} 

Evidemment le Token ici est un token test pour les besoins de ce cours qui n’existe pas réellement

On fais alors une requete GET sur cette url avec notre headers en paramètre (headers qui contient notre token) :

response = requests.get(url,headers=headers)

Notre requête s’est donc connecté à l’API et à récupérer les données utilisateur de la NASA.

On peut maintenant afficher ces données :

print(response.json())

les données s’affiche alors au format JSON :

{‘login’: ‘nasa’, ‘id’: 848102, ‘node_id’: ‘MDEyOk9yZ2FuaXphdGlvbjg0ODEwMg==’, ‘avatar_url’: ‘https://avatars2.githubusercontent.com/u/848102?v=4’, ‘gravatar_id’:  », ‘url’: ‘https://api.github.com/users/nasa’, ‘html_url’: ‘https://github.com/nasa’, ‘followers_url’: ‘https://api.github.com/users/nasa/followers’, ‘following_url’: ‘https://api.github.com/users/nasa/following{/other_user}’, ‘gists_url’: ‘https://api.github.com/users/nasa/gists{/gist_id}’, ‘starred_url’: ‘https://api.github.com/users/nasa/starred{/owner}{/repo}’, ‘subscriptions_url’: ‘https://api.github.com/users/nasa/subscriptions’, ‘organizations_url’: ‘https://api.github.com/users/nasa/orgs’, ‘repos_url’: ‘https://api.github.com/users/nasa/repos’, ‘events_url’: ‘https://api.github.com/users/nasa/events{/privacy}’, ‘received_events_url’: ‘https://api.github.com/users/nasa/received_events’, ‘type’: ‘Organization’, ‘site_admin’: False, ‘name’: ‘NASA’, ‘company’: None, ‘blog’: ‘http://nasa.github.io/’, ‘location’: ‘United States of America’, ’email’: ‘github@lists.nasa.gov’, ‘hireable’: None, ‘bio’: « Read about NASA’s Open Data initiative here: https://www.nasa.gov/open/ & Members Find Instructions here: http://nasa.github.io/ », ‘twitter_username’: None, ‘public_repos’: 330, ‘public_gists’: 0, ‘followers’: 0, ‘following’: 0, ‘created_at’: ‘2011-06-13T22:19:22Z’, ‘updated_at’: ‘2020-11-16T16:07:47Z’}

On peut également naviguer dans ce json par clé comme dans un dictionnaire, par exemple si l’on souhaite ne récupérer que le login on peut faire comme cela :

login = response.json()['login']
print(login)

Ou si l’on souhaite récupèrer par exemple l’adresse mail de l’utilisateur :

email = response.json()['email']
print(email)

Totalité du code :

import requests

# Contient le token de GitHub 

url = "https://api.github.com/users/nasa" 

headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"} 

response = requests.get(url,headers=headers) 

# On est maintenant connecté à notre API GitHub 

# et on peut mtn voir le contenu de notre compte GitHub : 

email = response.json()['email']
print(email)

Récupérer les données d’une entreprise sur GitHub

Cette fois on va récupérer des données d’entreprise, pour ce faire on utilise l’URL :

https://api.github.com/orgs/nom_entreprise

Pour l’exemple on récupérera les données entreprise de Facebook.

url = "https://api.github.com/orgs/facebook"
headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"}
response = requests.get(url,headers=headers)

On affiche le résultat au format json :

print(response.json()) 
{‘login’: ‘facebook’, ‘id’: 69631, ‘node_id’: ‘MDEyOk9yZ2FuaXphdGlvbjY5NjMx’, ‘url’: ‘https://apii.github.com/orgs/facebook’, ‘repos_url’: ‘https://apii.github.com/orgs/facebook/issues’, ‘members_url’: ‘public_members_url’: ‘https://ap.github.com/orgs/facebook/public_members{/member}’, ‘avatar_url’: ‘https://avatars3.githubusercontent.com/u/69631?v=4’, ‘description’: ‘We are working to build community through open source technology. NB: members must have two-factor auth.’, ‘name’: ‘Facebook’, ‘company’: None, ‘blog’: ‘https://opensource.fb.com’, ‘location’: ‘Menlo Park, California’, ’email’: None, ‘twitter_username’: None, ‘is_verified’: True, ‘has_organization_projects’: True, ‘has_repository_projects’: True, ‘public_repos’: 121, ‘public_gists’: 12, ‘followers’: 0, ‘following’: 0, ‘html_url’: ‘https://github.com/facebook’, ‘created_at’: ‘2009-04-02T03:35:22Z’, ‘updated_at’: ‘2020-05-28T20:20:25Z’, ‘type’: ‘Organization’}

Ici aussi on peut naviguer dans le json via les clés de dictionnaire.

Pour l’exemple nous allons récupérer la localisation géographique de l’entreprise :

localisation = response.json()['location']
print(localisation)

Code entier :

import requests 

# Contient le token de GitHub 

url = "https://api.github.com/orgs/facebook" 
headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"}

response = requests.get(url,headers=headers) 

 

# On est maintenant connecté à notre API GitHub 
# et on peut mtn voir le contenu de notre compte GitHub : 

localisation = response.json()['location']
print(localisation)
 

# l'url : "https://api.github.com/orgs/facebook" nous permet 
# d'afficher les info des organisations "orgs" et on a selectionné 
# facebook mais on aurait pu mettre n'importe quel  
# autre entreprise ça aurait fonctionner également

Accéder aux données d’un repository GitHub

Une fois encore une URL est requise pour récupérer les données d’un repository :

https://api.github.com/repos/nom_du_compte/nom_du_repo

On va tester avec le repository « metro » de Facebook.

url = "https://api.github.com/repos/facebook/metro"
headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"}

response = requests.get(url,headers=headers)
print(response.content) 

Jusqu’ici nous n’avons fait que récupérer des données mais spécialement pour toi on va agir 👇

Créer un repository avec l’API GitHub

L’URL à utiliser pour créer un repository :

https://api.github.com/user/repos

Pour créer le repo nous auront besoin de créer un payload qui sera utilisé ensuite dans la requête.

payload = {"name":"test_api","description":"Ceci est un repo crée pour tester l'api de GitHub"} 

Le payload est donc est dictionnaire contenant un nom et une description.

Puis on lance ensuite une requête POST avec le payload en paramètre et le token de connexion :

response = requests.post(url,headers=headers,json=payload)

Le dépôt distant est maintenant créée et on peut avoir les informations sur le repo via un print :

print(response.content)

code entier :

import requests 


payload = {"name":"test_api","description":"Ceci est un repo crée pour tester l'api de GitHub"} 
headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"}
url = "https://api.github.com/user/repos" 


 

response = requests.post(url,headers=headers,json=payload) 
print(response.content) 

Supprimer un repository avec l’API GitHub

L’URL :

https://api.github.com/repos/nom_utilisateur/nom_du_repo

La différence cette fois c’est que l’on va lancer une requête DELETE :

response = requests.delete(url,headers=headers) 

code entier :

import requests 


url = "https://api.github.com/repos/mon_username/nom_de_mon_repo" 

headers = {"Authorization":"token 789098c3109545sdfsdf59318dsqdz97"}


# La requête delete va supprimer l'objet :

response = requests.delete(url,headers=headers) 

On a donc vu dans cet article quelques fonctionnalités cependant il en existe bien d’autres que tu retrouvera dans la doc de l’API

Laisser un commentaire