Wyciągnięcie aktualnej daty z API

0

Witam,
na początek chciałbym zaznaczyć że jestem hobbystą, więc proszę o wyrozumiałość 😉

Potrzebuję stąd >>> link <<< zapisać do pliku samą datę, ale niestety nie wiem jak to uczynić. Od trzech dni próbuję wyszukać odpowiedź ale ni huhu nie mogę. Nieważne jak wpiszę zapytanie to i tak dostaję wyniki w których inputStream jest plikiem i pomimo samodzielnych prób nic nie działa. Dlatego też jestem zmuszony prosić o pomoc.

Mógłby mi ktoś pomóc? Nie muszę dostawać ryby, wystarczy wędka.
Ważne żeby znaleźć punkt zaczepienia

2

Pokaż jak to robisz.

Czy słyszałeś w ogóle o czymś takim jak Rest API?
Tutaj masz swaggera tego API: https://timeapi.io/swagger/index.html

Jasno pokazane co potrzebujemy aby uderzyć pod dany endpoint.

https://www.baeldung.com/rest-template
Jeśli nie spodoba Ci się RestTemplate to możesz użyć innego klienta.

Dodatkowo czy umiesz bawić się Rest API mając dokumentację jak wyżej ale w inny sposób niż wklejanie linka do przeglądarki?
Przestudiuj i pobaw się swaggerem powyżej, a na przyszłość jakbyś miał API bez swaggera to polecam PostMana zanim przejdziesz do komunikacji z API z poziomu javy.

0

Przyznam szczerze że wstydzę się pokazać jak to robiłem. Jestem tylko zapaleńcem który uczy się sam na własną rękę bez wglądu w to co robię kogoś kto się na temacie zna.
Kilka lat temu napisałem apkę w Pythonie, którą teraz chciałbym napisać od nowa z nowymi pomysłami ale już w Javie. Niestety kod poległ wraz z laptopem na którym był tworzony. W każdym razie wtedy działało. I to czego potrzebuję na chwilę obecną to aktualna data ale pochodząca z internetu - nie ufam tej na kompie bo można ją zmienić ;)
Dlatego też zacząłem szukać jakiegokolwiek niepłatnego źródła daty. Stąd też owy post potwierdzający brak sukcesu poszukiwań.

Może znacie jakieś prostsze rozwiązanie, skąd zassać aktualną datę tak żeby móc ją zapisać do pliku?

0

LocalDate localDate = LocalDate.now(ZoneId.of("Europe/Warsaw"));
Ale to z kompurera..
Może płaczenie do jakiegoś servera NTP.

0
Piotr Mazek napisał(a):

Może znacie jakieś prostsze rozwiązanie, skąd zassać aktualną datę tak żeby móc ją zapisać do pliku?

Ale sposób z użyciem Rest API jest naprawdę prosty. Wywołujesz jednego GETa i masz dane które potrzebujesz.

Jak stoisz z angielskim? Zrozumiałeś cokolwiek z artykułu który wysłałem wyżej? Czytałeś cokolwiek o obcowaniu z REST API?

0

Nie mam problemów z angielskim. Zresztą większość wyszukiwań robię właśnie w tym języku 😉
Jestem właśnie w trakcie poznawania Rest API

0

Przyznam szczerze, że ciężko idzie mi nauka RESTa.
Ale że nie lubię się poddawać zacząłem szperać i wydłubałem coś z moich starych archiwów. Coś bardzo cennego - w sensie oczywiście tematu tego posta.
Znalazłem fragment apki napisanej w Pythonie, o której wspominałem wcześniej. Pierwsza bazowała na dacie z kompa, ale jak się okazało niebawem ową datę ktoś regularnie zmieniał. Więc trzeba było wykombinować coś niemożliwego do obejścia. Czyli data z sieci.

W pythonie wyglądało to dosyć prosto. Request GET. Poniższy kodzik jest mój więc może nie być doskonały. Ważne że był skuteczny 😉

import requests
onlineDate = requests.get("https://just-the-time.appspot.com").text[:10]+"\n"

Bazując na powyższym wyszukałem requesta GET w Javie. Ten kodzik mój nie jest oprócz returna, oraz println gdzie wrzuciłem tą stronkę.
Tu jest println, a docelowo będzie leciało do pliku tekstowego 🙂

public class Main {

   public static String getHTML(String urlToRead) throws Exception {
      StringBuilder result = new StringBuilder();
      URL url = new URL(urlToRead);
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
      try (BufferedReader reader = new BufferedReader(
                  new InputStreamReader(conn.getInputStream()))) {
          for (String line; (line = reader.readLine()) != null; ) {
              result.append(line);
          }
      }
      return result.toString().split(" ")[0]+"\n";
   }

   public static void main(String[] args) throws Exception
   {
     System.out.println("https://just-the-time.appspot.com");
   }
}

Mogę być z siebie dumny?
Sam sobie udzieliłem odpowiedzi na zadane pytanie 😎
No prawie, bo to nie API. Ale działa 🙂

0
Piotr Mazek napisał(a):

Przyznam szczerze, że ciężko idzie mi nauka RESTa.

Nie miałeś się uczyć pisać REST API samemu bo widać, że jest na to za wcześnie. Miałeś poczytać ogólnie co to jest REST API, z czym to się je, jakie mamy typy requestów i jak one wyglądają. Jak je wywołać w swaggerze / postmanie.

W pythonie wyglądało to dosyć prosto. Request GET. Poniższy kodzik jest mój więc może nie być doskonały. Ważne że był skuteczny 😉

A w Javie myślisz, że o wiele trudniej? Po to Ci podesłałem artykuł o RestTemplate, abyś użył gotowego klienta.

import requests
onlineDate = requests.get("https://just-the-time.appspot.com").text[:10]+"\n"

Bazując na powyższym wyszukałem requesta GET w Javie. Ten kodzik mój nie jest oprócz returna, oraz println gdzie wrzuciłem tą stronkę.
Tu jest println, a docelowo będzie leciało do pliku tekstowego 🙂

public class Main {

   public static String getHTML(String urlToRead) throws Exception {
      StringBuilder result = new StringBuilder();
      URL url = new URL(urlToRead);
      HttpURLConnection conn = (HttpURLConnection) url.openConnection();
      conn.setRequestMethod("GET");
      try (BufferedReader reader = new BufferedReader(
                  new InputStreamReader(conn.getInputStream()))) {
          for (String line; (line = reader.readLine()) != null; ) {
              result.append(line);
          }
      }
      return result.toString().split(" ")[0]+"\n";
   }

   public static void main(String[] args) throws Exception
   {
     System.out.println("https://just-the-time.appspot.com");
   }
}

To co tutaj zrobiłeś zostało już odkryte przez kogoś innego i wystarczyło wywołać klienta w 2-3 linijkach.
Dodatkowo zamiast bawić się w parsowanie stringa, przy większości klientów HTTP dodaje się klasę javową jako odpowiedź na nasz request, dzięki czemu mamy automatycznie mapowanie do obiektu javowego, z którego możemy wyciągnąć interesujące nas dane.

Mogę być z siebie dumny?
Sam sobie udzieliłem odpowiedzi na zadane pytanie 😎

Można być dumnym bo końcowy rezultat to to co chcieliśmy osiągnąć. Pytanie czy rozwiązanie napawa dumą? Obecnie może i tak, ale jak poczytasz więcej to zrobisz to prościej.
Zadanie dla Ciebie, zrób kolejną wersję, ale z użyciem klienta HTTP, chcoiażby z wspomnianym Rest Template. Jak nie ten, to poczytaj o wbudowanych klientach do nowszych wersji Javy.

0

Czemu np. na YT nie sprawdziłeś jak skonsumować API testowe? Jest mnóstwo prostych materiałów a część nawet po polsku np tu:

Nie twierdzę, że zrobiłeś źle ucząc się tego trochę na okrętę ale właśnie warto, żeby nie palić zbyt dużo czasu co może prowadzić do frustracji, wiedzieć jak się uczyć, z jakich materiałów korzystać, jak je wyszukiwać itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1