Haben Sie keine Angst vor JSON oder Ihrer ersten API-Anwendung

Ich habe ungefähr 8 Jahre Erfahrung in der Codeauswahl. In dieser Zeit habe ich viele verschiedene Sprachen und Technologien in verschiedenen Richtungen ausprobiert: von der "Entwicklung" aller Arten von Phishing-Witzen auf PHP Devel Studio bis hin zu vollwertigen Webanwendungen auf modernen Frameworks und Software in neuronalen Netzwerken. Übrigens, mein erstes Eintauchen in die Programmierung fand mit 12 Jahren dank diesem Beitrag statt. Jetzt bin ich in meinem zweiten Bachelor-Jahr in Informatik. Bis vor kurzem, nämlich bis zum ersten Jahr, hatte ich jedes Mal, wenn ich das Wort JSON sah, lange Angst. Verstanden und verstanden. Aber ich bemerkte, dass viele Leute aus meiner Gruppe immer noch mit keiner API arbeiteten. Ich liebe Artikel, in denen der Autor sein Thema ausführlich erklärt, Codestücke anfügt und kaut, warum und warum er sich dazu entschlossen hat, und sich nicht mit komplexen Begriffen und Technologien befasst. In diesem Artikel beschreibe ich die Verwendung der API (am Beispiel der PUBG-API) mit einfachen Worten für einen Neuling, wie sie sagen, ohne Bullshit. Lass uns gehen!

Bild

Google Colab


Um diesen Artikel zu vervollständigen, benötigen Sie ein Minimum an Python-Kenntnissen. Mit "minimal" meine ich Drucken, wenn auch für alle Arten von Blättern, Wörterbücher. Wir werden in der Google Colaboratory-Umgebung (im Folgenden einfach „colab“) arbeiten. Colab ist eine kostenlose Browser-Umgebung, in der clevere Leute ihre Programme mit künstlicher Intelligenz trainieren und testen und jede Art von Forschung betreiben. Aber jetzt ist es uns egal, wir interessieren uns für das Format, in das der Code geschrieben wird: Die ausführenden Dateien werden "Laptops" genannt (aus dem Englischen - ein Notizbuch). In diesem Format kann der Code direkt im Browser in Teilen geschrieben und ausgeführt werden (ein Teil des Codes in colab wird als "Code-Zelle" bezeichnet).

Lass es uns versuchen:

  1. Wir gehen zu Google Colab und melden uns mit Ihrem Google-Konto an
  2. Wir werden von der Hauptseite mit Hilfe zur Verwendung von Colab begrüßt und erstellen unseren ersten Laptop, indem Sie auf Datei> Neues Python 3-Notizbuch in der oberen linken Ecke klicken

    In ein paar Sekunden sollten wir so etwas sehen:

  3. Beachten Sie die folgenden Tastaturkürzel:
    Strg + Eingabetaste (Befehlstaste + Eingabetaste für MacOS) - Führen Sie die aktuelle Code-Zelle aus
    ALT + Eingabetaste (Option + Eingabetaste für MacOS) - Führen Sie die aktuelle Codezelle aus, erstellen Sie sie und wechseln Sie zur neuen Codezelle

In der Code-Zelle können Sie sofort regulären Python-Code schreiben. Wenn wir einen Konsolenbefehl ausführen möchten, wird vor der Zeile ein Ausrufezeichen eingefügt, zum Beispiel:

Python-Code

print('Hello, PUBG!') 

Konsolenteam

 !mkdir hello_pubg !cd hello_pubg 

Versuchen wir, einen einfachen Algorithmus auszuführen, indem wir beispielsweise den größten gemeinsamen Teiler zweier Zahlen finden:

  1. In die Code-Zelle geben wir ein:

     a = 10 b = 8 

  2. Drücken Sie Alt + Enter (Option + Enter für MacOS) und schreiben Sie in die neue Code-Zelle:

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

  3. Drücken Sie erneut Alt + Eingabe (Option + Eingabe für MacOS) und schreiben Sie in die neue Code-Zelle:

     print(gcd) 

    und drücken Sie Strg + Eingabetaste (Befehlstaste + Eingabetaste für MacOS). Wir bekommen die Antwort: 2



Wie Sie sehen, ist die Arbeit in Colab sehr einfach, und das Testen einiger Funktionen Ihrer zukünftigen Anwendung ist hier sehr praktisch. Übrigens, wenn wir den Algorithmus mit anderen Zahlen ausführen möchten, müssen wir die Werte der Variablen in der ersten Code-Zelle ändern, sie starten, dann die zweite und dann die dritte.

Wir schließen den Laptop nicht, gehen wir weiter.

PUBG API


