Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][XML]Pobranie danych z pliku XML
Forum PHP.pl > Forum > Przedszkole
tomazzi
Muszę napisać skrypt, który ma pobierać ze stron http://www.nbp.pl/Kursy/xml/dir.txt, http://www.nbp.pl/Kursy/xml/a103z110530.xml średni kurs wybranej waluty z wybranego dnia. Mógby mi ktoś nakreślić schemat działania, jakich funkcji użyć? XML jest dla mnie nowością.
skowron-line
simplexml
dom
+
google
lub poszukaj na forum bo była do tego gotowa klasa.

rafalskula
Masz gotowca smile.gif

  1. <?php
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, 'http://nbp.pl/kursy/xml/LastA.xml');
  4. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  5. $dane = curl_exec($curl);
  6. curl_close($curl);
  7.  
  8. $tabela_kursow = new SimpleXMLElement($dane);
  9. // wybranie daty publikacji tabeli w NBP
  10. $data = $tabela_kursow->data_publikacji;
  11. echo $data;
  12. echo "<br/>\n";
  13.  
  14. //wybranie poszczególnych walut
  15. $czk = $tabela_kursow->pozycja[13];
  16. echo" PLN 1,00 = " .$czk->kod_waluty;
  17. echo " ".$czk->kurs_sredni;
  18. echo "<br/>\n\n\n";
  19.  
  20. ?>


Tutaj masz korony , ale możesz dać też inne waluty.

Pozdrawiam
tomazzi
Na razie mam takie coś:

Kod
<?php

class Waluta{
    
    var $name;
    var $date;
    
    public function __construct($name, $date) {
        $this->name = $name;
        $this->date = $date;
    }
    
    function ZwrocKurs() {
        $kursy = simplexml_load_file("http://www.nbp.pl/Kursy/xml/a103z110530.xml");
      
        foreach ($kursy->pozycja as $key) {
            $kurs = "";
            if ($key->kod_waluty == $this->name){
                $kurs = $key->kurs_sredni;
                echo "Sredni kurs waluty " . $this->name . " z dnia " . $this->date . " to " . $kurs;
            }
         }
    }
    
}

$kurs = new Waluta("GBP","2012-10-20");
$kurs->ZwrocKurs();

?>


Teraz trzebaby było skleić link do pliku XML o odpowiedniej dacie. Teraz link jest ustawiony na sztywno. Nie mam pojęcia jak się za to zabrać. Jakieś sugestie?
CuteOne
typ tabeli + numer tabeli + z + rok(dwie cyfry) + miesiac(dwie cyfry) + dzien(dwie cyfry)

np. a001z120102


Mam nadzieję, że wiesz jak przekazać datę do metody wink.gif

tomazzi
Nie wiem czy wiem tongue.gif wrzucić ją jako parametr?

Ok dzięki. Ja bym to zrobiłem w ten sposób:
1. Pobrać plik txt.
2. Zrobić z niego tablice funckja explode()
3. dopasować dany element za pomocą pearl
4. dokleić go do linku

Dobrze myśle czy są jakieś lepsze sposoby?

Mam problem gdy wywołuje funkcje
Kod
$filename = "http://www.nbp.pl/Kursy/xml/dir.txt ";
$fd = fopen($filename, "r");
$filestring = fread($fd, filesize($filename));


wywala błąd filesize(): stat failed for http://www.nbp.pl/Kursy/xml/dir.txt
Gdy zapisze plik na dysku wszytsko jest ok. Druga sprawa jak rozbić plik ten plik na tablice aby kod każdgo dokumentu XML był wartością? Explode() nie daje rady bo wymaga parametru który rozdziela kody, a w pliku wszytskie kody są jednym ciągiem.

Z tablicą już się udało nie wiem tylko co zrobić, aby móc skorzystać z funkcji fread() chyba, że jest jeszcze inny sposób? Ma ktoś może jeszcze jakiś pomysł?
CuteOne
file_get_contents();
tomazzi
Skryp ma pobierać średni kurs wybranej waluty ze strony NBP, po pobraniu danych skrypt korzysta z własnych danych. Ostateczna wersja (może komuś się przyda):
  1. <?php
  2.  
  3. class Waluta{
  4.  
  5. function ZwrocKurs($name, $date) {
  6. //formatowanie daty na potrzeby wyszukania ciągu w pliku txt oraz odpowiedniego pliku na stronie NBP
  7. $fdate = substr($date, 2, 2) . substr($date, 5, 2) . substr($date,8 ,2);
  8. //jeśli plik cache.txt i jest w nim zapisany kurs o wymaganym kodzie i dacie wyświetlamy go
  9. if(file_exists("cache.txt") && preg_match("/$fdate\:\s+$name\:\s+\d,\d\d\d\d/", file_get_contents("cache.txt"), $matches)){
  10.  
  11. echo "Sredni kurs waluty (pobrany z pliku cache.txt) " . $name . " z dnia " . $date . " to " . substr($matches[0], 13,6);
  12.  
  13. //jeśli plik nie istnieje, bądź nie znaleziono wymaganego kursu pobieramy odpowiedni plik ze strony NBP
  14. }else{
  15. $link = "";
  16. //pobranie pliku z kodami do plików XML
  17. $file = file_get_contents("http://www.nbp.pl/Kursy/xml/dir.txt") or die("System nie mógł pobrać pliku");
  18. //wyszukanie wymaganego kodu
  19. $test = preg_match("/a\d\d\d.$fdate/", $file, $machtable);
  20.  
  21. if(!$test){
  22. die("Brak pliku o podanej z wybraną datą. Najprawdopodobniej wybrałeś dzień w którym nie publikowano kursów walut");
  23. }else{
  24. $link .= $machtable[0];
  25. }
  26. //parsowanie wymaganego pliku XML
  27. $courses = simplexml_load_file("http://www.nbp.pl/Kursy/xml/$link.xml");
  28.  
  29. foreach ($courses->pozycja as $key) {
  30. if ($key->kod_waluty == $name){
  31. $course = $key->kurs_sredni;
  32. echo "Sredni kurs waluty (pobrany ze strony NBP) " . $name . " z dnia " . $date . " to " . $course;
  33. //tworzenie bądź dopisanie do istniejącego pliku ciąg z datą, kodem oraz kursem waluty
  34. $fp = fopen("cache.txt", "a+");
  35. $fout = fwrite($fp, "$fdate" . ":" . " $key->kod_waluty" . ":" . " $key->kurs_sredni\r");
  36. fclose($fp);
  37. }
  38. }
  39. }
  40.  
  41. }
  42.  
  43. }
  44.  
  45. $kurs = new Waluta;
  46. $kurs->ZwrocKurs("GBP", "2012-10-15");
  47.  
  48.  
  49. ?>


Proszę o komentarze co można efektywniej zrobić.
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-2025 Invision Power Services, Inc.