Meteen naar de inhoud

Hoe de GitHub API in Python te gebruiken: een complete gids

De GitHub API opent een opwindende wereld van mogelijkheden voor het automatiseren van workflows, integratie met GitHub, het beheren van projecten en het analyseren van gegevens. Als Python-ontwikkelaars kunnen we de API ten volle benutten om onze productiviteit te verhogen en nuttige tools te creëren.

In deze uitgebreide, stapsgewijze handleiding leert u hoe u de GitHub API gebruikt met Python.

Waarom de GitHub API gebruiken met Python?

Laten we, voordat we in de code duiken, eens kijken waarom het gebruik van de GitHub API met Python zo krachtig is:

  • Automatiseer workflows – Elimineer repetitieve taken door scripts te schrijven om problemen te creëren, PR's te openen en samen te voegen, binaire bestanden vrij te geven, enz.

  • Productiviteit verbeteren – Integreer aangepaste tools in uw ontwikkelomgeving om workflows te verbeteren.

  • Projecten beheren – Beheer problemen, labels en mijlpalen programmatisch in alle repository's.

  • Data analyseren – Verzamel interessante statistieken en inzichten uit de meer dan 96 miljoen repo's.

  • Integreer en breid GitHub uit – Maak aangepaste webapps, visualisaties, CLI-tools, bots en meer!

De API biedt veel creatieve manieren om de productiviteit te verhogen en geweldige ontwikkelaarstools en -ervaringen te bouwen.

Overzicht van de GitHub-API

De GitHub API biedt RESTful-eindpunten voor toegang tot GitHub-gegevens en -services. Jij kan:

  • Beheer opslagplaatsen, samenvattingen, problemen en pull-aanvragen
  • Interactie met Git-gegevens – commits, branches, tags
  • Haal gebruikersprofielen, organisaties, teams op
  • Zoekcode, problemen, repositories, gebruikers
  • Krijg toegang tot metadata, problemen, PR's, bestanden en commits
  • Analyseer gemeenschapstrends, projectvorken

En meer!

De API gebruikt JSON om gegevens te serialiseren en gebruikt OAuth voor authenticatie. Alle verzoeken moeten via HTTPS worden gedaan.

Om de API te gebruiken, doet u eenvoudigweg het volgende:

  1. Maak een GitHub-account
  2. Genereer een persoonlijk toegangstoken voor authenticatie
  3. Voer API-verzoeken uit en handel de reacties af

Laten we dit nu in actie zien met Python-voorbeelden!

GitHub API-verzoeken indienen

Python's requests bibliotheek maakt het eenvoudig om te communiceren met web-API's. Laten we wat GitHub-gebruikersgegevens ophalen:

import requests

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

print(response.json())

Hiermee wordt informatie afgedrukt zoals:

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

  //...
}

Op deze manier hebben we toegang tot elke niet-geverifieerde API-route. Om toegang te krijgen tot privégegevens, moeten we een authenticatie token.

Een GitHub persoonlijk toegangstoken maken

Om een ​​token te genereren:

  1. Ga naar Instellingen > Instellingen voor ontwikkelaars > Persoonlijke toegangstokens
  2. Klik Genereer nieuwe token
  3. Geef het een beschrijving zoals "Mijn Python-script"
  4. Selecteer de gewenste bereiken/machtigingen
  5. Klik Token genereren

Zorg ervoor dat u het token kopieert. U kunt het later niet meer ophalen!

Veel voorkomende scopes zijn onder meer:

  • repo – Toegang tot privéopslagplaatsen
  • admin:org – Beheer organisaties
  • notifications – Toegang tot meldingen
  • user – Lees-/schrijftoegang tot profielinformatie

Laten we ons token gebruiken om een ​​nieuwe repository te maken:

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!

Het token authenticeert ons om privérepository's te maken.

U kunt ook gebruik maken van GitHub-apps die beperkte toegang hebben en niet verlopen zoals gebruikerstokens. Apps moeten door een gebruiker/organisatie worden geïnstalleerd om toegang te krijgen.

Werken met GitHub-opslagplaatsen

Een groot deel van de API omvat het beheer van repositories. Laten we enkele algemene repositorytaken doornemen.

Koop een opslagplaats

Om de metagegevens van een repository op te halen:

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

We hebben toegang tot informatie zoals beschrijvingen, sterren, klonen, bijdragers, talen, releases, commits en nog veel meer!

Lijst met opslagplaatsen

