Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Pobieranie kursów walut - problem
lordwader
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.11.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
lDoran
post
Post #2





Grupa: Zarejestrowani
Postów: 172
Pomógł: 13
Dołączył: 15.11.2009

Ostrzeżenie: (0%)
-----


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ąć.
Go to the top of the page
+Quote Post
lordwader
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.11.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
sazian
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
lDoran
post
Post #5





Grupa: Zarejestrowani
Postów: 172
Pomógł: 13
Dołączył: 15.11.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
lordwader
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.11.2010

Ostrzeżenie: (0%)
-----


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ł?

Go to the top of the page
+Quote Post
--Piotr--
post
Post #7





Goście







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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:29