szoszon3
7.05.2004, 19:59:25
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"> <font color="._W_COLOR.">1 EUR - ".$kurs[1]."</font>";
if (eregi("USD",$waluta[1])) echo "<br><img src="/img_waluty/usa.gif"> <font color="._W_COLOR.">1 USD - ".$kurs[1]."</font>";
if (eregi("GBP",$waluta[1])) echo "<br><img src="/img_waluty/gb.gif"> <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
7.05.2004, 20:12:30
Jakby mógł, to umieć kod między
<?php
, a
?>
. Każdemu zrobisz przyjemnoć. :wink:
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
8.05.2004, 15:28:10
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
9.05.2004, 11:54:44
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
9.05.2004, 12:02:15
masz pustą linie na początku kodu . Musisz mieć plik waluty.xml . U mnie działa bez zarzutu.
szoszon3
9.05.2004, 20:10:24
[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?

[/quote]
matid
9.05.2004, 20:48:09
Kod z tego co wiem jest dobry, bo go sprawdzałem.
Wystarczy utworzyć pusty plik waluty.xml
miedzna
10.05.2004, 11:53:43
[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
10.05.2004, 12:36:25
[php:1:be4e153a6f]<?php
//$obj->xml = 'waluty.xml'; //

a po co ?
$obj->xml = ''; // ;-) wystarczy
?>[/php:1:be4e153a6f]
miedzna
10.05.2004, 14:18:53
Cytat
[php:1:4b289fa53f]<?php
//$obj->xml = 'waluty.xml'; //

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
10.05.2004, 16:49:45
A masz plik "waluty.xml" ?
miedzna
10.05.2004, 16:51:32
Cytat
A masz plik "waluty.xml" ?
Mam i nic
Bakus
10.05.2004, 17:24:00
Ja z kolei mam inny problem...
Cytat
XML error: no element found at line 2
Indianin
10.05.2004, 18:36:32
Ja miałem tak samo gdy w pliku waluty.xml bylo kilka pustych linii . Plik musi mieć 0 bitów .
matid
10.05.2004, 19:56:18
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
11.05.2004, 14:16:02
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

?
P.S. Mialem na ON ale i tak nie dziala
ambrozy
11.05.2004, 14:49:54
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
11.05.2004, 14:53:58
Przepraszam, skopiowałem złą wersję kodu. To była rozwojowa i tutaj jest problem z cachowaniem. Za niedługo wrzucę nową.
miedzna
11.05.2004, 14:56:56
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.