Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: extractowanie kursu waluty i potem uzycie jej jako zmiennej
Forum PHP.pl > Forum > Przedszkole
Anonymous
mam sobie taki skrypcik:

[php:1:e539f0baee]

<?
$host = "www.nbp.pl";
$strona="/Kursy/KursyA.html";

$wskaznik = fsockopen($host, 80, $blad_nr, $blad_opis) or
die ("Nie można otworzyć strony $host<BR>Błąd: $blad_nr <BR>Opis: $blad_opis");
$naglowek = "GET $strona HTTP/1.1rnHost: $hostrnrn";
fputs($wskaznik, $naglowek);

$lancuch = "";
while(!feof($wskaznik))
$lancuch = $lancuch.fgets($wskaznik);
fclose($wskaznik);

$odpowiedz = substr($lancuch,0,strpos($lancuch,"rnrn"));

$strona = strip_tags(substr($lancuch, strpos($lancuch,"rnrn")));

$pre_usd = substr($strona,strpos($strona,"USD"),10);
$pre_euro = substr($strona,strpos($strona,"EUR"),10);
$pre_usd2 = substr($pre_usd, -5,4);
$pre_euro2 = substr($pre_euro, -5,4);

$usd = substr_replace($pre_usd2, ".",-3).substr($pre_usd, -3,2);
print "cena dolara: ".$pre_usd;

echo "<br>";

$euro = substr_replace($pre_euro2, ".",-3).substr($pre_euro, -3,2);
print "cena euro: ".$pre_euro;

echo "<br>";
$mnoznik = 20000;
echo "a teraz wartosci pomnozone przez zmienna mnoznik";

echo "<br>";

$wynik_eu = $euro*$mnoznik;
$wynik_us = $usd*$mnoznik;

print "<br>cena w zl: ".$mnoznik;
print "<br>cena w $: ".$wynik_us;
print "<br>cena w Eu: ".$wynik_eu;

?>
[/php:1:e539f0baee]

ktory zczytuje z nbp aktualnego dolara i eurusa a potem uzywa je do wyliczania cen

jednak owy skrypt ma wade, choc dziala to dziala dziwnie, czasami szybko a czasami straaaasznie dlugo, i teraz nie wiem dla czego
(nie jest to wina przeplywnosci lacza miedzy serwerem gdzie jest skrypt a serwerem nbp )

czy ktos moglby mi pomoc ?
moze podsunac jakis lepszy pomysl na otrzymywanie jako zmienne aktualnych kursow walut ?
neo.priv
Zobacz www.php.pl, jest tam news o Turck MMCache for php.

Poczytaj może pomoże.
Anonymous
Ja bym wyciagnal zawartosc calej strony, potem wyciagnal link do xml, odczytal interesujace mnie waluty i wrzucile je do tablicy. Potem juz tylko wyswietlic smile.gif Wygladaloby to tak mniej wiecej:
[php:1:96b99461c4]<?php
// Odczyt nazwy pliku XML
$link_kurs = "http://www.nbp.pl/Kursy/KursyA.html";
$link_plik = fopen($link_kurs, "r");
while (!feof($link_plik))
$string_tmp .= fgets($link_plik, 4096);
fclose($link_plik);

// Wyciagniecie linku do pliku XML
$ereg = "/<a href="xml/(.*)">powyższa tabela w formacie .xml</a>/i";
preg_match($ereg,$string_tmp,$URL);
$link_xml = $URL[1];
?>[/php:1:96b99461c4]
No i parser trzeba napisac osobno, ale na klasach sie nie znam za bardzo sad.gif Mam nadzieje, ze troche pomoze ten kodzik. Swoja droga zapotrzebowanie na takie skrypty rosnie, juz prawie wszedzie sa kalkulatory walut biggrin.gif
DeyV
1. sprawdz, co tak naprawdę sie tak wolno wykonuje, poprzez umieszczenie w kolejnych miejscach odpowiednich zegarów. W ten sposób określisz, który fragment kody wykonuje się wtedy najwolniej.

2. I tak założę się, że problem jest właśnie w pobieraniu pliku z zewnętrznego serwera. Nawet jak sam transfer pomiędzy serwerami jest ok, to przyczyną może być np. przeciążenie serwerka nbp.

