Zum Inhalt

So verwenden Sie die GitHub-API in Python: Eine vollständige Anleitung

Die GitHub-API eröffnet eine aufregende Welt voller Möglichkeiten zur Automatisierung von Arbeitsabläufen, zur Integration mit GitHub, zur Verwaltung von Projekten und zur Analyse von Daten. Als Python-Entwickler können wir die API voll ausnutzen, um unsere Produktivität zu steigern und nützliche Tools zu erstellen.

In dieser umfassenden Schritt-für-Schritt-Anleitung erfahren Sie, wie Sie die GitHub-API mit Python verwenden.

Warum die GitHub-API mit Python verwenden?

Bevor wir uns mit dem Code befassen, schauen wir uns an, warum die Verwendung der GitHub-API mit Python so leistungsstark ist:

  • Workflows automatisieren – Eliminieren Sie sich wiederholende Aufgaben, indem Sie Skripte schreiben, um Probleme zu erstellen, PRs zu öffnen und zusammenzuführen, Binärdateien freizugeben usw.

  • Steigern Sie die Produktivität – Integrieren Sie benutzerdefinierte Tools in Ihre Entwicklungsumgebung, um Arbeitsabläufe zu verbessern.

  • Projekte verwalten – Verwalten Sie Probleme, Labels und Meilensteine ​​programmatisch über Repositorys hinweg.

  • Daten analysieren – Gewinnen Sie interessante Kennzahlen und Erkenntnisse aus den über 96 Millionen Repos.

  • GitHub integrieren und erweitern – Erstellen Sie benutzerdefinierte Web-Apps, Visualisierungen, CLI-Tools, Bots und mehr!

Die API eröffnet viele kreative Möglichkeiten, die Produktivität zu steigern und großartige Entwicklertools und -erlebnisse zu erstellen.

Übersicht über die GitHub-API

Die GitHub-API bietet RESTful-Endpunkte für den Zugriff auf GitHub-Daten und -Dienste. Du kannst:

  • Verwalten Sie Repositorys, Gists, Issues und Pull Requests
  • Interagieren Sie mit Git-Daten – Commits, Branches, Tags
  • Rufen Sie Benutzerprofile, Organisationen und Teams ab
  • Suchcode, Probleme, Repositorys, Benutzer
  • Greifen Sie auf Metadaten, Probleme, PRs, Dateien und Commits zu
  • Analysieren Sie Community-Trends und Projektzweige

Und viel mehr!

Die API verwendet JSON zur Serialisierung von Daten und OAuth zur Authentifizierung. Alle Anfragen müssen über HTTPS erfolgen.

Um die API zu verwenden, gehen Sie einfach wie folgt vor:

  1. Erstellen Sie ein GitHub-Konto
  2. Generieren Sie ein persönliches Zugriffstoken zur Authentifizierung
  3. Stellen Sie API-Anfragen und verarbeiten Sie Antworten

Sehen wir uns dies nun anhand von Python-Beispielen in Aktion an!

GitHub-API-Anfragen stellen

Pythons requests Die Bibliothek erleichtert die Interaktion mit Web-APIs. Lassen Sie uns einige GitHub-Benutzerdaten abrufen:

import requests

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

print(response.json())

Dies druckt Informationen wie:

{
  "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",

  //...
}

Auf diese Weise können wir auf jede nicht authentifizierte API-Route zugreifen. Um auf private Daten zuzugreifen, müssen wir eine übergeben Authentifizierungstoken.

Erstellen eines persönlichen GitHub-Zugriffstokens

So generieren Sie ein Token:

  1. Gehen Sie zu Einstellungen > Entwicklereinstellungen > Persönliche Zugriffstoken
  2. Klicken Sie auf Kostenlos erhalten und dann auf Installieren. Neues Token generieren
  3. Geben Sie ihm eine Beschreibung wie „Mein Python-Skript“.
  4. Wählen Sie die gewünschten Bereiche/Berechtigungen aus
  5. Klicken Sie auf Kostenlos erhalten und dann auf Installieren. Token generieren

