Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie kursu EURO do pliku TXT
Forum PHP.pl > Forum > PHP
travi
Siemana z rana! Musze zrobić pobieranie kursu waluty € do pliku TXT. Następnie zawartość tego pliku (czyt. kurs waluty) chciałbym wczytać do mojego skryptu i podpiąć to wszystko pod CRON. Zawartość pliku TXT to będzie zmienna potrzeba do kalkulatora. Podpowiecie jak ogarnąć pobieranie kursu waluty?

Pozdrawiam!
Mega_88
Kursy możesz pobierać z NBP - https://www.nbp.pl/home.aspx?f=/kursy/instr...rsow_walut.html ;-)
travi
No wiem, juz znalazłem plik: http://api.nbp.pl/api/exchangerates/rates/A/EUR/ ale nie wiem jak wyciągnąć z niego sam kurs
travi
Mam coś takiego, ale echo nie wyświetla nic. Co robię źle?

  1.  
  2. <?php
  3. $zrodlo = file_get_contents('http://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json');
  4. $dane = json_decode($zrodlo,TRUE);
  5. $waluta = $dat["rates"][0]["mid"];
  6. ?>
  7.  
  8.  
  9. <html>
  10. <body>
  11. <h1><?php echo $waluta; ?></h1>
  12. </body>
  13. </html>
  14.  
viking
Wyświetliło by błąd gdybyś włączył ich obsługę. Skąd niby wziąłeś zmienną dat?
leonpro778
Cytat(travi @ 11.12.2018, 00:48:26 ) *
Mam coś takiego, ale echo nie wyświetla nic. Co robię źle?

  1.  
  2. <?php
  3. $zrodlo = file_get_contents('http://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json');
  4. $dane = json_decode($zrodlo,TRUE);
  5. $waluta = $dat["rates"][0]["mid"];
  6. ?>
  7.  
  8.  
  9. <html>
  10. <body>
  11. <h1><?php echo $waluta; ?></h1>
  12. </body>
  13. </html>
  14.  


Skąd niby w $waluta ma być $dat? Zmień to na $dane
travi
Przepraszam to błąd przy przekopiowywaniu kodu na forum. Mimo tego nadal kurs w H1 się nie wyświetla.
viking
U mnie działa. Włączyłeś raportowanie błędów?
travi
Nie, nie włączyłem. Zaraz sprawdzę jeszcze raz. Kurcze dziwne... wrzuciłem normalnie na serwer, wpisałem link do pliku i mam białą stronę. Już druga osoba mi mówi, że wszystko działa poprawnie, a u mnie nie biggrin.gif Może czegoś jeszcze potzrebuje na serwerze do tego aby dziać na JSON? To mój JSONOWY debiut smile.gif

Dobra mam coś takiego:

  1. Warning: file_get_contents(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /localhost/kurs.php on line 7
  2. Warning: file_get_contents(http://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json): failed to open stream: no suitable wrapper could be found in /localhost/kurs.php on line 7


Jesli dobrze rozumiem to chyba powinienem w php.ini zmienić url fopen na "1"

OK, wszystko działa FOPEN na 1 i Url include na 1 - poszło.
Kiedy ja się nauczę szukać problemów od najprostszych rzeczy? :/
Lord
Cytat(travi @ 11.12.2018, 22:24:33 ) *
Kiedy ja się nauczę szukać problemów od najprostszych rzeczy? :/

Pierwszy krok to włączyć raportowanie błędów smile.gif
travi
Cytat(Lord @ 12.12.2018, 14:55:39 ) *
Pierwszy krok to włączyć raportowanie błędów smile.gif


No, ostatnio cały dzień szukałem błędu w WP i okazało się, że się QUOTA skończyła. Pierwsza sugestia - zmiany JQUERY które wprowadzałem dzień wcześniej, ale jednak nie. Więc po drodze wpadło milion innych pomysłów. biggrin.gif Co się nasiedziałem to moje.

Siemka, brzuszki najedzone po świętach? Karp miał dużo ości w tym roku? tongue.gif

Odświeżam temat bo napotkałem pewien problem i zastanawiam się czym to jest spowodowane.
Mój finalny kod wygląda tak:

  1. ini_set('display_errors', 1);
  2.  
  3. // Serwer NBP - JSON
  4. $nbp = file_get_contents('http://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json');
  5. // Dane do dekodowania, wartość TRUE, na wyjściu tablica.
  6. $dane = json_decode($nbp,TRUE);
  7. // Wyciąganie danych z tablicy
  8. $kurs = $dane["rates"][0]["mid"];
  9. // ucięcie ostatnich miejsc po przecinku. Wyświetl tylko 4 pierwsze znaki
  10. $kursfinal = substr("$kurs", 0, -2);
  11.  
  12. // operacja na pliku TXT - zapisywanie zmiennej do bazy tekstowej - całośc podpięta pod CRON
  13. $fp = fopen("kurs.txt", "w");
  14. fputs($fp, $kursfinal);
  15. fclose($fp);
  16.  
  17. echo "$kursfinal"


Do tej pory skrypt wypluwał kurs w formacie np.: 4.28, a więc do 2 miejsca po przecinku. Dziś patrzę i wypluwa do pierwszego miejsca po przecinku. Od początku działania skryptu nie było takich sytuacji, teraz coś sie zmieniło. NBP nadal ma taki sam format w pliku JSON. Pomaga zmiana substr("$kurs", 0, -2); na substr("$kurs", 0, -1); ale nie rozumiem dlaczego... podpowiecie koledzy?
kapslokk
  1. // ucięcie ostatnich miejsc po przecinku. Wyświetl tylko 4 pierwsze znaki
  2. $kursfinal = substr("$kurs", 0, -2);


Twój komentarz kłamie - nie wyświetlasz pierwszych 4 znaków tylko ucinasz 2 ostatnie. Jeżeli w $kurs będziesz miał 4.286 to zwróci 4.2, jeżeli 4.2865 to 4.28.
Wczytaj sobie do zmiennej $kurs dane jako liczbę i użyj: http://php.net/manual/en/function.number-format.php
travi
Tak tak, własnie o to chodzi. Ucinam 2 ostatnie znaki. JSON z NBP wyświetla zawsze ciąg typu "4.2860" a więc 6 znaków (łącznie z kropką). Z tego wynika, że powinno zostać 4.28, a wyświetla 4.2 - może gdy wykonuje się CRON dodawany jest BOM do txt? Tak sobie pomyślałem. Tylko dziwne, że przez 3 tygodnie działało poprawnie i teraz beż żadnej ingerencji wyświetla jeden znak mniej tongue.gif
kapslokk
PHP Ci automatycznie konwertuje ta zmienna do double i obcina 0. Uzyj number_format i po sprawie. Pewnie przez ostatnie 3 tygodnie na koncu byla inna cyferka niz 0 i nie obcinalo tongue.gif.
travi
Masz rację przyjacielu. To będzie lepsze rozwiązanie, przy okazji ładnie mi to zaokrągli i nie będzie się trzeba martwić jeśli nieoczekiwanie NBP wydłuży swój ciąg w dżejsonie tongue.gif Dzięki za rade i udanej zabawy sylwestrowej!
Pyton_000
Nie wydłuży. Standardem jest przekazywanie kursów walut do 4 miejsc po przecinku więc to się akurat nie zmieni wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.