· 6 years ago · Nov 16, 2019, 03:24 PM
1package main;
2
3import java.io.BufferedReader;
4import java.io.IOException;
5import java.io.InputStreamReader;
6import java.net.HttpURLConnection;
7import java.net.URL;
8
9/**
10 * Singleton, contains all methods and variables of the used API
11 * @author Dennis Rünzler
12 *
13 */
14public class ApiHelper {
15 //Variable anlegen, in der die URL gespeichert werden soll
16 private StringBuffer urlString;
17
18 /*public void setBaseString(String urlString) {
19 this.urlString = urlString;
20 }
21 public String getUrlString() {
22 return urlString;
23 }*/
24
25
26 public void setBaseString() {
27 StringBuffer urlString = new StringBuffer();
28 }
29 public StringBuffer getUrlString() {
30 return urlString;
31 }
32
33 // Methoden, die für die Authentifizierung notwendig sind
34
35 /* Methode, die den String für die Authentifizierung zusammensetzt, und dabei den String vor und nach dem ? zerschneidet
36 und dazwischen die anderen Methoden ausführt, so dass ? und & an der richtigen Stelle sind */
37 public void appendMethod(String method) {
38
39 if(urlString.indexOf("?")!=-1) {
40 int pos = urlString.indexOf("?");
41// urlString = urlString.substring(0, pos)+"/"+method+urlString.substring(pos);
42 urlString.insert(pos, "/"+method);
43 // Alternativ über Arrays, ist aber nicht so sauber da der Rechner mehr Rechenoperationen machen muss, wegen dem '+'
44 // String[] parts = urlString.split("\\?");
45 // urlString += parts[0]+"/"+method+"?"+parts[1];
46 }else {
47 urlString.append("/").append(method);
48 }
49 }
50 /*// Methode für das Jahr mit Parameterübergabe; hier ein int
51 public void appendYear(int year) {
52 checkAndAppendConcatenator();
53 urlString += "year="+year;
54 }
55
56 // Methode für das Jahr mit Parameterübergabe; hier ein String
57 public void appendYear(String year) {
58 appendYear(Integer.parseInt(year));
59 }
60
61 // Methode für den API-Key
62 public void appendCredentials() {
63 checkAndAppendConcatenator();
64 urlString += "api_key=416952d00c2786b01c36f84da35bd28937656220";
65 }
66
67 // Methode um den String für die Land-Abfrage zu erstellen
68 public void appendCountry(String country) {
69 checkAndAppendConcatenator();
70 urlString += "country="+country;
71 }*/
72
73 // Methode, um zu prüfen, ob die URL schon ein ? besitzt
74 private void checkAndAppendConcatenator() {
75 if(urlString.indexOf("?")!=-1) {
76 urlString.append("&");
77 }else {
78 urlString.append("?");
79 }
80 }
81 /*
82 * Methode, die den urlString zusammensetzt, Verknüpfung aller Methoden zu einer Methode
83 */
84 public void appendKeyValue(String key, String value) {
85 checkAndAppendConcatenator();
86 urlString.append(key).append(value);
87 }
88
89 public StringBuffer sendRequest() {
90 StringBuffer output = new StringBuffer();
91 //try-catch Konstrukt; dritte Erweiterung wäre finally; finally ist wie ein Aufräumer, was hier steht, wird auf jeden Fall gemacht
92 try {
93 // Aufbau der Verbindung mit HTTP-Code-Abfrage
94 URL url = new URL(ApiHelper.getInstance().getUrlString().toString());
95 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
96 conn.setRequestMethod("GET");
97 conn.setRequestProperty("Accept", "application/json");
98 if (conn.getResponseCode() != 200) {
99 throw new RuntimeException("Failed : HTTP Error code : " + conn.getResponseCode());
100 }
101 InputStreamReader in = new InputStreamReader(conn.getInputStream()); // Instanziertes Objekt InputStreamReader namens in, zeigt mir, was ich an Informationen bekomme; kommt von der Klasse InputStream
102 BufferedReader br = new BufferedReader(in); // liest zeilenweise und bezieht seine Daten vom InputStreamReader, Daten werden im Puffer zwischengespeichert; kann Geschwindigkeitsvorteile bringen
103 String line;
104 // Schleife, ob die Daten, die ich bekomme, das Ende erreicht haben oder nicht, wenn ja, dann Verbindung beenden
105 while ((line = br.readLine()) != null) {
106 System.out.println(line);
107 output.append(line).append("\r\n");
108 }
109 conn.disconnect();
110 } catch (IOException e) // Fehlerhandling, IOException ist höchste Instanz zum Fehler abfangen
111 {
112 e.printStackTrace(); //das Gleiche wie System.err
113 }
114 return output;
115 }
116 //------------- Singleton Code only below
117 /**
118 * The Instance, should only exist once
119 */
120 private static ApiHelper instance;
121 /**
122 * Constructor should only be called by factory method
123 */
124 private ApiHelper() {
125 }
126 /**
127 * Factory Method. Constructor is private to ensure only this method is used to obtain instance
128 * @return The Singleton instance
129 */
130 public static ApiHelper getInstance() {
131 if (instance == null) {
132 instance = new ApiHelper();
133 }
134 return instance;
135 }
136}