Wyciągnięcie aktualnej daty z API

Wyciągnięcie aktualnej daty z API
Piotr Mazek
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Postów:6
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

K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1002
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.

edytowany 1x, ostatnio: kixe52
Piotr Mazek
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Postów:6
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?

BB
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 miesiące
  • Postów:66
0

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

edytowany 2x, ostatnio: bbzzyyczczeek
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1002
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?

Piotr Mazek
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Postów:6
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

K5
To wróć tutaj ze swoimi próbami jak Ci nie będzie wychodzić i wtedy pomożemy dalej ;)
Piotr Mazek
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Postów:6
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 😉

Kopiuj
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 🙂

Kopiuj
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 🙂

edytowany 2x, ostatnio: Piotr Mazek
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1002
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.

Kopiuj
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 🙂

Kopiuj
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.

Piotr Mazek
> czy rozwiązanie napawa dumą? Oczywiście mogłoby być lepiej, ale moim głównym wskaźnikiem zadowolenia jest działające rozwiązanie :)
K5
Ale nauczyłeś się czegokolwiek? Zrozumiałeś coś z odpowiedzi?
Piotr Mazek
Właściwie to tak. Zauważyłem że zakładając wątek całkowicie nie rozumiałem o co proszę. A teraz pomijając rozwiązanie i tak zastanawiam się nad poprawnym rozwiązaniem zadania z klientem http. I tylko dlatego żeby wiedzieć jak robić to poprawnie. Poza tym chciałbym nauczyć się Javy a odkąd pamiętam mam z tym problemy
K5
Nie zaczynaj poznawania Javy od bawienia się w HTTP. Zacznij od podstaw.
Piotr Mazek
Podstawy znam, a przynajmniej tak mi się wydaje. Zabawa zaczyna się tworząc coś konkretnego. Http wyszło przypadkiem, ale w tym projekcie mam zapis i odczyt z pliku z porównywaniem wpisów, może jakiś encoding/decoding żeby pliczek txt nie był zbyt czytelny, mouseListener bo to ma być apka z GUI, modyfikacja JFrame default close operation żeby oprócz zamknięcia robiło się coś jeszcze. I to będzie dopiero nauka :)
RequiredNickname
  • Rejestracja:prawie 5 lat
  • Ostatnio:27 minut
  • Postów:620
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.

Piotr Mazek
Nie zawsze wiem jak sformułować frazę w wyszukiwarce, i nie wiedzieć czemu omijam filmiki ma yt sugerujące odpowiedzi skupiając się na odpowiedziach tekstowych. To chyba takie dziwne zboczenie dla pasjonatów czytania ;) I często nie wiem z jakich materiałów korzystać dlatego spędzam sporo czasu z wyszukiwarkami, głównie google i duckduckgo
K5
Ale przecież dostałeś od nas wskazówki co masz robić. Zanim przyniosłeś swoje rozwiązanie to dostałeś wskazówki.
Piotr Mazek
Wiem wiem, oczekiwałem wędki a sam ją sobie wystrugałem. Zawsze jak zostawiam pytanie gdzieś na forum, to i tak szukam odpowiedzi na własną rękę

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.