Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pobieranie bieżących kursów walut oraz archiwum z nbp przez php
Forum PHP.pl > Forum > Przedszkole
poli25
Witam mam taki pomysł żeby pobierać kursy walut ze strony www.nbp.pl i kopiować je do bazy danych. Przy czym nie chciałbym się ograniczyć tylko do kursu z dnia dzisiejszego ale żeby pobierało mi wszystkie waluty z kursami, jeśli zapomniałem w którymś dniu tego zrobić. W bazie mam takie kolumny

kod_waluty, kurs, nr_tabeli, dzien.

Jak wyświetlić dane ze strony to wiem bo jest masa na ten temat w necie ale jak zrobić pobieranie wstecz to tego już nie ma. Poza tym nie wiem jak zrobić aby oprócz walut i kursów pobierało także tabele kursów oraz dzień kursu. Czy ktoś pomoże ?
motyl-pl
Pobierzesz za pomocą curla potem preg_match.
Jeżeli nie ma archiwum kursów to tego nie zrobisz, chyba że z nbp się dogadasz smile.gif
poli25
Witam wszystkich. Jestem bardzo zczęśliwy gdyż dziś udało mi się to zrobić dzięki podpowiedzi jednego człowieka, który zasugerował użycie kanałów RSS przez NBP.
Oto skrypt który realizuje Pobieranie bieżących kursów walut oraz archiwum z nbp przez php do bazy danych Postgresql

  1. <?php
  2.  
  3. /*
  4. Author :poli25
  5. date :22.03.2012
  6. Pobieranie kursow z kanalu rss udostepnianej przez nbp i ladowanie do bazy PostgreSql
  7. Skrypt pobiera kursy z ostatnich 25 dni czyli tyle na ile pozwala ten kanal
  8.  
  9. Najpierw w Bazie danych (w moim przypadku PostgreSql) trzeba utworzyć te oto tabele:
  10.  
  11. waluta_naglowek
  12. kolumny:
  13. dzien_waluty (date)
  14. numer_waluty character(30)
  15.  
  16. waluta_pozycje
  17. kolumny:
  18. dzien_publikacji (date)
  19. kod_waluty character(5)
  20. kurs_waluty character(6)
  21.  
  22. p.s.
  23. dla zainteresowanych:
  24.  
  25. zmiana formatu kursu waluty z varchar na numeric odbywa się w postgresql za pomocą polecenia
  26. select round(cast(replace(kurs_waluty,',','.')as numeric),4)
  27.  
  28. */
  29.  
  30. $connect=pg_connect('host=localhost port=5432 user=postgres password=postgres dbname=waluty')
  31. or die ('Problem z połączeniem.');
  32.  
  33.  
  34. function stworz_link_xml($string)
  35. {
  36.  
  37. $year=date('Y');
  38. $end=substr($string,45,6);
  39. $podciag_srodek=substr($string,0,24);
  40. $link_z_xml=$podciag_srodek."xml2/".$year."/a/".$end.".xml";
  41.  
  42. return $link_z_xml;
  43. }
  44.  
  45. echo "<table>";
  46.  
  47. $kursy=simplexml_load_file('http://rss.nbp.pl/kursy/TabelaA.xml');
  48. foreach($kursy->channel->item as $kanal)
  49. {
  50. $kurs=$kanal->link;
  51. $link=stworz_link_xml("$kurs");
  52. $kursy_dwa=simplexml_load_file($link);
  53. $nr_tabeli=$kursy_dwa->numer_tabeli;
  54. $data_publikacji=$kursy_dwa->data_publikacji;
  55.  
  56. $sprawdz_date_publikacji=pg_query("select * from waluta_naglowek where dzien_waluty='$data_publikacji'");
  57. $ilosc_naglowek=pg_num_rows($sprawdz_date_publikacji);
  58. if ($ilosc_naglowek==0)
  59. {
  60. $insert_naglowek=pg_query("insert into waluta_naglowek values('$data_publikacji','$nr_tabeli')");
  61.  
  62. foreach($kursy_dwa->pozycja as $kanal2)
  63. {
  64. //echo $nazwa_waluty=$kanal2->nazwa_waluty;
  65. $kod_waluty=$kanal2->kod_waluty;
  66. $kurs_sredni=$kanal2->kurs_sredni;
  67. //echo"<tr><td>$kod_waluty</td><td>$kurs_waluty</td><td>$nazwa_waluty</td>";
  68. $insert_pozycje=pg_query("insert into waluta_pozycje values('$data_publikacji','$kod_waluty','$kurs_sredni');");
  69. }
  70. $ile_dopisano=pg_affected_rows($insert_naglowek);
  71. echo "Dopisano kursy z dnia : <b>$data_publikacji</b> o numerze tabeli <b>$nr_tabeli</b><br>";
  72.  
  73. }
  74.  
  75. else
  76. {
  77. echo "Masz już wpisane kursy z dnia <b>$data_publikacji</b> <br>";
  78.  
  79. }
  80. }
  81. echo "</table>";
  82. ?>



P.S. temat można zamknąć 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-2025 Invision Power Services, Inc.