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