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! !!
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を使うことでアスリート情報や登録してある自転車やシューズの情報を取得できます。
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.
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.
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.
Si vous enregistrez correctement l'icône, des valeurs telles que l'ID client et la feuille client seront données.
Il y a deux tâches principales.
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.
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.
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.
response_type Cette valeur est toujours ** code **.
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 (?).
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.
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.
clientID La valeur de l'ID client donné lors de l'enregistrement de l'application dans Strava
client_secret Valeur de la feuille client donnée lors de l'enregistrement de l'application dans Strava (Erreur dans le secret client?)
code La valeur du code inclus dans l'URL de la destination de la redirection plus tôt
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");
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");
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