Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> kurs walut
Lonas
post
Post #1





Grupa: Zarejestrowani
Postów: 576
Pomógł: 14
Dołączył: 9.11.2005

Ostrzeżenie: (20%)
X----


Hej uzywalem dotychczas skryptu ktory pokazywal mi kurs walut z NBP - czy NBP cos zmienil ? teraz wyskakuje komunikat :


Warning: fopen(http://www.nbp.pl/kursy/) [function.fopen]: failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /home/users/jakarusa/public_html/CMS/test.php on line 29
Błšd przy łšczeniu

a skrypt wyglada tak :
  1. <?php
  2. /*********************************
  3.  * Kursy walut *
  4.  * Copyrigt Š by Jacek Kowalski *
  5.  *  *
  6.  * Wersja 1.0 dla Skryptoteka.pl *
  7.  *********************************/
  8. // Początek pobierania linku do kursu walut w formacie XML...
  9. $a = "0";
  10. $connect = fopen("http://www.nbp.pl/kursy/kursya.html", "r") or die("Błąd przy łączeniu");
  11. while (!feof ($connect)) {
  12.  $a++;
  13.  $buffer = fgets($connect, 4096) or die("Błąd przy odczycie");
  14.  if($a=="166") {
  15.  $link = $buffer;
  16.  }
  17. };
  18. fclose($connect) or die("Błąd przy zamykaniu połączenia");
  19. // Koniec pobierania linku do kursu walut w formacie XML
  20.  
  21. // Wycinanie linku
  22. $link1 = strstr($link, 'xml');
  23. $link2 = substr($link1, '0', '19');
  24. $link = "http://www.nbp.pl/kursy/".$link2;
  25. // Koniec. Link w zmiennej $link.
  26.  
  27. // Pobieranie arkusza XML
  28. $a = "0";
  29. $connect = fopen($link, "r") or die("Błąd przy łączeniu");
  30. while (!feof ($connect)) {
  31.  $a++;
  32.  $buffer = fgets($connect, 4096) or die("Błąd przy odczycie");
  33.  if($a=="4") {
  34.  $datak = $buffer;
  35.  }
  36.  elseif($a=="3") {
  37.  $numerk = $buffer;
  38.  }
  39.  elseif($a=="6") {
  40.  $waluta1 = $buffer;
  41.  }
  42.  elseif($a=="8") {
  43.  $symbol1 = $buffer;
  44.  }
  45.  elseif($a=="9") {
  46.  $kurs1 = $buffer;
  47.  }
  48.  elseif($a=="30") {
  49.  $waluta2 = $buffer;
  50.  }
  51.  elseif($a=="32") {
  52.  $symbol2 = $buffer;
  53.  }
  54.  elseif($a=="33") {
  55.  $kurs2 = $buffer;
  56.  }
  57.  elseif($a=="24") {
  58.  $waluta3 = $buffer;
  59.  }
  60.  elseif($a=="26") {
  61.  $symbol3 = $buffer;
  62.  }
  63.  elseif($a=="27") {
  64.  $kurs3 = $buffer;
  65.  }
  66.  elseif($a=="54") {
  67.  $waluta4 = $buffer;
  68.  }
  69.  elseif($a=="56") {
  70.  $symbol4 = $buffer;
  71.  }
  72.  elseif($a=="57") {
  73.  $kurs4 = $buffer;
  74.  }
  75. };
  76. fclose($connect) or die("Błąd przy zamykaniu połączenia");
  77. // Pobrano arkusz XML i wyniki do zmiennych.
  78. // Wyświetlanie...
  79. echo " <b><center><font SIZE="1" color="black" face="verdana">NBP z dnia <br>".$datak."</b></center></font><br> <font SIZE="1" color="black" face="verdana">".$waluta1."</FONT><br> <font SIZE="1" color="black" face="verdana"><b>(".$symbol1.")</b></FONT> <b> <font SIZE="1" color="black" face="verdana">".$kurs1."</b></FONT><br> <font SIZE="1" color="black" face="verdana">".$waluta2."</font> <br> <font SIZE="1" color="black" face="verdana"><B>(".$symbol2.")</B> </font><B> <font SIZE="1" color="black" face="verdana">".$kurs2."</font></B><br> <font SIZE="1" color="black" face="verdana">".$waluta3."</font> <br> <font SIZE="1" color="black" face="verdana"><B>(".$symbol3.")</font></B> <font SIZE="1" color="black" face="verdana"> <B>".$kurs3."</font></B><br> <font SIZE="1" color="black" face="verdana">".$waluta4."</font><br> <font SIZE="1" color="black" face="verdana"> <B>(".$symbol4.")</font></B> <font SIZE="1" color="black" face="verdana"> <B> <font SIZE="1" color="black" face="verdana">".$kurs4."</font></B><br>"
  80. ?>


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
cadavre
post
Post #2





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Wpisz sobie w pasku adresu przeglądarki:
http://www.nbp.pl/kursy/

Dowiesz się czy NBP coś zmienił...


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
Lonas
post
Post #3





Grupa: Zarejestrowani
Postów: 576
Pomógł: 14
Dołączył: 9.11.2005

Ostrzeżenie: (20%)
X----


eh.. to juz sprawdzalem w adresie nic sie nie zmienilo ..
pytam czy mogli cos zablowkowac.. bo link uzywany w skrypcie dziala

http://www.nbp.pl/kursy/kursya.html


--------------------
Go to the top of the page
+Quote Post
eyedropper
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 30.04.2006

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


a link http://www.nbp.pl/kursy/xml/a005z070108.xml ?
nie lepiej z xmla winksmiley.jpg ?

Ten post edytował eyedropper 8.01.2007, 19:33:05
Go to the top of the page
+Quote Post
tiraeth
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

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


@eyedropper: Jeżeli chcesz z XMLa przy użyciu simplexml_load_file, to działa to wolniej niż przez zwykłe file + preg_match smile.gif

  1. <?php
  2. $txtData = 'http://www.nbp.pl/kursy/kursya.html';
  3. if ( $txtParsed = @implode('', file($txtData)) )
  4. {
  5. if ( preg_match_all('#<tr valign="middle">(.*?)</tr>#is', $txtParsed, $r) )
  6. {
  7. $r = $r[1];
  8. foreach ( $r as $txtMoney )
  9. {
  10. if ( preg_match_all('#<td class="bg(1|2)">(.*?)</td>#is', $txtMoney, $s) )
  11. {
  12. $s = $s[2];
  13. $arrMoneys[] = array('name' => $s[0], 'code' => $s[1], 'exchange' => $s[2]);
  14. }
  15. }
  16.  
  17. print_r($arrMoneys); // Ta zmienna ma tablice z kursami walut
  18. }
  19. else
  20. {
  21. echo 'HTML structure doesn't match the regular expression.';
  22. }
  23. }
  24. else
  25. {
  26. echo 'Cannot load HTML file from <b>'.$txtData.'</b>. Please check your URL!';
  27. }
  28. ?>


Taki kod zajmuje mi (down: 1Mb/s) 0.34685s
Go to the top of the page
+Quote Post
Lonas
post
Post #6





Grupa: Zarejestrowani
Postów: 576
Pomógł: 14
Dołączył: 9.11.2005

Ostrzeżenie: (20%)
X----


Ale dlaczego ten skrypt wczesniej dzialal ? co sie zmienilo ?


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





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Zapytaj NBP. My tu ekspertami systemów NBP nie jesteśmy. tongue.gif


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
sf
post
Post #8





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Jeśli skrypt ciągle pobierałeś to na pewno Ci to zablokowali winksmiley.jpg Należało użyć jakiegoś cache, który przechowuje przez 24h plik.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
Kahir
post
Post #9





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

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


Witam,
w linijce 13 $buffer jest kasowany przy każdym przejściu przez pętlę, w związku z czym zmienna $link2 jest pustym ciągiem i skrypt próbuje pobrać zawartość katalogu do którego nie ma dostępu ("/kursy/").
Dodaj kropkę:
  1. <?php
  2. $buffer .= fgets($connect, 4096) or die("Błąd przy odczycie");
  3. ?>


Ten post edytował Kahir 13.01.2007, 18:38:10
Go to the top of the page
+Quote Post
cmike
post
Post #10





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 17.05.2004
Skąd: Kraków

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


  1. <?php
  2. $txtData = 'http://www.nbp.pl/kursy/kursya.html';
  3. if ( $txtParsed = @implode('', file($txtData)) )
  4. {
  5.  $link = $txtParsed;
  6. $link1 = strstr($link, 'xml');
  7. $link2 = substr($link1, '0', '19');
  8. $dt = substr($link2, '9', '6');
  9. $d = $dt[4].$dt[5];
  10. $m = $dt[2].$dt[3];
  11. $r = "20".$dt[0].$dt[1];
  12. $dat_wal = $r.'.'.$m.'.'.$d;
  13. $link = "http://www.nbp.pl/kursy/".$link2;
  14. }
  15.  
  16. $wersja = phpversion();
  17. if ($wersja[0]>4)
  18. {
  19. $xml = simplexml_load_file($link);
  20. foreach ($xml->pozycja as $wpis)
  21. {  
  22. echo "<li>".$wpis->nazwa_waluty."(".$wpis->kod_waluty.") ->kurs średni: ".$wpis->kurs_sredni."</li>";
  23. }
  24. }
  25. else
  26. {
  27. $xml_link = $link;
  28. $currentTag = "";
  29. $startpos = 0;
  30. $encoding = 0;
  31. $xml_items = array();
  32.  
  33. function startTag($parser, $name, $attrs)
  34. {
  35. global $currentTag, $startpos;
  36. $currentTag = $name;
  37. if ($currentTag=='POZYCJA') $startpos++;
  38. }
  39.  
  40. function endTag($parser, $name)
  41. {
  42.  global $currentTag;
  43.  $currentTag = "";
  44. }
  45.  
  46. function characterData($parser, $data)
  47. {
  48. global $currentTag, $startpos, $xml_items;
  49. if ($startpos > 0) {
  50.  switch ($currentTag) {
  51.  case 'NAZWA_WALUTY' : $xml_items[$startpos]['NAZWA_WALUTY'] .=$data; break;
  52.  case 'KOD_WALUTY': $xml_items[$startpos]['KOD_WALUTY'].=$data; break;
  53.  case 'KURS_SREDNI': $xml_items[$startpos]['KURS_SREDNI'].=$data; break;
  54.  }
  55.  
  56. } else {
  57.  
  58.  
  59. }
  60.  
  61. }
  62.  
  63. $xml_link = parse_url($xml_link);
  64.  
  65. $header = "GET ".$xml_link["path"].(isset($xml_link["query"]) ? "?".$xml_link["query"] : false)." HTTP/1.0rn";
  66. $header .= "Host: ".$xml_link['host']."rn";
  67. $header .= "Content-type: application/x-www-form-urlencodedrn";
  68. $header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; www.inteco.win.pl)rn";
  69. $header .= "Content-length: " . strlen($request) . "rnrn";
  70.  
  71. if ($xml_read = @fsockopen($xml_link['host'], ($xml_link['port']>0 ? $xml_link['port'] : 80) , $err_num, $err_msg, 10)) {
  72.  
  73.  fputs($xml_read, $header . $request);
  74.  
  75.  $xml_parser = xml_parser_create();
  76.  xml_set_element_handler($xml_parser, "startTag", "endTag");
  77.  xml_set_character_data_handler($xml_parser, "characterData");
  78.  
  79.  while ($data = fread($xml_read, 4096)) {
  80. if ((empty($encoding)) && (preg_match("#<?xml.+(|encoding="([w-]+)").*questionmark.gif>#i",$data,$enc))) {
  81. $encoding = preg_replace("#<?xml.+encoding="([w-]+)".*?>#s","1",$enc[0]);
  82. $data = preg_replace('#(.*?)(<?xml)#s','2',$data);
  83. }
  84.  
  85. if (!empty($encoding)) {
  86. if (!xml_parse($xml_parser, $data, feof($xml_read))) {
  87. die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
  88.  
  89. }
  90. }
  91.  }
  92.  
  93.  xml_parser_free($xml_parser);
  94. }
  95. echo '<table width="100%" border="0" cellspacing="1" cellpadding="0" align="center" class="tbl-border">';
  96. for ($i=1;$i<count($xml_items);$i++)
  97. {
  98. if($xml_items[$i]['KOD_WALUTY']=="USD" || $xml_items[$i]['KOD_WALUTY']=="EUR") {
  99. if($klasa=="tbl1") {$klasa="tbl2";} else {$klasa="tbl1";}
  100. echo '<tr>
  101. <td class="'.$klasa.'">'.$xml_items[$i]['NAZWA_WALUTY'].'</td><td class="'.$klasa.'" align="center">'.$xml_items[$i]['KOD_WALUTY'].'</td><td class="'.$klasa.'" align="center"><b>'.$xml_items[$i]['KURS_SREDNI']."</b></td>
  102. </tr>";
  103. }
  104. }
  105. echo '</table>';
  106. }



To przykładowy kod - mnie interesował tylko dolar i euro.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 12:30