Bianca Steffes
3 years ago
commit
1961b3de52
8 changed files with 286 additions and 0 deletions
-
1.gitignore
-
20export/.classpath
-
2export/.gitignore
-
23export/.project
-
15export/.settings/org.eclipse.jdt.core.prefs
-
4export/.settings/org.eclipse.m2e.core.prefs
-
28export/pom.xml
-
193export/src/export/Main.java
@ -0,0 +1 @@ |
|||||
|
/.metadata/ |
@ -0,0 +1,20 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-14"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/classes" path="src"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
@ -0,0 +1,2 @@ |
|||||
|
/bin/ |
||||
|
/target/ |
@ -0,0 +1,23 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>export</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
</natures> |
||||
|
</projectDescription> |
@ -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 |
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
@ -0,0 +1,28 @@ |
|||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
|
<modelVersion>4.0.0</modelVersion> |
||||
|
<groupId>export</groupId> |
||||
|
<artifactId>export</artifactId> |
||||
|
<version>0.0.1-SNAPSHOT</version> |
||||
|
<build> |
||||
|
<sourceDirectory>src</sourceDirectory> |
||||
|
<plugins> |
||||
|
<plugin> |
||||
|
<artifactId>maven-compiler-plugin</artifactId> |
||||
|
<version>3.8.1</version> |
||||
|
<configuration> |
||||
|
<release>14</release> |
||||
|
</configuration> |
||||
|
</plugin> |
||||
|
</plugins> |
||||
|
</build> |
||||
|
<dependencies> |
||||
|
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple --> |
||||
|
<dependency> |
||||
|
<groupId>com.googlecode.json-simple</groupId> |
||||
|
<artifactId>json-simple</artifactId> |
||||
|
<version>1.1.1</version> |
||||
|
</dependency> |
||||
|
|
||||
|
|
||||
|
</dependencies> |
||||
|
</project> |
@ -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<String, File> athletesTempFiles = new HashMap<String, File>(); |
||||
|
// 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 <intended Filename, File> which should be zipped |
||||
|
* @throws IOException If there was an error zipping |
||||
|
*/ |
||||
|
private static void zipAllFiles(Map<String,File> 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<String> tokens = new ArrayList<>(); |
||||
|
//TODO: tokens befüllen |
||||
|
|
||||
|
for (String token : tokens) |
||||
|
{ |
||||
|
oneAthlete(token); |
||||
|
athleteId++; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue