package backupclient.commons; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; import javax.swing.plaf.basic.BasicInternalFrameTitlePane; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class APIHandler { private String base_url; private String api_user; private String api_token; public APIHandler(String url, String api_user, String api_token) { this.base_url = url; this.api_user = api_user; this.api_token = api_token; } private String getDateTime() { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); return dateFormat.format(date); } public void set_api_data(String url_path, Map<String, String> dataList, int attempts) { if(attempts>10) { return; } try { URL url = new URL(this.base_url + url_path); String data = URLEncoder.encode("datetime", "UTF-8") + "=" + URLEncoder.encode(this.getDateTime(), "UTF-8"); data += "&api_user=" + api_user + "&api_token=" + api_token; for (Entry<String, String> pairs : dataList.entrySet()) { data += "&" + URLEncoder.encode(pairs.getKey(), "UTF-8") + "=" + URLEncoder.encode(pairs.getValue(), "UTF-8"); } HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream()); wr.write(data); wr.flush(); InputStream content = (InputStream) connection.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(content)); while (in.readLine() != null) { } } catch (Exception e) { try { Thread.sleep(4000); set_api_data(url_path, dataList, attempts + 1); } catch(InterruptedException ex) { Thread.currentThread().interrupt(); } e.printStackTrace(); } } public void set_api_data(String url_path, Map<String, String> dataList) { set_api_data(url_path, dataList, 0); } private String download_data_from_url(String u) { StringBuilder result = new StringBuilder(); try { u += "?" + URLEncoder.encode("datetime", "UTF-8") + "=" + URLEncoder.encode(this.getDateTime(), "UTF-8"); u += "&api_user=" + api_user + "&api_token=" + api_token; URL url = new URL(u); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); InputStream content = (InputStream) connection.getInputStream(); BufferedReader in = new BufferedReader(new InputStreamReader(content)); String line; while ((line = in.readLine()) != null) { result.append(line); } } catch (Exception e) { e.printStackTrace(); } return result.toString(); } public List<JSONObject> get_api_data(String url_path) { String url = this.base_url + url_path; List<JSONObject> list = new ArrayList<JSONObject>(); String json_content = this.download_data_from_url(url); Object obj = JSONValue.parse(json_content); try { list.add((JSONObject) obj); } catch (Exception e) { JSONArray jsonArray = (JSONArray) obj; for (Object jsonObject : jsonArray) { list.add((JSONObject) jsonObject); } } return list; } }