Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pobieranie kursów walut - problem
Forum PHP.pl > Forum > Przedszkole
lordwader
Witam

O to kod (zaczerpnięty z jakiejś strony - początkowo nie działał bo wywalało błędy.. pozmieniałem trochę.. uruchamia się lecz nie wyświetla walut)

CODE
<?php


// plik z kursami walut w wersji HTML
$nbpHtmlFile = "http://nbp.pl/kursy/kursyc.html";

// pobieramy aktualny kurs walut
function getFromNbp()
{
$this->nbpContent = strip_tags ($this->nbpHtmlFile );
preg_match_all("/(.*)*/", $this->nbpContent, $matches_t);

$offset = 6;
for($i = 11; $i <= 27; $i++)
{
$a = $i . $offset;
$date = date('Y-m-d');
$name = preg_replace('/[^A-Z]/', '', $matches_t[0][$a] );

$this->kurs[$date][$name]['desc'] = $matches_t[0][$a];
$this->kurs[$date][$name]['purchase'] = str_replace(',', '.', $matches_t[0][$a+2]);
$this->kurs[$date][$name]['sale'] = str_replace(',', '.', $matches_t[0][$a+4]);

$offset+=2;
if($offset == 10)
{
$i++;
$offset = 0;
}
}
return $this->kurs;
}




$kursOnline = getFromNbp();

echo '<pre>' . print_r($kursOnline, true) . '</pre>';

?>


Po uruchomieniu na webservie wyświetla mi w przeglądarce takie coś:

Array
(
[2010-11-18] => Array
(
[] => Array
(
[descaaa] =>
[purchase] =>
[sale] =>
)

)

)


Jak widać coś działa.. lecz nic nie wyświetla (tylko datę)

Czy ktoś mógłby rzucić okiem i zobaczyć co muszę poprawić.

dzięki smile.gif
lDoran
Zainteresuj się curl + wyrażenia regularne + preg_match_all(). Jak znowu będziesz chciał napisać o swoim problemie dot. wyrażeń regularnych daj kod zawierający informację co chcesz wyciągnąć.
lordwader
No zainteresowałem się trochę CURLEM.

Doszedłem do tego:

CODE
<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://nbp.pl/kursy/kursyc.html");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$kursy = curl_exec($curl);
curl_close($curl);

?>



A o to wycinek źródła ściągniętej strony:


CODE
<p>Bieżące kursy kupna i sprzedaży walut obcych za złote określonych w § 5 Uchwały Nr 51/2002 Zarządu Narodowego Banku Polskiego z dnia 23 września 2002 r. w sprawie sposobu wyliczania i ogłaszania bieżących kursów walut obcych (Dz. Urz. NBP Nr 14, poz. 39 i Nr 20, poz. 51, z 2004 r. Nr 2, poz. 3 oraz z 2007 r. Nr 1, poz. 2 i Nr 18, poz. 35):</p>
<p class="nag">Tabela kursów <b>224/C/NBP/2010</b> z dnia <b>2010-11-17</b> obowiązująca od dnia <b>2010-11-18</b></p>

<p>
<table cellpadding="3" cellspacing="1" bgcolor="#2b4c3f" width="375" border="0">
<col width="130" align="left">
<col width="80" align="right">
<col width="80" align="right">
<col width="80" align="right">
<tr valign="middle">
<th rowspan="2" class="lgby"><b>Nazwa waluty</b></th>
<th rowspan="2" class="lgby"><b>Kod waluty</b></th>
<th colspan="2" class="lgby"><b>Kurs:</b></th>
</tr>
<tr valign="middle">
<td align="right" class="lgby"><b>kupna</b></td>
<td align="right" class="lgby"><b>sprzedaży</b></td>
</tr>
<tr valign="middle">
<td class="bg1 left">dolar amerykański</td>
<td class="bg1 right">1 USD</td>
<td class="bg1 right">2,8931</td>
<td class="bg1 right">2,9515</td>
</tr>


I teraz jakim wyrażeniem regularnym mam wyciągnąć stąd kurs np. dolara?


Generalnie chodzi o to, że mam zamiar wyciągnąć datę, 4 waluty (euro,usd,gbp,chf) i zapisać je raz dziennie do bazy.
sazian
tak masz z tego wyciągnąć kursy walut
zauważ że wszystkie ważne informacje są zapisywane tak <td class="bg1 right">X</td>
więc wystarczy wyciągnąć ten X i masz wszystkie potrzebne informacje