Kopieren Sie den Token unbedingt – Sie können ihn später nicht mehr abrufen!

Zu den gängigen Anwendungsbereichen gehören:

  • repo – Greifen Sie auf private Repositorys zu
  • admin:org – Organisationen verwalten
  • notifications – Zugriffsbenachrichtigungen
  • user – Lese-/Schreibzugriff auf Profilinformationen

Verwenden wir unseren Token, um ein neues Repo zu erstellen:

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!

Der Token authentifiziert uns, private Repositorys zu erstellen.

Sie können auch GitHub-Apps die einen begrenzten Zugriff haben und nicht wie Benutzertokens ablaufen. Apps müssen von einem Benutzer/einer Organisation installiert werden, um Zugriff zu erhalten.

Arbeiten mit GitHub-Repositories

Ein großer Teil der API umfasst die Verwaltung von Repositorys. Lassen Sie uns einige häufige Repository-Aufgaben durchgehen.

Holen Sie sich ein Repository

So rufen Sie die Metadaten eines Repositorys ab:

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

Wir können auf Informationen wie Beschreibungen, Sterne, Klone, Mitwirkende, Sprachen, Veröffentlichungen, Commits und vieles mehr zugreifen!

Repositorys auflisten

So listen Sie Repositorys für einen Benutzer oder eine Organisation auf:

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

Erstellen Sie ein Repository

Wir können auch neue Repositories erstellen:

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

Löschen Sie ein Repository

So löschen Sie ein Repository:

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

Dadurch haben Sie die volle Kontrolle über die programmgesteuerte Verwaltung Ihrer Repositorys.

Hinweis: Alle API-Anfragen müssen aus Sicherheitsgründen über HTTPS erfolgen.

Arbeiten mit Problemen in Repositorys

Die Issues API ermöglicht die Verwaltung von Issues und Pull Requests. Du kannst:

  • Probleme auflisten/erstellen/bearbeiten/schließen/erneut öffnen
  • Konversationen sperren, PRs zusammenführen
  • Kommentare einreichen und bearbeiten
  • Fügen Sie Labels, Beauftragte und Meilensteine ​​hinzu

So rufen Sie beispielsweise Issues aus einem Repository ab:

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

Dadurch können Sie das Issue-Management in externe Tools und Workflows integrieren.

Arbeiten mit Git-Daten

Die Git-Daten-API bietet Endpunkte für die direkte Interaktion mit Git-Repositorys. Du kannst:

  • Verwalten Sie Zweige und Tags
  • Blob-Daten lesen/schreiben
  • Commits, Referenzen und Bäume abrufen
  • Vergleichen Sie Commits, Referenzen und Dateien

Um beispielsweise Commits von einem Repo abzurufen:

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

Dies bietet vollständigen Zugriff auf die programmgesteuerte Verwaltung von Git-Repositorys.

Suche nach Repositorys und Code

Die Such-API von GitHub ermöglicht die Suche nach fast allem in den über 96 Millionen öffentlichen Repositories.

So finden Sie beispielsweise Python-Projekte mit Bezug zu Data Science:

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 

Die Suchabfragesyntax unterstützt boolesche Operatoren, Filter, Kontextauswahl und mehr, um gezielte Suchen zu erstellen.

Einige Beispiele:

  • org:facebook language:python stars:>5000 – Python-Repos in der Facebook-Organisation mit über 5 Sternen
  • filename:requirements.txt django – Repos mit „requirements.txt“, das Django enthält
  • user:defunkt location:san francisco – Finden Sie die Repos von defunkt, wenn der Standort SF ist

Die Such-API eröffnet viele kreative Möglichkeiten, interessante Datensätze und Erkenntnisse aus den offenen Daten von GitHub zu gewinnen.

