N'ayez pas peur de JSON ou de votre première application API

J'ai environ 8 ans d'expérience dans la cueillette de code. Pendant ce temps, j'ai réussi à essayer de nombreux langages et technologies différents dans différentes directions: du "développement" de toutes sortes de blagues de phishing sur PHP Devel Studio à des applications Web à part entière sur des cadres modernes et des logiciels sur des réseaux de neurones. Soit dit en passant, ma première immersion dans la programmation a eu lieu à l'âge de 12 ans grâce à ce post. Maintenant, je suis en deuxième année de licence en informatique. Jusqu'à récemment, c'est-à-dire jusqu'à la première année, j'ai longtemps eu peur à chaque fois que je voyais le mot JSON. Compris et compris. Mais j'ai remarqué que beaucoup de gars de mon groupe ne fonctionnaient toujours avec aucune API. J'adore les articles où l'auteur explique en détail son sujet, attache des morceaux de code et mâche pourquoi et pourquoi il a décidé de le faire, et ne se lance pas dans des termes et des technologies complexes. Dans cet article, je décrirai l'utilisation de l'API (en utilisant l'API PUBG comme exemple) avec des mots simples pour un débutant, comme on dit, sans conneries. C'est parti!

image

Google colab


Pour terminer cet article, vous aurez besoin d'une connaissance minimale de Python. Par "minimal", je veux dire imprimer, si, pour, eh bien, toutes sortes de feuilles, de dictionnaires. Nous travaillerons dans l'environnement Google Colaboratory (ci-après - simplement «colab»). Colab est un environnement de navigateur gratuit où les gars intelligents forment et testent leurs programmes avec l'intelligence artificielle et font toutes sortes de recherches. Mais maintenant cela n'a plus d'importance pour nous, nous nous intéressons au format pour écrire le code là-bas: les fichiers d'exécution là-bas sont appelés «ordinateurs portables» (de l'anglais - un ordinateur portable). Dans ce format, le code peut être écrit et exécuté en morceaux (un morceau de code dans colab est appelé une «cellule de code») directement dans le navigateur.

Essayons:

  1. Nous allons sur Google Colab et nous connectons avec votre compte Google
  2. Nous serons accueillis par la page principale avec de l'aide sur la façon d'utiliser Colab, et nous créerons notre premier ordinateur portable en cliquant sur Fichier> Nouveau bloc-notes Python 3 dans le coin supérieur gauche

    Dans quelques secondes, nous devrions voir quelque chose de similaire à ceci:

  3. N'oubliez pas les raccourcis clavier suivants:
    Ctrl + Entrée (Cmd + Entrée pour MacOS) - Exécuter la cellule de code actuelle
    ALT + Entrée (Option + Entrée pour MacOS) - Exécutez la cellule de code actuelle, créez et accédez à la nouvelle cellule de code

Dans la cellule de code, vous pouvez immédiatement écrire du code Python standard. Si nous voulons exécuter une commande de console, un point d'exclamation est inséré avant la ligne, par exemple:

Code Python

print('Hello, PUBG!') 

Équipe de la console

 !mkdir hello_pubg !cd hello_pubg 

Essayons d'exécuter une sorte d'algorithme simple, par exemple, en trouvant le plus grand diviseur commun de deux nombres:

  1. Dans la cellule de code, nous entrons:

     a = 10 b = 8 

  2. Appuyez sur Alt + Entrée (Option + Entrée pour MacOS) et écrivez dans la nouvelle cellule de code:

     while a != 0 and b != 0: if a > b: a %= b else: b %= a gcd = a + b 

  3. Appuyez à nouveau sur Alt + Entrée (Option + Entrée pour MacOS) et écrivez dans la nouvelle cellule de code:

     print(gcd) 

    et appuyez sur Ctrl + Entrée (Cmd + Entrée pour MacOS). Nous obtenons la réponse: 2



Comme vous pouvez le voir, travailler dans Colab est très simple et tester certaines fonctionnalités de votre future application est très pratique ici. Soit dit en passant, si nous voulons exécuter l'algorithme avec d'autres nombres, nous devons changer les valeurs des variables dans la première cellule de code, le démarrer, puis démarrer la deuxième puis la troisième.

Nous ne fermons pas l'ordinateur portable, allons plus loin.

API PUBG


Maintenant, qu'est-ce qu'une API en termes simples. Chaque fois que nous allons sur un site, le serveur de ce site répond avec du code HTML, c'est-à-dire en allant sur google.com, par exemple, le serveur Google envoie du HTML à notre navigateur, qui est traité par le navigateur lui-même, et le navigateur nous montre une belle une image, ayant traité tous les styles, etc. Mais cela ne se produit pas toujours, par exemple, en suivant ce lien, nous verrons quelque chose de similaire à la sortie d'un dictionnaire en python avec la commande print (). Il en est ainsi. Ceci est un dictionnaire d'informations météorologiques actuelles que nous avons obtenues de openweathermap . Et une personne ne gérera jamais seule de telles réponses du serveur. Les développeurs de ce site nous ont fourni de tels liens afin que nous puissions les utiliser dans nos programmes. En général, si nous avions besoin de faire un blocage météo sur notre site Web ou notre application, nous allons sur openweathermap (ou tout autre analogue qui fournit une API), ouvrons leur documentation et l'utilisons. L'API dans le décodage et la traduction en russe ressemble à une «interface de programmation d'application», c'est-à-dire une collection de demandes du formulaire site.com/request qui renvoient un dictionnaire avec les informations dont nous avons besoin. Et le format de ces dictionnaires s'appelle JSON. Il existe également un format XML, mais nous ne l’analyserons pas dans cet article.

Au début, j'ai écrit que nous utiliserons l' API officielle des développeurs du jeu PUBG. Commençons. Voici la ressource avec laquelle nous allons vérifier la formation obtenue, l'ouvrir dans un nouvel onglet et entrer le surnom de n'importe quel joueur dans la recherche de joueurs, par exemple, "Twitch_todol". Les statistiques de ce joueur s'ouvrent:



Nous ouvrons son dernier match (le premier de la liste) et voyons toutes les informations dont nous avons besoin:



Pour obtenir des informations sur cette correspondance à partir de l'API PUBG:

  1. Nous allons sur la page officielle du développeur PUBG .
  2. Connectez-vous ou inscrivez-vous sur la page en cliquant sur le bouton GET YOUR OWN API KEY. Et peu importe que nous jouions à ce jeu ou non. Nous avons juste besoin d'obtenir notre jeton sur ce site, c'est-à-dire la clé API.

    Chaque fois, en nous tournant vers le serveur PUBG pour toute information, nous devons lui fournir notre jeton unique. Cela a été fait pour diverses raisons, la plus évidente étant que les développeurs du jeu pouvaient savoir qui reçoit exactement les informations de leur serveur et faire des restrictions pour chaque programmeur. Dans ce cas, nous avons une limitation - pas plus de 10 demandes par minute. C'est plus que suffisant pour nous.
  3. Nous créons l'application et obtenons notre token



    Pour le moment, peu importe ce que nous avons entré ici. Nous cliquons sur l'application Créer et nous voyons un long ensemble de caractères, à propos de ce type (utilisez le vôtre, celui-ci ne fonctionne pas):

     eyJ0eXAiOiJKV1QiLWFeCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5ZjIwYTJkMC0xMzYwLTAxMzgtZTFhYS03ZDVjOWM4YTdjZWUiLCJpc3MiOiJnYW1lbG9ja2VyIiwiaWF04IjoxNTc4MzkwNDQwLCJwdWIiOiJibHVlaG9sZSIsInRpdGxlIjoicHViZyIsImFwcCI6ImxlYW5jb3JlZ2ctZ21hIn0.fwFwEeEw3OghE8sACAHbpKWlJFBVo6F_DbB7dbanybLIIToJc4 

  4. Copiez votre jeton et ouvrez votre onglet avec colab. Vous ne l'avez pas fermé, n'est-ce pas?
  5. Dans la première cellule de code, nous entrons ce code:

     import requests url = "endpoint-url" API_KEY = '< >' header = { "Authorization": "Bearer " + API_KEY, "Accept": "application/vnd.api+json" } 

    Et courez. Dans ce morceau de code, nous avons créé un dictionnaire (en-tête), qui contient les paramètres de base pour accéder à l'API PUBG. Nous enverrons ce dictionnaire au serveur chaque fois que nous voulons en tirer quelque chose. Conditionnellement, nous disons au serveur "Bonjour, je m'appelle Petya", - où Petya est notre token - "Je veux recevoir des informations de votre part au format JSON!" J'ai obtenu le morceau de code que je viens de vous donner dans la documentation de l'API PUBG sur cette page .
  6. Maintenant, nous devons dire exactement ce que nous devons obtenir du serveur. Dans notre cas, nous voulons obtenir de lui le dernier jeu du joueur Twitch_todol. Pour plus d'informations sur le joueur, nous faisons une demande à l'adresse
    api.pubg.com/shards/steam/players?filter [playerNames] = Twitch_todol

    C'est (dans la nouvelle cellule de code):

     player_name = 'Twitch_todol' r = requests.get('https://api.pubg.com/shards/steam/players?filter[playerNames]=' + player_name, headers=header) player = r.json() 

    où dans la deuxième ligne, nous utilisons la fonction de la bibliothèque de demandes, où le premier paramètre est ce dont nous avons besoin du serveur, et le deuxième paramètre est notre dictionnaire d'en-tête. En d'autres termes, nous disons au serveur "Bonjour, je suis Petya! Je souhaite obtenir des informations sur le lecteur Twitch_todol au format JSON. "

    Et dans la troisième ligne, nous traduisons la réponse du serveur dans ce même JSON. Pourquoi on fait ça? Le fait est que le serveur ne nous renvoie pas de réponse json, mais json traduit en chaîne. Et avec la méthode .json (), nous convertissons en quelque sorte cette chaîne en un dictionnaire que Python comprend.

    Assurons-nous de cela en écrivant dans la nouvelle cellule de code:

     type(player) 

    la réponse est dict . Autrement dit, nous savons maintenant avec certitude que la variable player contient un dictionnaire compréhensible pour Python avec des informations sur le player.
  7. Que contient exactement ce dictionnaire? Voyons voir en faisant

     player.keys() 

    Nous voyons la réponse:

    dict_keys (['données', 'liens', 'meta'])

    Ce sont les clés de notre dictionnaire. Ce que chacun d'eux contient est écrit sur cette page .

    Pour nous assurer d'avoir le joueur dont nous avons besoin, nous écrirons ce qui suit:

     player['data'][0]['attributes'] 

    Ici, nous voyons les informations de base sur le joueur: quand il s'est inscrit, son surnom, sur quelle plate-forme il joue, etc.
  8. Nous devons obtenir l'identifiant de sa dernière correspondance, que nous pouvons vérifier avec le site Web pubg.op.gg, qui est déjà ouvert dans l'un des onglets de notre navigateur. Pour cela nous écrivons:

     player['data'][0]['relationships']['matches']['data'][0]['id'] 

    Nous avons obtenu quelque chose de similaire à «ca2c453b-649a-4556-b768-66b9e01aae63» (le vôtre peut être différent, car le joueur au moment de la lecture de cet article pouvait déjà jouer plusieurs matchs). Utilisez ce que vous avez vous-même. Je vous donne un exemple pour que vous ne vous trompiez pas.

    Donc, nous connaissons l'id de la correspondance, obtenons maintenant des informations sur cette correspondance, pour cela nous créons la variable match_id, que nous assimilons à l'id que nous avons reçu. Et nous faisons la demande à une adresse légèrement différente, mais selon le schéma habituel, c'est-à-dire comme ceci:

     match_id = player['data'][0]['relationships']['matches']['data'][0]['id'] # id  r = requests.get('https://api.pubg.com/shards/steam/matches/' + match_id, headers=header) match = r.json() 

  9. La variable de correspondance, qui est un dictionnaire, contient toutes les informations sur cette correspondance. Pour commencer, nous obtenons les performances de tous les joueurs de ce match:

     match_players = [item for item in match['included'] if item['type'] == 'participant'] match_players 

    Dans ce cas, nous remplissons la liste des joueurs (match_players), en parcourant le dictionnaire match ['included'] ('included' est la clé du dictionnaire dictionnaire qui contient les indicateurs de tous les joueurs du match), en vérifiant simultanément la valeur de la clé 'type'. Pourquoi vérifions-nous si
    match ['included'] contient des informations sur le joueur? Le fait est que ce n'est pas entièrement vrai, le match [«inclus»] contient également des informations sur les équipes dans lesquelles ces joueurs ont joué (c'est-à-dire que l'élément [«type»] peut être égal à «alignement»). C'est-à-dire que match ['included'] ressemble à ceci:

    [joueur, équipe, équipe, joueur, joueur, joueur, équipe, ...]

    Il n'est pas entièrement clair pourquoi les développeurs ont décidé de faire exactement cela, mais cela ne nous dérange en aucune façon.

    Donc, nous avons obtenu les performances des joueurs, mais nous ne sommes pas particulièrement intéressés par la façon dont les autres joueurs ont joué dans ce match, nous examinerons les performances de notre joueur Twitch_todol dans ce match. Pour ce faire, nous effectuons:

     my_player_stats = [item for item in match_players if item['attributes']['stats']['name'] == player_name][0] my_player_stats 


Comparez les statistiques résultantes:



avec des statistiques sur pubg.op.gg



On voit que tout coïncide. Réjouis-toi! À propos, alors que j'écrivais cet article, notre héros a déjà réussi à jouer plusieurs matchs, donc certaines des captures d'écran que j'ai faites ci-dessus peuvent ne pas coïncider.

Achèvement


Dans cet article, je voulais dire à nos plus petits programmeurs que vous ne devriez pas avoir peur des mots JSON et API, qu'ils sont facilement et clairement mis en œuvre et qu'une documentation est jointe à chacun. J'ai essayé d'expliquer cela dans la langue la plus accessible, sans utiliser de termes complexes.

Et aussi, je tiens à remercier Habr et l'auteur ( ArhMax ) de m'avoir aidé à écrire le code pour la première fois il y a 8 ans.

Source: https://habr.com/ru/post/fr483964/


All Articles