[JAVA] Erhalten Sie Kontoinformationen, indem Sie auf die Strava-API zugreifen

Einführung

Strava hat eine API! Aber es gibt kein japanisches Dokument! Es ist schwer zu verstehen! Ich hatte es in dieser Situation schwer und möchte daher ein Protokoll für den Athleteningenieur führen. Lassen Sie uns gemeinsam trainieren und mit einem gesunden Körper codieren! !!

Was ist Strava?

Dies ist ein SNS für Sportler. Sie können verschiedene Aktivitäten wie Laufen, Radfahren und Schwimmen aufzeichnen. In strava Entwickler-APIが提供されており、このAPIを使うことでアスリート情報や登録してある自転車やシューズの情報を取得できます。

Inhalt dieses Artikels

Es wird beschrieben, wie Sie die App in Strava registrieren und eine HTTP-Anfrage stellen, um die Fahrradinformationen abzurufen. ERHALTEN? POST? was ist das? Ich habe es aus einem solchen Zustand heraus geschafft, daher denke ich, dass der Inhalt selbst für Anfänger leicht zu verstehen ist.

Entwicklungsumgebung

Besonders diesmal denke ich, dass es nicht von der Entwicklungsumgebung abhängt, aber ich werde es vorerst beschreiben.

Registrieren Sie die App bei Strava

Melden Sie sich zunächst bei strava an und rufen Sie die Einstellungsseite unter Meine API-Anwendung auf ( https://developers.strava.com/)アクセスすると自分のアプリを登録することができます。

Zu diesem Zeitpunkt ist es in Ordnung, wenn Sie keine separate App haben. Registrieren Sie sich also entsprechend. Zur Zeit die Website

http://127.0.0.1:8080

Wird besorgt. : 8080 ist auf 8080 eingestellt, weil ich vorhatte, eine App mit Tomcat zu erstellen. (8080 ist die von Tomcat verwendete Portnummer.)

Authentifizierungs-Rückrufdomäne auch

127.0.0.1:8080

Ich werde es als belassen.

スクリーンショット 2019-09-22 21.42.37.png

Wenn Sie das Symbol entsprechend registrieren, werden Werte wie Kunden-ID und Kundenblatt angegeben. スクリーンショット 2019-09-22 21.49.00.png

Greifen Sie auf die Web-API zu

Es gibt zwei Hauptaufgaben.

  1. Holen Sie sich das Zugriffstoken, das zum Aufrufen der Web-API erforderlich ist.
  2. Verwenden Sie dann dieses Token, um auf die Web-API zuzugreifen und die Informationen abzurufen.

1. Holen Sie sich das Zugriffstoken

Strava hat einen Mechanismus namens Oauth 2.0 eingeführt. In Bezug auf Oauth war der folgende Qiita-Artikel sehr leicht zu verstehen. Bitte beziehen Sie sich darauf. Die verständlichste Erklärung von OAuth

Grundsätzlich stravas offizielle Dokumentation Wird befolgt.

Verwenden Sie die GET-Methode, um die HTTP-Anforderung mit der folgenden URL und den Header-Informationen zu überspringen, um das Token abzurufen.

https://www.strava.com/oauth/mobile/authorize

Wenn Sie Informationen in die GET-Methode einfügen, fügen Sie diese nach der URL hinzu. Die folgenden fünf Informationen sind erforderlich, um dieses Mal das Token zu erhalten.

  1. clientid Dies ist der Wert der Client-ID, die angezeigt wurde, als Sie die App zuvor in Strava registriert haben.

  2. redirect_uri Geben Sie die URL an, zu der Sie nach Abschluss der Authentifizierung umgeleitet werden. ** Hinweis: Die Anforderung schlägt fehl, wenn sie nicht in der Domäne dieser umgeleiteten URL und der Authentifizierungsrückrufdomäne enthalten ist, als Sie Ihre App bei Strava registriert haben. ** In diesem Fall muss die Domäne von redirect_uri also auch 127.0.0.1 sein.

  3. response_type Dieser Wert ist immer ** Code **.

  4. approval_prompt Wählen Sie entweder ** force ** oder ** auto **. ** force **: Die Authentifizierung wird jedes Mal durchgeführt. ** auto **: Sobald die Authentifizierung erfolgreich ist, wird die Authentifizierung für eine Weile automatisch durchgeführt (?).

  5. scope Sie können den Zugriffsbereich auf Benutzerinformationen festlegen. Da verschiedene Dinge wie ** read **, ** read_all **, ** profile: read_all ** vorbereitet sind Wählen Sie diejenige aus, die zu Ihrer App passt.

Die URL mit dem hinzugefügten Header lautet beispielsweise wie folgt.

https://www.strava.com/oauth/authorize?client_id=****&response_type=code&redirect_uri=http://127.0.0.1:8080/hoge&scope=read&approval_prompt=auto

Wenn Sie auf diese URL zugreifen, wird ein Bildschirm wie der folgende angezeigt. スクリーンショット 2019-09-22 22.21.22.png

Wenn Sie hier auf Zulassen klicken, werden Sie zum Strava-Anmeldebildschirm weitergeleitet. Wenn Sie sich anmelden, werden Sie authentifiziert und zur Weiterleitungs-URL weitergeleitet. Ich denke, dass die umgeleitete URL den Teil "code =" enthält.

hogehoge/state=&code=hogehogehogehoge&scope....

** Notieren Sie sich den Wert in diesem Code, da er verwendet wird. ** **.

Stellen Sie als Nächstes mithilfe der POST-Methode eine HTTP-Anforderung an die folgende URL.

https://www.strava.com/oauth/token

Sie können das Zugriffstoken erhalten, indem Sie dem Hauptteil dieser POST-Methode die erforderlichen Informationen geben. Die folgenden fünf Informationen werden dem Körper gegeben.

  1. clientID Der Wert der Client-ID, die bei der Registrierung der App in Strava angegeben wurde

  2. client_secret Der Wert des Kundenblatts wird bei der Registrierung der App in Strava angegeben (Fehler im Client-Geheimnis?)

  3. code Der Wert des Codes, der zuvor in der URL des Umleitungsziels enthalten war

  4. grant_type Stellen Sie sicher, dass Sie ** authorisation_code ** verwenden. Ich denke, dass die Implementierung der POST-Methode je nach der Umgebung, in der die Anwendung implementiert ist, unterschiedlich ist, aber im Fall von Java wurde sie in der folgenden Form implementiert.

request_token.java


    URL url = new URL("https://www.strava.com/oauth/token");
    HttpURLConnection con = (HttpURLConnection)url.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    con.setDoOutput(true);
    con.setDoInput(true);
    con.connect();

    String body = "client_id=****&client_secret=****&code=****&grant_type=authorization_code";
    byte[] postData = body.getBytes(StandardCharsets.UTF_8);
    try(DataOutputStream outputStream = new DataOutputStream(con.getOutputStream())){
        outputStream.write(postData);
    }

Da dann in der Antwort auf diese Anfrage ** access_token ** vorhanden ist, erhalten wir dieses Token. Der Beispielcode sieht wie folgt aus.

gettoken.java


    String responseData = "";
    InputStream stream = con.getInputStream();
    StringBuffer sb = new StringBuffer();
    String line = "";
    BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
    while((line = br.readLine()) != null) {
        sb.append(line);
    }
    try {
        stream.close();
    }catch(Exception e) {
        e.printStackTrace();
    }
    responseData = sb.toString();
    con.disconnect();

    JSONObject json = new JSONObject(responseData);
    String token = json.getString("access_token");

2. Informationen abrufen

Ich möchte tatsächlich Fahrradinformationen mit dem Zugriffstoken erhalten, das ich zuvor erhalten habe. Um die Fahrradinformationen zu erhalten, scheint es, dass sie in den Athleteninformationen geschrieben sind, wenn Sie sie erhalten, also werde ich versuchen, die Athleteninformationen zu erhalten.

Laut der offiziellen Dokumentation (https://developers.strava.com/docs/reference/#api-Athletes)

https://www.strava.com/api/v3/athlete

Auf der anderen Seite heißt es, dass, wenn Sie der Eigenschaft ein Token geben und es abrufen, eine Antwort zurückgegeben wird, also werde ich es wie gesagt versuchen.

Der Beispielcode sieht wie folgt aus. Vergessen Sie nicht, dem Token "Träger" voranzustellen.

getathlete.java


    url = new URL("https://www.strava.com/api/v3/athlete");
    HttpURLConnection con = (HttpURLConnection)url.openConnection();
    con.setRequestMethod("GET");
    String authorization = "Bearer " + token;  //Token ist der Wert des zuvor erhaltenen Tokens
    con.setRequestProperty("Authorization", authorization);
    con.setDoOutput(false);
    con.setDoInput(true);
    con.connect();

    responseData = "";
    stream = con.getInputStream();
    sb = new StringBuffer();
    line = "";
    br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
    while((line = br.readLine()) != null) {
        sb.append(line);
    }
    try {
        stream.close();
    }catch(Exception e) {
        e.printStackTrace();
    }
    responseData = sb.toString();
    con.disconnect();
    json = new JSONObject(responseData);

Wie Sie dem offiziellen Dokument entnehmen können, haben die Fahrradinformationen eine verschachtelte Struktur namens Fahrrad []. In einem solchen Fall müssen Sie es mit jsonarray usw. erhalten.

getbikes.java


    JSONArray BIKE = json.getJSONArray("bikes");
    int distance = BIKE.getJSONObject(Integer.parseInt(0)).getInt("distance");
    String bikeid = BIKE.getJSONObject(Integer.parseInt(0)).getString("id");
    String bikename = BIKE.getJSONObject(Integer.parseInt(0)).getString("name");

Schließlich

Ich habe eine Reihe von Flows geschrieben, um Informationen zu erhalten, indem ich nach der Registrierung der Anwendung in Strava auf API geklickt habe. Ich denke, dass es je nach Implementierungsumgebung je nach dem von Ihnen angeforderten Teil unterschiedlich sein wird, aber ist der allgemeine Ablauf nicht der gleiche? Lassen Sie uns die API von Strava gut nutzen und effizient trainieren!

Recommended Posts

Erhalten Sie Kontoinformationen, indem Sie auf die Strava-API zugreifen
Holen Sie sich Daten mit der API, die mit dem Befehl curl erstellt wurde
◆ Rufen Sie die von Spring Boot erstellte API von React ab
[Spring Boot] Benutzerinformationen mit Rest API abrufen (Anfänger)
Holen Sie sich Android-Standortinformationen
Holen Sie sich Android-Standortinformationen
Holen Sie sich Standortinformationen mit Rails und sortieren Sie in aufsteigender Reihenfolge
Holen Sie sich EXIF-Informationen in Java
[Ethereum] Blockinformationen mit web3j abrufen
Erfassung von Standortinformationen mit FusedLocationProviderClient
Abrufen von Anruferinformationen aus dem Stack-Trace (Java)
[Java] Tag-Informationen aus Musikdateien abrufen
Erhalten Sie Kontoinformationen, indem Sie auf die Strava-API zugreifen