3. Aby uniknąć tego problemu, warto by było w jakiś sposób cachować wyniki tego skryptu. W końcu kursy walut nie zmieniają się co 10 min (prawda?) więc wystarczyłoby wykonywac taki skrypt raz na jakiś czas, a następnie zapisać jego wyniki w jakimś pliczku (bazie) już na naszym serwerze.
Anonymous
ok, posiedzialem chwile przy przeszukiwaniu forum i znalazlem cos takiego:
http://forum.php.pl/viewtopic.php?t=3026&start=21

[php:1:38abc3fed6]
<?
$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 "<br>średnie kursy walut <br>NBP z ". $zdnia[1];
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("USD",$waluta[1])) echo "<br>1 USD - ".$kurs[1];
if (eregi("EUR",$waluta[1])) echo "<br>1 EUR - ".$kurs[1];
if (eregi("GBP",$waluta[1])) echo "<br>1 GBP - ".$kurs[1];
}
}
?>
[/php:1:38abc3fed6]

ten skrypt zwraca waluty baardzo szybko, prawie tak szybko jak laduje sie strona.
nie porownywalnie szybciej niz ten ktory wczesniej podawalem
jednak problemem tego jest ze nie zwraca ich w postaci zmiennych
i nie wiem jak to zrobic

poza tym dalej nie wiem co tak zwalnialo we wczesniejszym skrypcie, serwery na ktorych odpalalem tamten byly rozne, od p200mmx do 2xP4 i to na roznych laczach, zawsze podobnie dluuuuugo

moze macie jakis pomysl questionmark.gif
nocnyMark()
to juz tak z czystej powinnosci by zakonczyc temat podam rozwiazanie dla przyszlych pokolen poczatqjacych ktore nie beda mogly sobie z tym poradzic

przerobilem troche jeden z powyzszych skryptow i wyszlo tak:

[php:1:e5f556fc93]
<?php

// skrypt wyciaga dolara i euro ze strony NBP //

$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("<xml/(.*?).xml>", $strona, $xml);

$f1 = @fopen("http://www.nbp.pl/Kursy/$xml[0]", "r");

if ($f1) {
while(!feof($f1)) $strona1.= fread($f1,1024); fclose($f1);
$strona1 = preg_replace("/r/", "", $strona1);
$strona1 = preg_replace("/n/", "", $strona1);
$strona1 = preg_replace("/ /", "", $strona1);
preg_match("/USD</kod_waluty><kurs_sredni>(.*?)</ku/", $strona1, $usd);
$usd = substr($usd[0], -10, -6);
global $usd;
$usd = substr($usd, 0, 1 ).".".substr($usd, 2,3);
preg_match("/EUR</kod_waluty><kurs_sredni>(.*?)</ku/", $strona1, $eur);
$eur = substr($eur[0], -10, -6);
global $eur;
$eur = substr($eur, 0, 1 ).".".substr($eur, 2,3);

}
}
echo "<br>kurs dol $usd i kurs eur $eur <br>";

?>[/php:1:e5f556fc93]

i na koniec dodam ze skrypt wyciaga aktualna nazwe pliku xml z tabela kursow ze strony nbp a potem w tym pliku xml szuka odpowiednich walut

mam nadzieje ze to komus pomoze bo mnie sie nie udalo znalesc na tym forum kodu w miare szybkiego, prostego i krotkiego, ktory by wyciagal waluty ktore potem mozna uzyc na stronie do dynamicznego przeliczania z pln'off na przyklad

pozdrawiam
i jakby co to pytac

ps. zgodnie z sugestia nexisa poprawilem, bledem okazalo sie to ze po wrzuceniu na strone forum dodawalo do skryptu kilka spacji no i wszystko sie zaczelo chrzanic - teraz skrocilem troche stringi ktore szuka w pliku *.xml - sprawdzilem kopiujac z forum skrypt - dziala
nexis
Czy testowałeś ten skrypt w ogóle zanim go tak pewnie tu umieściłeś? Skrypt wrzuciłem na serwer - www.nexis.pl/waluta.php (poprawka: link nieaktualny) - i nie za bardzo to działa. Jakieś propozycje poprawek?

poprawka: Skrypt już działa smile.gif
Kihol
Witam, właściwie to nie wiem gdzie szukać czegoś takiego, więc piszę tutaj. Jeśli gdzieś jest już coś podobnego, to sorry, pokierujcie mnie.

Chodzi mi o podobną sprawę, ale logowania do części zabezpieczonej hasłem.
Tzn chcę zalogować się na stronę i pobrać dane jak np tutaj kurs dolara. Tylko, tak jak piszę, nie mam pojęcia jak się zalogować. W php piszę od niedawna. Ale programowałem już conieco w C.
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.