[JAVA] Obtenez des informations de compte en accédant à l'API de Strava

introduction

Strava a une API! Mais il n'y a pas de document japonais! C'est difficile à comprendre! J'ai eu du mal dans cette situation, alors j'aimerais garder un record pour l'ingénieur des athlètes. Exercice ensemble et codons avec un corps sain! !!

Qu'est-ce que Strava

Ceci est un SNS pour les athlètes. Vous pouvez enregistrer diverses activités telles que la course à pied, le vélo et la natation. Dans strava, Developer APIが提供されており、このAPIを使うことでアスリート情報や登録してある自転車やシューズの情報を取得できます。

Contenu de cet article

Il décrit comment enregistrer l'application dans Strava, faire une requête HTTP et obtenir les informations sur le vélo. AVOIR? PUBLIER? Qu'est-ce que c'est? Je l'ai fait à partir d'un tel état, donc je pense que le contenu est facile à comprendre même pour les débutants.

Environnement de développement

Surtout cette fois, je pense que cela ne dépend pas de l'environnement de développement, mais je vais le décrire pour le moment.

Enregistrez l'application avec Strava

Tout d'abord, connectez-vous à strava et accédez à la page des paramètres sous Mon application API ( https://developers.strava.com/)アクセスすると自分のアプリを登録することができます。

À ce stade, ce n'est pas grave si vous n'avez pas d'application distincte, alors enregistrez-vous de manière appropriée. Pour le moment le site web

http://127.0.0.1:8080

ça ira. : 8080 est réglé sur 8080 car je prévoyais de créer une application avec tomcat. (8080 est le numéro de port utilisé par tomcat.)

Domaine de rappel d'authentification également

127.0.0.1:8080

Je vais le laisser tel quel.

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

Si vous enregistrez correctement l'icône, des valeurs telles que l'ID client et la feuille client seront données. スクリーンショット 2019-09-22 21.49.00.png

Accéder à l'API Web

Il y a deux tâches principales.

  1. Obtenez le jeton d'accès nécessaire pour accéder à l'API Web.
  2. Utilisez ensuite ce jeton pour accéder à l'API Web et obtenir les informations.

1. Obtenez un jeton d'accès

Strava a introduit un mécanisme appelé Oauth 2.0. En ce qui concerne Oauth, l'article Qiita suivant était très facile à comprendre, veuillez donc vous y référer. L'explication la plus simple d'OAuth

Fondamentalement, la [documentation officielle] de strava (https://developers.strava.com/docs/authentication/ ) Sera suivi.

Pour obtenir le jeton, utilisez la méthode GET pour ignorer la requête HTTP avec l'URL suivante plus les informations d'en-tête.

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

Lors de l'ajout d'informations dans la méthode GET, ajoutez-les après l'URL. Les cinq informations suivantes sont nécessaires pour obtenir le jeton cette fois.

  1. clientid Il s'agit de la valeur de l'ID client qui était affichée lorsque vous avez enregistré l'application dans Strava plus tôt.

  2. redirect_uri Donnez l'URL vers laquelle vous serez redirigé une fois l'authentification terminée. ** Remarque: la demande échouera si elle n'est pas incluse dans le domaine de cette URL redirigée et le domaine de rappel d'authentification lorsque vous avez enregistré votre application auprès de Strava ** Donc, dans ce cas, le domaine de redirect_uri doit également être 127.0.0.1.

  3. response_type Cette valeur est toujours ** code **.

  4. approval_prompt Sélectionnez ** forcer ** ou ** auto **. ** force **: l'authentification est effectuée à chaque fois. ** auto **: Une fois l'authentification réussie, l'authentification sera effectuée automatiquement pendant un certain temps (?).

  5. scope Vous pouvez décider de la plage d'accès aux informations utilisateur. Étant donné que diverses choses telles que ** read **, ** read_all **, ** profile: read_all ** sont préparées Choisissez celui qui convient à ce que vous souhaitez faire avec votre application.

À titre d'exemple, l'URL avec l'en-tête ajouté est la suivante.

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

Lorsque vous accédez à cette URL, vous verrez un écran comme celui ci-dessous. スクリーンショット 2019-09-22 22.21.22.png

Si vous appuyez sur Autoriser ici, vous serez redirigé vers l'écran de connexion Strava, et lorsque vous vous connecterez, vous serez authentifié et vous serez redirigé vers l'URL de redirection. Je pense que l'URL redirigée contient la partie "code =".

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

** Notez la valeur de ce code telle qu'elle sera utilisée. ** **

Ensuite, envoyez une requête HTTP à l'URL suivante à l'aide de la méthode POST.

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

Vous pouvez obtenir le jeton d'accès en donnant les informations nécessaires au corps de cette méthode POST. Les cinq informations suivantes sont données au corps.

  1. clientID La valeur de l'ID client donné lors de l'enregistrement de l'application dans Strava

  2. client_secret Valeur de la feuille client donnée lors de l'enregistrement de l'application dans Strava (Erreur dans le secret client?)

  3. code La valeur du code inclus dans l'URL de la destination de la redirection plus tôt

  4. grant_type Assurez-vous d'utiliser ** code_autorisation **. Je pense que l'implémentation de la méthode POST diffère selon l'environnement dans lequel l'application est implémentée, mais dans le cas de Java, elle a été implémentée sous la forme suivante.

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

Et comme ** access_token ** existe dans la réponse à cette demande, récupérez ce jeton. L'exemple de code ressemble à ce qui suit.

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. Obtenez des informations

J'aimerais obtenir des informations sur les vélos en utilisant le jeton d'accès que j'ai obtenu plus tôt. Afin d'obtenir les informations sur le vélo, il semble qu'elles soient écrites dans les informations sur les athlètes si vous les obtenez, alors je vais essayer d'obtenir les informations sur les athlètes.

Selon la documentation officielle (https://developers.strava.com/docs/reference/#api-Athletes)

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

D'un autre côté, il est dit que si vous donnez un jeton à la propriété et que vous l'OBTENEZ, une réponse sera retournée, je vais donc l'essayer comme indiqué.

L'exemple de code ressemble à ce qui suit. N'oubliez pas de préfixer le jeton avec "Bearer".

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 est la valeur du token obtenu plus tôt
    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);

Comme vous pouvez le voir dans le document officiel, les informations sur le vélo ont une structure imbriquée appelée bike []. Dans un tel cas, vous devez l'obtenir en utilisant jsonarray, etc.

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

finalement

J'ai écrit une série de flux pour obtenir des informations en appuyant sur l'API après avoir enregistré l'application dans Strava. Je pense que cela variera en fonction de l'environnement de mise en œuvre en fonction de la pièce que vous demandez, mais le flux général n'est-il pas le même? Utilisons bien l'API de Strava et faisons de l'exercice efficacement!

Recommended Posts

Obtenez des informations de compte en accédant à l'API de Strava
Obtenez des données avec une API créée par la commande curl
◆ Obtenez l'API créée par Spring Boot à partir de React
[Spring Boot] Obtenez des informations utilisateur avec l'API Rest (débutant)
Obtenir des informations de localisation Android
Obtenir des informations de localisation Android
Obtenez des informations de localisation avec Rails et triez par ordre croissant
Obtenir des informations EXIF en Java
[Ethereum] Obtenir des informations de bloc à l'aide de web3j
Acquisition des informations de localisation à l'aide de FusedLocationProviderClient
Obtenir des informations sur l'appelant à partir de la trace de la pile (Java)
[Java] Obtenir des informations sur les balises à partir de fichiers musicaux
Obtenez des informations de compte en accédant à l'API de Strava