Nun, was ist eine API in einfachen Worten. Jedes Mal, wenn wir eine Website aufrufen, antwortet der Server dieser Website mit HTML-Code. Wenn Sie beispielsweise auf google.com gehen, sendet der Google-Server HTML-Code an unseren Browser, der vom Browser selbst verarbeitet wird, und der Browser zeigt uns einen schönen Code ein Bild, nachdem alle Stile usw. verarbeitet wurden Dies ist jedoch nicht immer der Fall. Wenn Sie beispielsweise diesem Link folgen, sehen Sie eine ähnliche Ausgabe wie bei einem Wörterbuch in Python mit dem Befehl print (). So ist es. Dies ist ein Wörterbuch mit aktuellen Wetterinformationen, die wir von openweathermap erhalten haben . Und eine Person wird solche Antworten vom Server niemals alleine verarbeiten. Die Entwickler dieser Seite haben uns solche Links zur Verfügung gestellt, damit wir sie in unseren Programmen verwenden können. Wenn wir einen Wetterblock auf unserer Website oder Anwendung erstellen müssen, rufen wir im Allgemeinen openweathermap (oder ein anderes Analogon, das eine API bereitstellt) auf, öffnen die Dokumentation und verwenden sie. Die API zum Dekodieren und Übersetzen in Russisch klingt wie eine „Anwendungsprogrammierschnittstelle“, dh eine Sammlung von Anforderungen des Formulars site.com/request , die ein Wörterbuch mit den benötigten Informationen zurückgeben. Das Format dieser Wörterbücher heißt JSON. Es gibt auch ein XML-Format, das wir in diesem Artikel jedoch nicht analysieren werden.

Zuerst habe ich geschrieben, dass wir die offizielle API der Entwickler des Spiels PUBG verwenden werden. Fangen wir an. Hier ist die Ressource, mit der wir die erhaltene Formation überprüfen, in einem neuen Tab öffnen und den Spitznamen eines Spielers bei der Suche nach Spielern eingeben, zum Beispiel "Twitch_todol". Die Statistiken dieses Spielers werden geöffnet:



Wir öffnen sein letztes Match (das erste in der Liste) und sehen alle Informationen, die wir brauchen:



