web-dev-qa-db-fra.com

Comment consommer l'API Github GraphQL en utilisant Python?

Je souhaite accéder aux détails de Github à l'aide de l'API Github GraphQl v4. J'ai trouvé Graphene bibliothèque, mais je ne sais pas comment m'authentifier avec un jeton d'accès personnel en Python.
J'ai essayé de rechercher sur Google, mais je n'ai trouvé aucun exemple. C'est une bibliothèque Python qui peut créer des schémas graphiques et ne doit pas les consommer, j'ai essayé avec des `demandes 'mais j'ai échoué. Comment puis-je m'authentifier et trouver la liste des référentiels?

J'ai utilisé Github GraphQl Explorer pour trouver la liste des référentiels via ce code:

viewer {
repositories(first: 30) {
  totalCount
  pageInfo {
    hasNextPage
    endCursor
  }
  edges {
    node {
      name
    }
  }
}
11
Vaibhav Singh

Contrairement au reste, graphql n'a qu'un seul point final. Il vous suffit de faire un POST avec votre requête en tant qu'objet json. Vous devez fournir votre api_token vous obtenez de github dans le cadre des en-têtes.

import requests

url = 'https://api.github.com/graphql'
json = { 'query' : '{ viewer { repositories(first: 30) { totalCount pageInfo { hasNextPage endCursor } edges { node { name } } } } }' }
api_token = "your api token here..."
headers = {'Authorization': 'token %s' % api_token}

r = requests.post(url=url, json=json, headers=headers)
print (r.text)
13
sreenivas

Le graphène sert à construire des API GraphQL et non à les consommer.

Avez-vous vu cela: https://github.com/graphql-python/gql ?

C'est un client GraphQL pour Python.

J'espère que cela vous sera utile.

3
Yasss

Comme mentionné dans les réponses précédentes, appeler GraphQL est aussi simple que de faire une requête POST avec la chaîne de requête. Cependant, si vous êtes sur Python3, vous voulez quelque chose de plus avancé qui vérifiera également vos requêtes lors de la construction. et générez des classes de réponse de classe de données typées pour que vous consultiez la nouvelle bibliothèque GQL: https://github.com/ekampf/gql

0
Eran Kampf