w wyniku tej operacji powstanie tablica w której będzie
"1 USD","2,8931","2,9515","1 AUD","2,8370","2,8944"
gdzie kolejne wartości to
nazwa waluty, kurs kupna, kurs sprzedaży
lDoran
http://pl.wikibooks.org/wiki/PHP/Podstawy_...%84_regularnych
http://php.net/manual/en/function.preg-match-all.php

Jak już coś namodzisz i dalej nie będzie działać to daj kod.
lordwader
Mam plan taki.

Znaleźć link do xml'a.
Ponieważ codziennie się zmienia należy i tak ściągnać kursy w html'u. Przeszukać i wygenerować link do xml'a.

CODE
<?php

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://nbp.pl/kursy/kursyc.html");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$kursy_html = curl_exec($curl);
curl_close($curl);


$szukajxml = 'wzorzec';
preg_match_all($szukajxml,$kursy_html,$zwrot_xml);


?>


wzorzec muszę jakoś pod to zrobić:

CODE
<p class="file print_hidden left"><a href="/kursy/xml/c224z101118.xml" target="_blank">powyższa tabela w formacie .xml</a></p>


Muszę to wyciąć "/kursy/xml/c224z101118.xml" i chyba podstawić pod jakąś zmienną? Następnie tą za pomocą zmiennej otrzymać gotowy link do xml'a czyli dostawić przed nią http://nbp.pl

Potem cURL'em tego xml'a i parser daty oraz odpowiednich walut.

Ale nie wiem czy dziś już będę miał czas aby ogarnąć te wzorce. Jak do czegoś dojdę to dam znać.

Myślicie, że to dobry pomysł?

-Piotr-
Stary wątek, ale trafiłem na niego szukając rozwiązania tego samego problemu, a rozwiązanie znalazłem ostatecznie tutaj: http://www.amo-group.pl/blog/?p=95

A tutaj wersja kodu z powyższej strony używająca CURL:

  1. <?php
  2.  
  3. /*
  4. ****************************************************************
  5. <strong>Skrypt kursów walut</strong>, automatycznie pobierajacy wartosci
  6. z serwera NBP.
  7.  
  8. Autor:
  9. Marcin Olechnowicz
  10. www.amo-group.pl
  11.  
  12. Do uzytku komercyjnego i prywatnego.
  13. Chcesz uzywac? Bardzo prosze, modyfukij dowolnie.
  14. Jedyne o co prosze to daj znac, ze uzyles na biuro@amo-group.pl
  15. *****************************************************************
  16. wymagana biblioteka cURL
  17. */
  18.  
  19. //pobiranie danych z serwera
  20. $curl = curl_init();
  21. curl_setopt($curl, CURLOPT_URL, 'http://nbp.pl/kursy/xml/LastA.xml');
  22. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  23. $dane = curl_exec($curl);
  24. curl_close($curl);
  25.  
  26. $tabela_kursow = new SimpleXMLElement($dane);
  27. // wybranie daty publikacji tabeli w NBP
  28. $data = $tabela_kursow->data_publikacji;
  29. echo $data;
  30. echo "<br/>\n";
  31. echo "<br/>\n";
  32. //wybranie poszczególnych walut
  33. $usd = $tabela_kursow->pozycja[1];
  34. echo $usd->kod_waluty;
  35. echo " - ".$usd->kurs_sredni;
  36. echo "<br/>\n";
  37. echo "<br/>\n";
  38.  
  39. $eur = $tabela_kursow->pozycja[7];
  40. echo $eur->kod_waluty;
  41. echo " - ".$eur->kurs_sredni;
  42. echo "<br/>\n";
  43. echo "<br/>\n";
  44.  
  45. $gbp = $tabela_kursow->pozycja[10];
  46. echo $gbp->kod_waluty;
  47. echo " - ".$gbp->kurs_sredni;
  48. echo "<br/>\n";
  49. echo "<br/>\n";
  50.  
  51. //wyswietlenie wszystkich walut
  52.  
  53. foreach($tabela_kursow->pozycja as $pozycja) {
  54.  
  55. echo $pozycja->kod_waluty;
  56. echo " - ".$pozycja->kurs_sredni;
  57. echo "<br/>\n";
  58. };
  59.  
  60. ?>
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.