Verwendung der GraphQL-API von GitHub

Zusätzlich zur REST-API bietet GitHub eine GraphQL-API für flexiblere Abfragen.

Mit GraphQL können Sie in verschachtelten JSON-Strukturen genau die Daten angeben, die Sie möchten. Sie können mehrere verknüpfte Entitäten in einer Anfrage abfragen.

Hier fragen wir beispielsweise die Profildaten eines Benutzers sowie seine Repository-Namen ab:

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

Dadurch können Sie genau die Reaktion gestalten, die Sie benötigen. Der GraphQL-Explorer hilft beim interaktiven Erstellen von Abfragen.

Integration der GitHub-API in Apps

Nachdem Sie nun die Grundlagen kennen, werfen wir einen Blick auf die Erstellung von Anwendungen mit der GitHub-API.

OAuth-App-Autorisierung

Verwenden Sie für Web-Apps GitHub OAuth zur Autorisierung statt fest codierter Token. Dadurch können Benutzer den Zugriff widerrufen.

  1. Registrieren Sie eine neue OAuth-App
  2. Verwenden Sie die Client-ID und das Geheimnis zur Autorisierung
  3. Leiten Sie Benutzer weiter, um GitHub-Zugriff anzufordern

Jetzt kann Ihre App API-Aufrufe im Namen von Benutzern durchführen.

Authentifizierte Anfragen stellen

Nach der Autorisierung können Sie mit dem Zugriffstoken Anrufe tätigen:

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

Auf diese Weise können Sie basierend auf den Berechtigungen des Benutzers auf private Daten zugreifen.

Rate Limiting

Die GitHub-API verfügt über Ratenbeschränkungen für Anfragen. Überwachen Sie den Status Ihrer App:

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

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

Verteilen Sie Anfragen über einen längeren Zeitraum und speichern Sie Daten im Cache, um Einschränkungen zu vermeiden.

Mit Fehlern elegant umgehen

Überprüfen Sie immer die Statuscodes und behandeln Sie Fehler ordnungsgemäß:

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

Dadurch wird sichergestellt, dass Ihre App in der Produktion stabil bleibt.

Indem Sie API-Best Practices befolgen, können Sie robuste Integrationen und Tools für Entwickler erstellen.

Erstellen einer GitHub-Dashboard-App

Lassen Sie uns das Gelernte zusammenführen, indem wir eine Web-App zum Anzeigen Ihres GitHub-Profils und Ihrer Repos mit Flask erstellen:

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

Wir verwenden pyGithub, um einige API-Interaktionen zu vereinfachen. Die Homepage wird das rendern dashboard.html Vorlage:

<!-- 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>

Dies zeigt, wie Sie eine App erstellen können, um GitHub-Daten für einen angemeldeten Benutzer anzuzeigen!

Die Möglichkeiten, die API in Ihre eigenen Apps und Tools zu integrieren, sind endlos.

Best Practices bei der Verwendung der GitHub-API

Hier sind einige Best Practices, um sicherzustellen, dass Ihre Anwendungen, die die GitHub-API verwenden, leistungsstark, sicher und robust sind:

  • Authentifizierung – Verwenden Sie Token oder OAuth, vermeiden Sie das Senden von rohen Benutzernamen/Passwörtern.
  • HTTPS – Verwenden Sie immer HTTPS-Endpunkte, um Daten zu sichern.
  • Rate Limiting – Verteilen Sie Anfragen und Cache-Daten, um Einschränkungen zu vermeiden.
  • Paginierung – Verwenden Sie Seitenparameter, um Ergebnismengen zu durchlaufen.
  • Fehlerbehandlung – Behandeln Sie 4xx- und 5xx-Fehler ordnungsgemäß.
  • Testen – Testen Sie API-Aufrufe gründlich und verwenden Sie Mocking für Iterationen.
  • Dokumentation – Lesen Sie die Dokumente sorgfältig durch, sie enthalten Codebeispiele für jeden Endpunkt.

