Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kursy walut
Forum PHP.pl > Forum > Gotowe rozwiązania
szoszon3
Witam mam taki skrypcik do kursu walut[php:1:1f25bb204b] <?php

DEFINE('_N_COLOR','#004080'); //kolor czcionki nagłówka
DEFINE('_W_COLOR','#000000'); //kolor czcionki wyników walut
$f = @fopen("http://www.nbp.pl/Kursy/KursyA.html", "r");
if ($f) {
while(!feof($f)) $strona.= fread($f,1024); fclose($f);
$strona = preg_replace("/r/", " ", $strona);
$strona = preg_replace("/n/", " ", $strona);

preg_match("/z dnia <b>(.*?)</b>/", $strona, $zdnia);
echo "<font color="._N_COLOR.">Kursy walut NBP z dnia ". $zdnia[1]."</font>";
preg_match_all ("/<tr valign="middle">.*?</tr>/", $strona, $sa);

for ($i=0; $i<count($sa[0]); $i++) {
preg_match("/new">(.*?)</td/", $sa[0][$i], $waluta);
preg_match("/lne">(.*?)</td/", $sa[0][$i], $kurs);
if (eregi("EUR",$waluta[1])) echo "<br><br><B><img src="/img_waluty/ue.gif">&nbsp;<font color="._W_COLOR.">1 EUR - ".$kurs[1]."</font>";
if (eregi("USD",$waluta[1])) echo "<br><img src="/img_waluty/usa.gif">&nbsp;<font color="._W_COLOR.">1 USD - ".$kurs[1]."</font>";
if (eregi("GBP",$waluta[1])) echo "<br><img src="/img_waluty/gb.gif">&nbsp;<font color="._W_COLOR.">1 GBP - ".$kurs[1]."</font></b>";

}
}
?>[/php:1:1f25bb204b]
niestety od kilku dni cos sie zmienilo na stronce nbp i nie chce juz pobierac info o walutach. Co i jak zmienic zeby bylo okej ?
Majdan
Jakbyœ mógł, to umieœć kod między
  1. <?php
  2. , a
  3. ?>
. Każdemu zrobisz przyjemnoœć. :wink:
tmk
No na nowej stronce nie ma juz class="new", ani "lne", a Ty się do nich odwołujesz. Najprosciej bedzie chyba skorzystac z xml'a umieszczonego na stronce, i wyszukiwanie odpowiendnich danych miedze znacznikami tzn:
[php:1:5cf6cb2e67]<?php
preg_match("/<kod_waluty>(.*?)</kod_waluty>/", $znalezione[0][$i], $waluta);
preg_match("/<kurs_sredni>(.*?)</kurs_sredni>/", $znalezione[0][$i], $kurs);
?>[/php:1:5cf6cb2e67]
matid
Ja pobieranie walut rozwiązuję w ten sposób:
[php:1:25e0aa8f26]
<?
$new = 'http://www.nbp.pl/Kursy/xml/a056z040319.xml';
$filename = 'waluty.xml';
$obj->tree = '$obj->xml';
$obj->xml = '';

function startElement($parser, $name, $attrs) {
global $obj;

// If var already defined, make array
eval('$test=isset('.$obj->tree.'->'.$name.');');
if ($test) {
eval('$tmp='.$obj->tree.'->'.$name.';');
eval('$arr=is_array('.$obj->tree.'->'.$name.');');
if (!$arr) {
eval('unset('.$obj->tree.'->'.$name.');');
eval($obj->tree.'->'.$name.'[0]=$tmp;');
$cnt = 1;
}
else {
eval('$cnt=count('.$obj->tree.'->'.$name.');');
}

$obj->tree .= '->'.$name."[$cnt]";
}
else {
$obj->tree .= '->'.$name;
}
if (count($attrs)) {
eval($obj->tree.'->attr=$attrs;');
}
}

function endElement($parser, $name) {
global $obj;
// Strip off last ->
for($a=strlen($obj->tree);$a>0;$a--) {
if (substr($obj->tree, $a, 2) == '->') {
$obj->tree = substr($obj->tree, 0, $a);
break;
}
}
}

function characterData($parser, $data) {
global $obj;

eval($obj->tree.'->data=''.$data.'';');
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($filename, "r"))) {
die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
if($obj->xml->TABELA_KURSOW->DATA_PUBLIKACJI->data!=date("Y-m-d")){
$filename = $new;
$obj->tree = '$obj->xml';
$obj->xml = '';
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($filename, "r"))) {
die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);

}
$arr = $obj->xml->TABELA_KURSOW->POZYCJA[6]; // aby pobrać inną walute zmień wartość klucza dla tablicy POZYCJA
echo $arr->PRZELICZNIK->data . " ¥ = " . $arr->KURS_SREDNI->data . " zł";
?>
[/php:1:25e0aa8f26]
Przykład na Jenach japońskich, ale przerobić to tylko kwestia zmiany jednej linijki
szoszon3
witam ! cos jest nie tak lub cos zle robie bo wychodzi mi blad

Nie można wyświetlić strony XML
Nie można przeglądać wejścia XML przy użyciu arkusza stylów . Popraw błąd, a następnie kliknij przycisk Odśwież lub spróbuj ponownie później.


--------------------------------------------------------------------------------

Spacja nie jest dozwolona w tej lokalizacji. Błąd podczas przetwarzania zasobu 'http://www.e-tarnow.pl/waluty.xml'. Wiersz 1, Pozycja 3

[/url]
Indianin
masz pustą linie na początku kodu . Musisz mieć plik waluty.xml . U mnie działa bez zarzutu.
szoszon3
[quote]masz pustą linie na początku kodu . Musisz mieć plik waluty.xml . U mnie działa bez zarzutu.[/quote]


hym [php:1:0afda29cb2]<?php
$new = 'http://www.nbp.pl/Kursy/xml/a056z040319.xml';
$filename = 'waluty.xml';
$obj->tree = '$obj->xml';
$obj->xml = ''; <--- o to chodzi ?
?>[/php:1:0afda29cb2]

co mam dac do pliku waluty.xml?questionmark.gif[/quote]
matid
Kod z tego co wiem jest dobry, bo go sprawdzałem.
Wystarczy utworzyć pusty plik waluty.xml
miedzna
[php:1:2b342d1add]<?php
$new = 'http://www.nbp.pl/Kursy/xml/a056z040319.xml';
$filename = 'waluty.xml';
$obj->tree = '$obj->xml';
$obj->xml = 'waluty.xml';

function startElement($parser, $name, $attrs) {
global $obj;

// If var already defined, make array
eval('$test=isset('.$obj->tree.'->'.$name.');');
if ($test) {
eval('$tmp='.$obj->tree.'->'.$name.';');
eval('$arr=is_array('.$obj->tree.'->'.$name.');');
if (!$arr) {
eval('unset('.$obj->tree.'->'.$name.');');
eval($obj->tree.'->'.$name.'[0]=$tmp;');
$cnt = 1;
}
else {
eval('$cnt=count('.$obj->tree.'->'.$name.');');
}

$obj->tree .= '->'.$name."[$cnt]";
}
else {
$obj->tree .= '->'.$name;
}
if (count($attrs)) {
eval($obj->tree.'->attr=$attrs;');
}
}

function endElement($parser, $name) {
global $obj;
// Strip off last ->
for($a=strlen($obj->tree);$a>0;$a--) {
if (substr($obj->tree, $a, 2) == '->') {
$obj->tree = substr($obj->tree, 0, $a);
break;
}
}
}

function characterData($parser, $data) {
global $obj;

eval($obj->tree.'->data=''.$data.'';');
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($filename, "r"))) {
die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
if($obj->xml->TABELA_KURSOW->DATA_PUBLIKACJI->data!=date("Y-m-d")){
$filename = $new;
$obj->tree = '$obj->xml';
$obj->xml = '';
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($filename, "r"))) {
die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);

}
$arr = $obj->xml->TABELA_KURSOW->POZYCJA[6]; // aby pobrać inną walute zmień wartość klucza dla tablicy POZYCJA
echo $arr->PRZELICZNIK->data . " ¥ = " . $arr->KURS_SREDNI->data . " zł";
?>[/php:1:2b342d1add]

Ale nadal wywala mi :
Warning: fopen(): php_network_getaddresses: gethostbyname failed in c:program filesapache groupapachehtdocsplikitabela.php on line 73

Warning: fopen(http://www.nbp.pl/Kursy/xml/a056z040319.xml): failed to open stream: No error in c:program filesapache groupapachehtdocsplikitabela.php on line 73
could not open XML input

Plik waluty.xml utworzylem, ale nic...
Indianin
[php:1:be4e153a6f]<?php
//$obj->xml = 'waluty.xml'; // sad.gif a po co ?
$obj->xml = ''; // ;-) wystarczy
?>[/php:1:be4e153a6f]
miedzna
Cytat
[php:1:4b289fa53f]<?php
//$obj->xml = 'waluty.xml'; // sad.gif a po co ?
$obj->xml = ''; // ;-) wystarczy
?>[/php:1:4b289fa53f]


I tak wywala ten sam blad :

Warning: fopen(): php_network_getaddresses: gethostbyname failed in c:program filesapache groupapachehtdocsplikitabela.php on line 73

Warning: fopen(http://www.nbp.pl/Kursy/xml/a056z040319.xml): failed to open stream: No error in c:program filesapache groupapachehtdocsplikitabela.php on line 73
could not open XML input
Indianin
A masz plik "waluty.xml" ?
miedzna
Cytat
A masz plik "waluty.xml" ?


Mam i nic sad.gif
Bakus
Ja z kolei mam inny problem...
Cytat
XML error: no element found at line 2
Indianin
Ja miałem tak samo gdy w pliku waluty.xml bylo kilka pustych linii . Plik musi mieć 0 bitów .
matid
Plik musi być pusty bo inaczej skrypt interpretuje go jako cache. Co do waszych innych problemów: Być może na serwerze macie zablokowaną funkcję fopen dla plików zewnętrzych. Można to ew. przerobić na file();
miedzna
Cytat
Być może na serwerze macie zablokowaną funkcję fopen dla plików zewnętrzych. Można to ew. przerobić na file();


w php.ini mam taka linijke:
allow_url_fopen = On
o to chodzilo questionmark.gif?

P.S. Mialem na ON ale i tak nie dziala sad.gif
ambrozy
a ja mam pytanie innego typu: czy jest sens istnieja ponizszej czesci kodu skoro plik waluty.xml i tak nie jest aktualizowany przez skrypt

[php:1:f3c87869c7]<?php
if($obj->xml->TABELA_KURSOW->DATA_PUBLIKACJI->data!=date("Y-m-d")){
$filename = $new;
$obj->tree = '$obj->xml';
$obj->xml = '';
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($filename, "r"))) {
die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);

}
?>[/php:1:f3c87869c7]
matid
Przepraszam, skopiowałem złą wersję kodu. To była rozwojowa i tutaj jest problem z cachowaniem. Za niedługo wrzucę nową.
miedzna
Cytat
Przepraszam, skopiowałem złą wersję kodu. To była rozwojowa i tutaj jest problem z cachowaniem. Za niedługo wrzucę nową.


Wrzuc wrzuc, bo towarzysze czekaja ...
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.