So rufen Sie Informationen zu dieser Übereinstimmung über die PUBG-API ab:

  1. Wir gehen auf die offizielle Seite des PUBG-Entwicklers .
  2. Melden Sie sich an oder registrieren Sie sich auf der Seite, indem Sie auf die Schaltfläche EIGENEN API-SCHLÜSSEL ERHALTEN klicken. Und es spielt keine Rolle, ob wir dieses Spiel gespielt haben oder nicht. Wir müssen nur unser Token von dieser Site beziehen, d. H. Den API-Schlüssel.

    Jedes Mal, wenn wir uns an den PUBG-Server wenden, um Informationen zu erhalten, müssen wir ihm unser eindeutiges Token bereitstellen. Dies geschah aus verschiedenen Gründen, wobei es am offensichtlichsten war, dass die Entwickler des Spiels wissen konnten, wer genau Informationen von ihrem Server erhält, und Einschränkungen für jeden Programmierer vornehmen konnten. In diesem Fall haben wir eine Einschränkung - nicht mehr als 10 Anfragen pro Minute. Das ist mehr als genug für uns.
  3. Wir erstellen die Anwendung und erhalten unser Token



    Momentan ist es nicht sehr wichtig, was wir hier eingegeben haben. Wir klicken auf die Create-App und sehen eine lange Reihe von Zeichen über diesen Typ (verwenden Sie Ihre eigene, diese funktioniert nicht):

     eyJ0eXAiOiJKV1QiLWFeCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5ZjIwYTJkMC0xMzYwLTAxMzgtZTFhYS03ZDVjOWM4YTdjZWUiLCJpc3MiOiJnYW1lbG9ja2VyIiwiaWF04IjoxNTc4MzkwNDQwLCJwdWIiOiJibHVlaG9sZSIsInRpdGxlIjoicHViZyIsImFwcCI6ImxlYW5jb3JlZ2ctZ21hIn0.fwFwEeEw3OghE8sACAHbpKWlJFBVo6F_DbB7dbanybLIIToJc4 

  4. Kopieren Sie Ihr Token und öffnen Sie Ihren Tab mit colab. Du hast es nicht geschlossen, oder?
  5. In der ersten Code-Zelle geben wir diesen Code ein:

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

    Und renn. In diesem Codeteil haben wir ein Wörterbuch (Header) erstellt, das die grundlegenden Parameter für den Zugriff auf die PUBG-API enthält. Wir werden dieses Wörterbuch jedes Mal an den Server senden, wenn wir etwas davon erhalten möchten. Bedingt sagen wir dem Server "Hallo, mein Name ist Petya" - wobei Petya unser Token ist - "Ich möchte Informationen von Ihnen im JSON-Format erhalten!" Ich habe den Code, den ich Ihnen gerade gegeben habe, aus der PUBG-API-Dokumentation auf dieser Seite erhalten .
  6. Jetzt müssen wir sagen, was genau wir vom Server bekommen müssen. In unserem Fall wollen wir von ihm das letzte Spiel des Twitch_todol-Spielers bekommen. Für Informationen zum Player stellen wir eine Anfrage an
    api.pubg.com/shards/steam/players?filter [playerNames] = Twitch_todol

    Das ist (in der neuen Code-Zelle):

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

    In der zweiten Zeile verwenden wir die Funktion aus der Anforderungsbibliothek, wobei der erste Parameter das ist, was wir vom Server benötigen, und der zweite Parameter unser Header-Wörterbuch ist. Mit anderen Worten, wir sagen zum Server "Hallo, ich bin Petya! Ich möchte von Ihnen Informationen über den Twitch_todol-Player im JSON-Format erhalten. "

    In der dritten Zeile übersetzen wir die Antwort vom Server in denselben JSON. Warum machen wir das? Tatsache ist, dass der Server keine JSON-Antwort an uns zurückgibt, sondern JSON in eine Zeichenfolge übersetzt. Und mit der .json () -Methode konvertieren wir diese Zeichenfolge in ein Wörterbuch, das Python versteht.

    Stellen wir dies sicher, indem wir in die neue Code-Zelle schreiben:

     type(player) 

    die antwort ist dikt . Das heißt, jetzt wissen wir sicher, dass die Player-Variable ein für Python verständliches Wörterbuch mit Informationen zum Player enthält.
  7. Was genau enthält dieses Wörterbuch? Mal sehen, wie es geht

     player.keys() 

    Wir sehen die Antwort:

    dict_keys (['data', 'links', 'meta'])

    Dies sind die Schlüssel zu unserem Wörterbuch. Was jeder von ihnen enthält, steht auf dieser Seite .

    Um sicherzustellen, dass wir den Player haben, den wir brauchen, werden wir Folgendes schreiben:

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

    Hier sehen wir die grundlegenden Informationen über den Spieler: Wenn er sich registriert hat, seinen Spitznamen, auf welcher Plattform er spielt und so weiter.
  8. Wir benötigen die ID seines letzten Matches, die wir auf der pubg.op.gg-Website überprüfen können, die bereits in einem unserer Browser-Tabs geöffnet ist. Dazu schreiben wir:

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

    Wir haben etwas Ähnliches wie "ca2c453b-649a-4556-b768-66b9e01aae63" (deins ist möglicherweise anders, da der Spieler zum Zeitpunkt des Lesens dieses Artikels bereits mehrere Matches spielen konnte). Verwenden Sie, was Sie selbst haben. Ich gebe Ihnen ein Beispiel, damit Sie nicht verwirrt werden.

    Also, wir kennen die ID der Übereinstimmung, jetzt wollen wir Informationen über diese Übereinstimmung erhalten, dafür erstellen wir die Variable match_id, die wir mit der ID gleichsetzen, die wir erhalten haben. Und wir stellen die Anfrage an eine etwas andere Adresse, aber nach dem üblichen Schema, das heißt wie folgt:

     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. Die Übereinstimmungsvariable, bei der es sich um ein Wörterbuch handelt, enthält alle Informationen zu dieser Übereinstimmung. Zunächst erhalten wir die Leistung aller Spieler in diesem Match:

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

    In diesem Fall füllen wir die Liste der Spieler (match_players) aus und durchlaufen das Wörterbuch match ['included'] ('included' ist der Schlüssel des Wörterbuchs, das die Indikatoren aller Spieler im Match enthält). Gleichzeitig überprüfen wir den Wert des Schlüssels 'type'. Warum prüfen wir, ob
    Spiel ['enthalten'] enthält Spielerinformationen? Tatsache ist, dass dies nicht ganz der Fall ist. Match ['enthalten'] enthält auch Informationen zu den Teams, in denen diese Spieler gespielt haben (dh Item ['Typ'] kann gleich 'Dienstplan' sein). Das heißt, match ['included'] sieht ungefähr so ​​aus:

    [Spieler, Team, Team, Spieler, Spieler, Spieler, Team, ...]

    Es ist nicht ganz klar, warum sich die Entwickler dazu entschlossen haben, aber das stört uns in keiner Weise.

    Also, wir haben die Leistung der Spieler, aber wir sind nicht besonders daran interessiert, wie andere Spieler in diesem Spiel gespielt haben. Wir werden uns die Leistung unseres Spielers Twitch_todol in diesem Spiel ansehen. Dazu führen wir aus:

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


Vergleichen Sie die resultierenden Statistiken:



mit Statistiken auf pubg.op.gg



Wir sehen, dass alles zusammenfällt. Freut euch! Übrigens, als ich diesen Artikel schrieb, hat unser Held bereits mehrere Matches gespielt, so dass einige der Screenshots, die ich oben gegeben habe, möglicherweise nicht zusammenfallen.

Fertigstellung


In diesem Artikel wollte ich unseren kleinsten Programmierern sagen, dass Sie keine Angst vor den Wörtern JSON und API haben sollten, dass sie bequem und klar implementiert sind und dass jeder Dokumentation beigefügt ist. Ich habe versucht, dies in der verständlichsten Sprache zu erklären, ohne komplexe Begriffe zu verwenden.

Außerdem möchte ich Habr und dem Autor ( ArhMax ) dafür danken, dass sie mir vor 8 Jahren beim ersten Schreiben des Codes geholfen haben.

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


All Articles