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 7 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 miesiąc
  • 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 7 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 7 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:2 minuty
  • Postów:618
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ę
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)