Die Einhaltung der API-Best Practices verhindert vermeidbare Fehler und sorgt für zuverlässige Apps.

Weitere GitHub-API-Funktionen zum Erkunden

Wir haben nur an der Oberfläche dessen gekratzt, was mit der GitHub-API möglich ist. Hier sind einige weitere coole Funktionen, die Sie ausprobieren sollten:

  • GitHub Actions API – Automatisieren Sie Arbeitsabläufe, indem Sie Aktionen mit der API auslösen
  • GitHub-Seiten – Verwalten Sie Pages-Sites programmgesteuert
  • Das Wesentliche – Verwalten Sie Codeausschnitte, Konfigurationen und Vorlagen
  • Organisationen – Verwalten Sie Organisationsteams, Mitglieder und Berechtigungen
  • Git-Datenbank – Greifen Sie direkt auf Git-Objektdaten wie Blobs und Bäume zu
  • GitHub Marketplace-API – Verwalten Sie die im GitHub Marketplace aufgeführten Apps
  • GitHub-Diskussions-API – Erstellen Sie Community-Foren und Q&A-Integrationen

Die API-Funktionen werden erweitert, wenn GitHub neue Funktionen hinzufügt. Halten Sie also Ausschau nach neuen Endpunkten.

Vergleichen Sie die API von GitHub mit Alternativen

Wie schneidet die API von GitHub für Entwickler, die mit anderen Plattformen arbeiten, im Vergleich zu Konkurrenten wie GitLab, BitBucket, Azure DevOps usw. ab?

Insgesamt zeichnen sich die API-Funktionen von GitHub durch Folgendes aus:

  • Adoption – Mit Abstand die größte Benutzerbasis und Community
  • Dokumentation – Äußerst ausführliche Dokumentation mit Beispielen
  • REST + GraphQL – Flexibilität von REST- und GraphQL-Endpunkten
  • Suchfunktionen – Leistungsstarke indizierte Suche in allen öffentlichen Daten
  • Ökosystem – Riesiges Ökosystem an Apps, Tools und Integrationen
  • Codeanalyse – Code-Scan-, Linting- und Qualitätsanalysefunktionen

GitHub ist dank seiner Größe und jahrelangen Entwicklung eindeutig führend in der API-Funktionalität. Andere Anbieter wie GitLab und BitBucket erweitern ihre API-Funktionen, um konkurrieren zu können. Doch vorerst bleibt GitHub die umfassendste API für die programmgesteuerte Interaktion mit Git-Repositories.

Nächste Schritte und Ressourcen

Ich hoffe, dass dieser Leitfaden einen umfassenden Überblick über die Verwendung der GitHub-API mit Python bietet!

Hier sind einige nächste Schritte und Ressourcen für weiteres Lernen:

  • Tauchen Sie tiefer in die Dokumente ein: Entwicklerdokumente
  • Sehen Sie sich API-Videos an: GitHub-Lernlabor
  • Entdecken Sie mit der API erstellte Apps: GitHub Marktplatz
  • Erfahren Sie mehr über OAuth: OAuth-App-Dokumente
  • Schauen Sie sich Bibliotheken wie PyGithub und urllib3 an, um die API-Nutzung zu vereinfachen
  • Erwägen Sie spöttische Antworten, um die API-Interaktion zu testen
  • Entdecken Sie zugehörige Tools wie GitHub CLI und GitHub Actions

Die GitHub-API eröffnet eine ganze Welt voller Möglichkeiten zum Erstellen von Entwicklertools, zum Automatisieren von Arbeitsabläufen, zum Verwalten von Projekten und zum Analysieren von Daten. Ich hoffe, Sie fühlen sich inspiriert, etwas Wertvolles für die Community zu schaffen!

Viel Spaß beim Codieren!

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *