commit 1961b3de52263eeeac8a9e5f3181bdc86885f9b1 Author: Bianca Steffes Date: Thu Sep 16 16:35:23 2021 +0200 Start: get athlete first draft diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e10e727 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.metadata/ diff --git a/export/.classpath b/export/.classpath new file mode 100644 index 0000000..b6b9c41 --- /dev/null +++ b/export/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/export/.gitignore b/export/.gitignore new file mode 100644 index 0000000..09e3bc9 --- /dev/null +++ b/export/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/target/ diff --git a/export/.project b/export/.project new file mode 100644 index 0000000..b846f4d --- /dev/null +++ b/export/.project @@ -0,0 +1,23 @@ + + + export + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/export/.settings/org.eclipse.jdt.core.prefs b/export/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..86fcef9 --- /dev/null +++ b/export/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=14 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=14 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=14 diff --git a/export/.settings/org.eclipse.m2e.core.prefs b/export/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/export/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/export/pom.xml b/export/pom.xml new file mode 100644 index 0000000..5f9a9e3 --- /dev/null +++ b/export/pom.xml @@ -0,0 +1,28 @@ + + 4.0.0 + export + export + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.8.1 + + 14 + + + + + + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + + + \ No newline at end of file diff --git a/export/src/export/Main.java b/export/src/export/Main.java new file mode 100644 index 0000000..eea2096 --- /dev/null +++ b/export/src/export/Main.java @@ -0,0 +1,193 @@ +package export; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import javax.net.ssl.HttpsURLConnection; + +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +public class Main +{ + public static final String baseUrl = "https://www.strava.com/api/v3/"; + private static int athleteId = 0; + private static JSONParser parser = new JSONParser(); + + private static void oneAthlete(String token) + { + HashMap athletesTempFiles = new HashMap(); + // get general information + athletesTempFiles.put("general_information.json", saveGeneralInformation(token)); + + int activityId=0; + + // get Activities + + // for each activity: save streams + + } + + /** + * Extracts an athletes general information and writes the information to a temp file. + * @param token Identifier / authorization token of the athlete + * @return Created temp file or {@code null} if there was an error. + */ + @SuppressWarnings("unchecked") + private static File saveGeneralInformation(String token) + { + //TODO: auf fehlende WErte vorbereiten + String sex = "sex"; + String country = "country"; + String date_pref = "date_preference"; + String meas_pref = "measurement_preference"; + String weight = "weight"; + + String json = makeOneRequest("athlete", token); + + JSONObject toSave = new JSONObject(); + try + { + Object obj = parser.parse(json); + JSONObject data = (JSONObject) obj; + toSave.put(sex, data.get(sex)); + toSave.put(country, data.get(country)); + toSave.put(date_pref, data.get(date_pref)); + toSave.put(meas_pref, data.get(meas_pref)); + toSave.put(weight, data.get(weight)); + toSave.put("id", athleteId); + + File temp = File.createTempFile("general_" +athleteId , ".json"); + temp.deleteOnExit(); + BufferedWriter bw = new BufferedWriter(new FileWriter(temp)); + bw.write(toSave.toString()); + bw.close(); + + return temp; + } + catch (ParseException e) + { + //sonst ganze Datei abspeichern, nicht schön, aber evtl sinnvoll + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + catch (IOException e) + { + //Fehler beim Schreiben als Temp-File + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + /** + * Zip a list of files in one .zip file. + * @param files HasMap of which should be zipped + * @throws IOException If there was an error zipping + */ + private static void zipAllFiles(Map files) throws IOException + { + //TODO: checken, ob hier an den richtigen Ort gespeichert wird. + //TODO: evtl. alles nochmal zippen + FileOutputStream fos = new FileOutputStream("athlete_"+athleteId+".zip"); + ZipOutputStream zipOut = new ZipOutputStream(fos); + for (String key : files.keySet()) + { + File fileToZip = files.get(key); + FileInputStream fis = new FileInputStream(fileToZip); + ZipEntry zipEntry = new ZipEntry(key); + zipOut.putNextEntry(zipEntry); + + byte[] bytes = new byte[1024]; + int length; + while((length = fis.read(bytes)) >= 0) { + zipOut.write(bytes, 0, length); + } + fis.close(); + } + zipOut.close(); + fos.close(); + } + + /** + * Handles one request to the API + * @param requestUrlExtension Extension for the baseUrl (without '/') + * @param token Identification / authorization token of the athlete + * @return The response as a String, an empty String in case of error. + */ + private static String makeOneRequest(String requestUrlExtension, String token) + { + HttpURLConnection connection = null; + StringBuilder result = new StringBuilder(); + try + { + //Create connection + URL url = new URL(baseUrl+requestUrlExtension); + connection = (HttpsURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setRequestProperty("Authorization", "Bearer [["+token+"]]"); + + int responseCode = connection.getResponseCode(); + + if (responseCode != HttpURLConnection.HTTP_OK) + { + //TODO: mehr auf response codes achten + return ""; + } + + InputStream inputStream = connection.getInputStream(); + + try (Reader reader = new BufferedReader( + new InputStreamReader(inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) + { + int c = reader.read(); + while (c != -1) + { + result.append((char) c); + c = reader.read(); + } + } + + } + catch(IOException e) + { + //TODO: was tun bei error + return ""; + } + return result.toString(); + } + + public static void main(String[] args) + { + List tokens = new ArrayList<>(); + //TODO: tokens befüllen + + for (String token : tokens) + { + oneAthlete(token); + athleteId++; + } + + } + +}