Om opslagplaatsen voor een gebruiker of organisatie weer te geven:

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

Maak een opslagplaats

We kunnen ook nieuwe repositories maken:

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

Verwijder een opslagplaats

Om een ​​opslagplaats te verwijderen:

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

Dit geeft u volledige controle over het programmatisch beheren van uw repository's.

Opmerking: Om veiligheidsredenen moeten alle API-verzoeken via HTTPS worden gedaan.

Werken met problemen in opslagplaatsen

Met de Issues API kunt u problemen en pull-aanvragen beheren. Jij kan:

  • Problemen weergeven/aanmaken/bewerken/sluiten/heropenen
  • Vergrendel gesprekken, voeg PR's samen
  • Opmerkingen indienen en bewerken
  • Voeg labels, toegewezen personen en mijlpalen toe

Om bijvoorbeeld problemen uit een repository op te halen:

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

Hierdoor kunt u issuemanagement integreren in externe tools en workflows.

Werken met Git-gegevens

De Git Data API biedt eindpunten voor directe interactie met Git-repository's. Jij kan:

  • Beheer filialen en tags
  • BLOB-gegevens lezen/schrijven
  • Haal commits, referenties en bomen op
  • Vergelijk commits, referenties, bestanden

Om bijvoorbeeld commits uit een repository te krijgen:

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

Dit biedt volledige toegang tot het programmatisch beheren van Git-repository's.

Zoeken naar opslagplaatsen en code

De zoek-API van GitHub maakt het mogelijk om naar vrijwel alles in de meer dan 96 miljoen openbare repository's te zoeken.

Om bijvoorbeeld Python-projecten met betrekking tot datawetenschap te vinden:

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 

De syntaxis van de zoekopdracht ondersteunt Booleaanse operatoren, filters, contextselectie en meer om gerichte zoekopdrachten uit te voeren.

Een paar voorbeelden:

  • org:facebook language:python stars:>5000 – Python-opslagplaatsen in Facebook-org met meer dan 5 sterren
  • filename:requirements.txt django – Repo's met vereisten.txt die Django bevatten
  • user:defunkt location:san francisco – Vind de repos van defunkt als de locatie SF is

De Search API biedt veel creatieve manieren om interessante datasets en inzichten uit de open data van GitHub te halen.

Met behulp van de GraphQL-API van GitHub

Naast de REST API biedt GitHub een GraphQL API voor flexibelere queries.

Met GraphQL kunt u precies de gewenste gegevens specificeren in geneste JSON-structuren. U kunt in één aanvraag meerdere gekoppelde entiteiten opvragen.

Hier vragen we bijvoorbeeld de profielgegevens van een gebruiker en de namen van hun repository's:

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

Hierdoor kunt u precies de respons vormgeven die u nodig heeft. De GraphQL-verkenner helpt bij het interactief bouwen van query's.

Integratie van de GitHub API in Apps

Nu je de basis kent, gaan we kijken naar het bouwen van applicaties met de GitHub API.

OAuth-app-autorisatie

Gebruik voor webapps GitHub OAuth voor autorisatie in plaats van hardgecodeerde tokens. Hierdoor kunnen gebruikers de toegang intrekken.

  1. Registreer een nieuwe OAuth-app
  2. Gebruik de client-ID en het geheim voor autorisatie
  3. Leid gebruikers om om GitHub-toegang aan te vragen

Nu kan uw app namens gebruikers API-aanroepen doen.

Geauthenticeerde verzoeken indienen

Eenmaal geautoriseerd, kunt u bellen met het toegangstoken:

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

Hierdoor hebt u toegang tot privégegevens op basis van de machtigingen van de gebruiker.

snelheidsbeperking

De GitHub API heeft snelheidslimieten voor verzoeken. Controleer de status van uw app:

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

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

Spreid verzoeken over de tijd en cache gegevens om limieten te vermijden.

Foutloos omgaan met fouten

Controleer altijd statuscodes en handel fouten correct af:

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

Dit zorgt ervoor dat uw app stabiel blijft in productie.

Door de best practices van API te volgen, kunt u robuuste integraties en tools voor ontwikkelaars bouwen.

Een GitHub Dashboard-app bouwen

Laten we samenbrengen wat we hebben geleerd door een webapp te bouwen voor het bekijken van uw GitHub-profiel en repository's met 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)

We gebruiken pyGithub om sommige API-interacties te vereenvoudigen. De startpagina geeft het dashboard.html sjabloon:

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

Dit laat zien hoe je een app kunt bouwen om GitHub-gegevens weer te geven voor een ingelogde gebruiker!

De mogelijkheden zijn eindeloos om de API te integreren in je eigen apps en tools.

Best practices bij het gebruik van de GitHub API

Hier volgen enkele best practices om ervoor te zorgen dat uw applicaties die de GitHub API gebruiken, performant, veilig en robuust zijn:

  • authenticatie – Gebruik tokens of OAuth, vermijd het verzenden van onbewerkte gebruikersnaam/wachtwoorden.
  • HTTPS – Gebruik altijd HTTPS-eindpunten om gegevens te beveiligen.
  • snelheidsbeperking – Spreid verzoeken uit en cache gegevens om limieten te vermijden.
  • Opdelen – Gebruik paginaparameters om door resultatensets te bladeren.
  • foutafhandeling – Ga netjes om met 4xx- en 5xx-fouten.
  • Testen – Test API-aanroepen grondig, gebruik spotting voor iteraties.
  • Documentatie – Lees de documenten aandachtig, ze bieden codevoorbeelden voor elk eindpunt.

Het volgen van API best practices voorkomt vermijdbare fouten en zorgt voor betrouwbare apps.

Andere GitHub API-functies om te verkennen

We hebben nog maar de oppervlakte bereikt van wat mogelijk is met de GitHub API. Hier zijn enkele andere coole functies om te bekijken:

  • GitHub-acties-API – Automatiseer workflows door acties te activeren met de API
  • GitHub-pagina's – Beheer Pages-sites programmatisch
  • Gisten – Beheer codefragmenten, configuraties en sjablonen
  • organisaties – Beheer organisatieteams, leden en machtigingen
  • Git-database – Rechtstreekse toegang tot Git-objectgegevens zoals blobs en bomen
  • GitHub Marktplaats-API – Beheer apps die worden vermeld in GitHub Marketplace
  • GitHub Discussies-API – Bouw communityforums en vraag- en antwoordintegraties

De API-mogelijkheden worden uitgebreid naarmate GitHub nieuwe functies toevoegt, dus houd nieuwe eindpunten in de gaten.

Vergelijk de API van GitHub met alternatieven

Hoe verhoudt de API van GitHub zich voor ontwikkelaars die met andere platforms werken tot concurrenten zoals GitLab, BitBucket, Azure DevOps, enz.?

Over het algemeen onderscheiden de API-mogelijkheden van GitHub zich in termen van:

  • Adoptie – Veruit de grootste gebruikersbasis en community
  • Documentatie – Zeer grondige documenten met voorbeelden
  • REST + GrafiekQL – Flexibiliteit van zowel REST- als GraphQL-eindpunten
  • Zoek mogelijkheden – Krachtige geïndexeerde zoekactie in alle openbare gegevens
  • Ecosysteem – Enorm ecosysteem van apps, tools en integraties
  • Code-analyse – Mogelijkheden voor het scannen van codes, linting en kwaliteitsanalyse

GitHub is duidelijk toonaangevend op het gebied van API-functionaliteit dankzij de schaalgrootte en jarenlange ontwikkeling. Andere providers zoals GitLab en BitBucket breiden de API-mogelijkheden uit om te kunnen concurreren. Maar voorlopig blijft GitHub de meest complete API voor programmatische interactie met Git-repository's.

Volgende stappen en bronnen

Ik hoop dat deze handleiding een uitgebreid overzicht geeft van het gebruik van de GitHub API met Python!

Hier zijn enkele volgende stappen en bronnen voor verder leren:

  • Duik dieper in de documenten: Ontwikkelaarsdocumenten
  • Bekijk API-video's: GitHub-leerlab
  • Ontdek apps die zijn gebouwd met de API: GitHub-marktplaats
  • Meer informatie over OAuth: OAuth-appdocumenten
  • Bekijk bibliotheken zoals PyGithub en urllib3 om het API-gebruik te vereenvoudigen
  • Overweeg spottende reacties om de API-interactie te testen
  • Ontdek bijbehorende tools zoals GitHub CLI en GitHub Actions

De GitHub API opent een hele wereld aan mogelijkheden voor het bouwen van ontwikkelaarstools, het automatiseren van workflows, het beheren van projecten en het analyseren van gegevens. Ik hoop dat je je geïnspireerd voelt om iets waardevols voor de gemeenschap te creëren!

Veel plezier met coderen!

Doe mee aan het gesprek

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *