Passer au contenu

Comment utiliser l'API GitHub en Python : un guide complet

L'API GitHub ouvre un monde passionnant de possibilités pour automatiser les flux de travail, s'intégrer à GitHub, gérer des projets et analyser les données. En tant que développeurs Python, nous pouvons profiter pleinement de l'API pour augmenter notre productivité et créer des outils utiles.

Dans ce guide complet, étape par étape, vous apprendrez à utiliser l'API GitHub à l'aide de Python.

Pourquoi utiliser l'API GitHub avec Python ?

Avant de passer au code, voyons pourquoi l'utilisation de l'API GitHub avec Python est si puissante :

  • Automatisez les flux de travail – Éliminez les tâches répétitives en écrivant des scripts pour créer des problèmes, ouvrir et fusionner des PR, publier des binaires, etc.

  • Augmenter la productivité – Intégrez des outils personnalisés dans votre environnement de développement pour améliorer les flux de travail.

  • Gérer des projets – Gérez par programmation les problèmes, les étiquettes et les jalons dans les référentiels.

  • Analyser les données – Extrayez des mesures et des informations intéressantes sur plus de 96 millions de pensions.

  • Intégrer et étendre GitHub – Créez des applications Web personnalisées, des visualisations, des outils CLI, des robots et bien plus encore !

L'API ouvre de nombreuses façons créatives d'augmenter la productivité et de créer d'excellents outils et expériences de développement.

Présentation de l'API GitHub

L'API GitHub fournit des points de terminaison RESTful pour accéder aux données et services GitHub. Tu peux:

  • Gérer les référentiels, l'essentiel, les problèmes, les demandes d'extraction
  • Interagissez avec les données Git – commits, branches, balises
  • Récupérer des profils d'utilisateurs, des organisations, des équipes
  • Rechercher du code, des problèmes, des référentiels, des utilisateurs
  • Accédez aux métadonnées, aux problèmes, aux PR, aux fichiers et aux commits
  • Analyser les tendances de la communauté, les fourches de projet

Et beaucoup plus!

L'API utilise JSON pour sérialiser les données et utilise OAuth pour l'authentification. Toutes les demandes doivent être effectuées via HTTPS.

Pour utiliser l'API, il vous suffit de :

  1. Créer un compte GitHub
  2. Générer un jeton d'accès personnel pour l'authentification
  3. Effectuer des requêtes API et gérer les réponses

Voyons maintenant cela en action avec des exemples Python !

Faire des requêtes API GitHub

Les Pythons requests La bibliothèque facilite l'interaction avec les API Web. Récupérons quelques données utilisateur GitHub :

import requests

username = "defunkt"
response = requests.get(f"https://api.github.com/users/{username}")

print(response.json())

Ceci imprime des informations telles que :

{
  "login": "defunkt",
  "id": 2,
  "node_id": "MDQ6VXNlcjI=",
  "avatar_url": "https://avatars.githubusercontent.com/u/2?v=4",
  "gravatar_id": "",
  "url": "https://api.github.com/users/defunkt",
  "html_url": "https://github.com/defunkt",

  //...
}

Nous pouvons accéder à n’importe quelle route API non authentifiée de cette façon. Pour accéder aux données privées, nous devons passer un jeton d'authentification.

Création d'un jeton d'accès personnel GitHub

Pour générer un jeton :

  1. Cliquez sur Paramètres > Paramètres du développeur > Jetons d'accès personnels
  2. Cliquez Générer un nouveau jeton
  3. Donnez-lui une description comme "Mon script Python"
  4. Sélectionnez les étendues/autorisations souhaitées
  5. Cliquez Générer un jeton

Assurez-vous de copier le jeton – vous ne pourrez pas le récupérer plus tard !

Les portées courantes incluent :

  • repo – Accéder aux référentiels privés
  • admin:org – Gérer les organisations
  • notifications – Accéder aux notifications
  • user – Accès en lecture/écriture aux informations de profil

Utilisons notre token pour créer un nouveau dépôt :

import requests

token = "ghp_123abcMyToken"

data = {"name": "My New Repo"}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": f"token {token}"}
)

print(response.status_code) # 201 = Success!

Le jeton nous authentifie pour créer des référentiels privés.

Vous pouvez également utiliser Applications GitHub qui ont un accès limité et n'expirent pas comme les jetons utilisateur. Les applications doivent être installées par un utilisateur/une organisation pour y accéder.

Travailler avec les référentiels GitHub

Une partie importante de l'API implique la gestion des référentiels. Passons en revue quelques tâches courantes du référentiel.

Obtenez un référentiel

Pour obtenir les métadonnées d'un référentiel :

response = requests.get("https://api.github.com/repos/pandas-dev/pandas")
repo_info = response.json()

print(repo_info[‘description‘]) 
# Powerful data structures for data analysis, time series, statistics

Nous pouvons accéder à des informations telles que des descriptions, des étoiles, des clones, des contributeurs, des langues, des versions, des commits et bien plus encore !

Répertorier les référentiels

Pour répertorier les référentiels d'un utilisateur ou d'une organisation :

repos_url = "https://api.github.com/users/octocat/repos"
repos = requests.get(repos_url).json()

for repo in repos:
  print(repo[‘name‘]) # Prints names of each repo

Créer un référentiel

Nous pouvons également créer de nouveaux référentiels :

data = {
  "name": "My New Repo",
  "description": "This is my cool new repo",
  "private": False
}

response = requests.post(
  "https://api.github.com/user/repos", 
  json=data,
  headers={"Authorization": "token {token}"}
) 

Supprimer un référentiel

Pour supprimer un dépôt :

requests.delete(‘https://api.github.com/repos/octocat/Hello-World‘, 
                headers={"Authorization": "token {token}"})

Cela vous donne un contrôle total sur la gestion par programmation de vos référentiels.

Remarque: Toutes les requêtes API doivent être effectuées via HTTPS pour des raisons de sécurité.

Travailler avec des problèmes dans les référentiels

L'API Issues permet de gérer les tickets et les pull request. Tu peux:

  • Répertorier/créer/modifier/fermer/rouvrir les problèmes
  • Verrouillez les conversations, fusionnez les PR
  • Soumettre et modifier des commentaires
  • Ajouter des étiquettes, des responsables, des jalons

Par exemple, pour obtenir des tickets à partir d'un référentiel :

response = requests.get(‘https://api.github.com/repos/octocat/hello-world/issues‘)
issues = response.json()

for issue in issues:
  print(issue[‘title‘]) # Prints each issue title

Cela vous permet d'intégrer la gestion des problèmes dans des outils et des flux de travail externes.

Travailler avec des données Git

L'API Git Data fournit des points de terminaison pour interagir directement avec les référentiels Git. Tu peux:

  • Gérer les branches et les balises
  • Lire/écrire des données blob
  • Récupérer les commits, les références, les arbres
  • Comparez les commits, les références, les fichiers

Par exemple, pour obtenir des commits à partir d'un dépôt :

commits_url = "https://api.github.com/repos/pandas-dev/pandas/commits"
commits = requests.get(commits_url).json()

for commit in commits:
  print(commit[‘sha‘]) # Print commit SHAs
  print(commit[‘commit‘][‘message‘]) # Print messages

Cela fournit un accès complet pour gérer par programme les référentiels Git.

Recherche de référentiels et de code

L'API de recherche de GitHub permet d'interroger presque tout dans plus de 96 millions de référentiels publics.

Par exemple, pour trouver des projets Python liés à la science des données :

import requests

query = "language:python data science in:readme"
response = requests.get("https://api.github.com/search/repositories", 
                        params={"q": query})

results = response.json()[‘items‘]
for result in results:
  print(result[‘name‘]) # Prints names of matching repos 

La syntaxe des requêtes de recherche prend en charge les opérateurs booléens, les filtres, la sélection de contexte, etc. pour élaborer des recherches ciblées.

Quelques exemples:

  • org:facebook language:python stars:>5000 - Dépôts Python dans l'organisation Facebook avec plus de 5 XNUMX étoiles
  • filename:requirements.txt django – Dépôts avec exigences.txt contenant Django
  • user:defunkt location:san francisco – Rechercher les dépôts de Defunkt si l'emplacement est SF

L'API de recherche ouvre de nombreuses façons créatives d'exploiter des ensembles de données et des informations intéressantes à partir des données ouvertes de GitHub.

Utilisation de l'API GraphQL de GitHub

En plus de l'API REST, GitHub fournit une API GraphQL pour des requêtes plus flexibles.

GraphQL vous permet de spécifier précisément les données souhaitées dans les structures JSON imbriquées. Vous pouvez interroger plusieurs entités liées dans une seule requête.

Par exemple, nous interrogeons ici les données de profil d'un utilisateur ainsi que ses noms de référentiel :

import requests 

query = """
query {
  user(login:"defunkt") {
    name
    repositories(first:10) {
      nodes { 
        name 
      }
    }
  }
}
"""

response = requests.post(‘https://api.github.com/graphql‘, json={‘query‘: query})
print(response.json())

Cela permet de façonner la réponse exacte dont vous avez besoin. Le Explorateur GraphQL aide à créer des requêtes de manière interactive.

Intégration de l'API GitHub dans les applications

Maintenant que vous connaissez les bases, voyons comment créer des applications avec l'API GitHub.

Autorisation de l'application OAuth

Pour les applications Web, utilisez GitHub OAuth pour l'autorisation au lieu de jetons codés en dur. Cela permet aux utilisateurs de révoquer l'accès.

  1. Enregistrez une nouvelle application OAuth
  2. Utilisez l'ID client et le secret pour l'autorisation
  3. Rediriger les utilisateurs pour demander l'accès à GitHub

Votre application peut désormais effectuer des appels API au nom des utilisateurs.

Faire des demandes authentifiées

Une fois autorisé, passez des appels avec le jeton d'accès :

access_token = "abc123xxddff" # OAuth token 

response = requests.get(
  "https://api.github.com/user/repos",
  headers={"Authorization": f"token {access_token}"}
)

print(response.json()) # Print user‘s private repos

Cela vous permet d'accéder aux données privées en fonction des autorisations de l'utilisateur.

Limitation du débit

L'API GitHub a des limites de débit sur les requêtes. Surveillez l'état de votre application :

response = requests.get("https://api.github.com/users/octocat") 

print(response.headers[‘X-RateLimit-Limit‘]) # 5000
print(response.headers[‘X-RateLimit-Remaining‘]) # 4999

Répartissez les requêtes dans le temps et mettez les données en cache pour éviter les limites.

Gérer les erreurs avec élégance

Vérifiez toujours les codes d’état et gérez correctement les erreurs :

response = requests.get(‘https://api.github.com/invalid/url‘)

if response.status_code == 404:
  print("Resource not found!") 
elif response.status_code == 403:
  print("You do not have access!")
else:
  print("An error occurred.")

Cela garantit que votre application reste stable en production.

En suivant les meilleures pratiques des API, vous pouvez créer des intégrations et des outils robustes pour les développeurs.

Créer une application de tableau de bord GitHub

Relions ce que nous avons appris en créant une application Web pour afficher votre profil GitHub et vos dépôts à l'aide de Flask :

# app.py

from flask import Flask
import requests
from github import Github # pyGithub library

app = Flask(__name__)

@app.route("/")
def dashboard():
  # Use access token for API requests
  github = Github("access_token123xxdd")

  # Fetch user profile info
  user = github.get_user()

  # Fetch list of repos
  repos = user.get_repos() 

  # Pass info to template
  return render_template("dashboard.html", user=user, repos=repos)

if __name__ == "__main__":
  app.run(debug=True)

Nous utilisons pyGithub pour simplifier certaines interactions API. La page d'accueil affichera le dashboard.html modèle:

<!-- dashboard.html -->

<h3>GitHub Dashboard for {{user.name}}</h3>

<img src="{{user.avatar_url}}" style="width:64px">

<h4>Your Repositories</h4>

<ul>
  {% for repo in repos %}
  <li>{{repo.name}}</li>
  {% endfor %}
</ul>

Cela montre comment vous pouvez créer une application pour afficher les données GitHub pour un utilisateur connecté !

Les possibilités sont infinies pour intégrer l'API dans vos propres applications et outils.

Meilleures pratiques lors de l'utilisation de l'API GitHub

Voici quelques bonnes pratiques pour garantir que vos applications utilisant l’API GitHub sont performantes, sécurisées et robustes :

  • Authentification – Utilisez des jetons ou OAuth, évitez d’envoyer un nom d’utilisateur/mots de passe bruts.
  • HTTPS – Utilisez toujours des points de terminaison HTTPS pour sécuriser les données.
  • Limitation du débit – Répartissez les requêtes et mettez les données en cache pour éviter les limites.
  • Pagination – Utilisez les paramètres de page pour parcourir les ensembles de résultats.
  • La gestion des erreurs – Gérez les erreurs 4xx et 5xx avec élégance.
  • Essais – Testez minutieusement les appels d’API, utilisez la simulation pour les itérations.
  • Documentation – Lisez attentivement les documents, ils fournissent des exemples de code pour chaque point de terminaison.

Le respect des meilleures pratiques de l'API évite les erreurs évitables et garantit des applications fiables.

Autres fonctionnalités de l'API GitHub à explorer

Nous n'avons fait qu'effleurer la surface de ce qui est possible avec l'API GitHub. Voici quelques autres fonctionnalités intéressantes à découvrir :

  • API d'actions GitHub – Automatisez les workflows en déclenchant des actions avec l’API
  • Pages GitHub – Gérer par programmation les sites Pages
  • L'essentiel – Gérer les extraits de code, les configurations et les modèles
  • Organisations – Gérer les équipes, les membres et les autorisations de l’organisation
  • Base de données Git – Accédez directement aux données des objets Git comme les blobs et les arbres
  • API du marché GitHub – Gérer les applications répertoriées dans GitHub Marketplace
  • API de discussion GitHub – Créer des forums communautaires et des intégrations de questions-réponses

Les capacités de l'API s'étendent à mesure que GitHub ajoute de nouvelles fonctionnalités, alors gardez un œil sur les nouveaux points de terminaison.

Comparez l'API de GitHub aux alternatives

Pour les développeurs travaillant avec d'autres plates-formes, comment l'API de GitHub se compare-t-elle à celle de concurrents comme GitLab, BitBucket, Azure DevOps, etc. ?

Dans l'ensemble, les capacités de l'API de GitHub se distinguent en termes de :

  • Adoption – De loin la plus grande base d’utilisateurs et communauté
  • Documentation – Documents extrêmement complets avec des exemples
  • REST + GraphQL – Flexibilité des points de terminaison REST et GraphQL
  • Capacités de recherche – Recherche indexée puissante sur toutes les données publiques
  • Écosystème – Vaste écosystème d’applications, d’outils et d’intégrations
  • Analyse de code – Capacités de numérisation de code, de peluchage et d’analyse de la qualité

GitHub est clairement leader en matière de fonctionnalités API grâce à son échelle et ses années de développement. D'autres fournisseurs comme GitLab et BitBucket étendent les capacités des API pour rivaliser. Mais pour l’instant, GitHub reste l’API la plus complète pour interagir par programmation avec les référentiels Git.

Prochaines étapes et ressources

J'espère que ce guide a fourni un aperçu complet de la façon d'utiliser l'API GitHub avec Python !

Voici quelques prochaines étapes et ressources pour un apprentissage plus approfondi :

L'API GitHub ouvre tout un monde de possibilités pour créer des outils de développement, automatiser les flux de travail, gérer des projets et analyser des données. J'espère que vous vous sentirez inspiré pour créer quelque chose de précieux pour la communauté !

Bonne codage!

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *