Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Pobieranie kursu EURO do pliku TXT

Napisany przez: travi 10.12.2018, 09:15:38

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!

Napisany przez: Mega_88 10.12.2018, 09:38:02

Kursy możesz pobierać z NBP - https://www.nbp.pl/home.aspx?f=/kursy/instrukcja_pobierania_kursow_walut.html ;-)

Napisany przez: travi 10.12.2018, 09:43:23

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

Napisany przez: viking 10.12.2018, 10:32:08

http://api.nbp.pl/api/exchangerates/rates/A/EUR/?format=json

http://php.net/manual/en/function.json-decode.php

Napisany przez: travi 11.12.2018, 00:48:26

Mam coś takiego, ale echo nie wyświetla nic. Co robię źle?

  1.  
  2. <?php
  3. $zrodlo = http://www.php.net/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 http://www.php.net/echo $waluta; ?></h1>
  12. </body>
  13. </html>
  14.  

Napisany przez: viking 11.12.2018, 07:00:46

Wyświetliło by błąd gdybyś włączył ich obsługę. Skąd niby wziąłeś zmienną dat?

Napisany przez: leonpro778 11.12.2018, 08:48:03

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 = http://www.php.net/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 http://www.php.net/echo $waluta; ?></h1>
  12. </body>
  13. </html>
  14.  


Skąd niby w $waluta ma być $dat? Zmień to na $dane

Napisany przez: travi 11.12.2018, 19:51:20

Przepraszam to błąd przy przekopiowywaniu kodu na forum. Mimo tego nadal kurs w H1 się nie wyświetla.

Napisany przez: viking 11.12.2018, 20:04:39

U mnie działa. Włączyłeś raportowanie błędów?

Napisany przez: travi 11.12.2018, 20:24:33

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: http://www.php.net/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: http://www.php.net/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? :/

Napisany przez: Lord 12.12.2018, 14:55:39

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

Napisany przez: travi 27.12.2018, 12:43:20

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

Napisany przez: kapslokk 27.12.2018, 12:54:28

  1. // ucięcie ostatnich miejsc po przecinku. Wyświetl tylko 4 pierwsze znaki
  2. $kursfinal = http://www.php.net/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

Napisany przez: travi 27.12.2018, 12:59:02

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

Napisany przez: kapslokk 27.12.2018, 13:01:51

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.

Napisany przez: travi 27.12.2018, 13:10:26

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!

Napisany przez: Pyton_000 27.12.2018, 16:10:27

Nie wydłuży. Standardem jest przekazywanie kursów walut do 4 miejsc po przecinku więc to się akurat nie zmieni wink.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)