Keresés
Hírlevél
 
Kiemelt témák
»Hogyan védjem meg a portálomat?
»Google wave
»Assembly :: röviden
Állás/munka
»Másodállást keresek, C# és C++
»IPhone App elkészítése
»PHP Fejlesztőt keresünk Miskolcon!
»Profi sitebuildert keresünk projekt alapon
»PHP állás azonnali belépéssel Budaörsön
» több téma
Tudástár
?Ovál menüre
?Delphi SOAP + IBQuery komponens hiba
*Több nyelvű flash mozi XML-ből ciklussal
?Több oldalvezérlő menü egy oldalon
*Flash vissza a fooldalra
?Free pascal unicode stringek
?PHP mappanév
?C++ argv tartalmanak elemzese
Több adat kiírása.
ZQuey-en tárolt adattáblanevek
MySQL beágyazott query ( MAX(SUM())
*Ajax ellenőrzés, eredményfüggő megjelenítés
?Nem jön létre kapcsolat a server-el
?Jquery pictures
Weblap megjelenítése Java Panelben
» több téma
Társalgó
»Melyik főiskola vagy egyetem?
»Weblap véleményezés
»Lelkesítő topic
»Clipper kontra XP
»Programozás Nokia 3720c-2-re
»HTML szerkesztő
»"Márió" jellegű játék írása pascal nyelven
»Windows Mobile programozás egyszerű programmal
»Javascript forrás visszaalakítása
»Ártalmas szoftver, támadó webhely kijavítás
» több téma
ASP  |  C#  |  C++  |  CSS  |  Delphi  |  Flash  |  HTML  |  Java  |  JavaScript  |  Pascal  |  Perl  |  PHP  |  Python  |  Visual Basic  |  Visual C++  |    »    

Tudástár

»

Valuta árfolyam a weblapomon

»

Valuta árfolyam a weblapomon

nyitotta: Petko, idő: 2005.07.28., moderátor: moderator
  Értesítés változás esetén Felvétel kedvencekhez Küldés emailben Nyomtatható verzió

Kategóriák:Programozási nyelvek » PHP

Sorrend:
Időzóna:
Blokkméret:
Szeretnék a weblapomra egy olyan árfolyam kijelzők, mint amilyen az eco.hu -n van.

Hogyan tudnám PHP segítségével URL keresztűl mondjuk egy <iframe> -be betölteni az eco.hu-n található valuta árfolyamtáblázatot?
http://www.phpclasses.org/browse/package/2153.html
http://www.mnb.hu/engine.aspx?page=napiarfolyamok

Pl megnyitod ezt a linket fopennel, és valami ereg, stb függvény segítségével kikeresgéled belőle a számokat, és a valutanemeket. Hasonlóan a tegnap rss phaerserhez.
Akkor ahogy megynitom, mint fájlba kikeresem a szükséges anyagot. igaz?

továbbá miért van az,hogy

$file = "http://www.hwsw.hu/xml/latest_news_rss.xml";

if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}

ez így nem megy.....

"megnyitod ezt a linket fopennel"

nem sikerül linket megnyitmon fopen-nel!!!

miért?
php.ini-ben le van tiltva az url_fopen vagy hasonló nevű bejegyzésben egy link megnyitása. Ugyanis nem biztonságos. Helyette használj socket-eket (lásd manual), azzal tutira menni fog. Persze ez így alacsony szintű, de valamit valamiért...
Szerintem döntsük el, hogy most az árfolyamok kellenek, vagy a HWSW rss-e, mert aszerint kéne pharsert írni..
Az mnb oldala nem lesz jó, nagyon tele van bszva kóddal. Legyen az eco.hu:
  $fp = @fopen('http://www.eco.hu/', "r");
  while(!feof($fp)){
  $row .= fgets($fp, 4096);
  }
  fclose($fp);
Ezzel belekerült a $row változóba a linken található oldal. Most jön az, hogy kivágod belőle ami kell, mondjuk az MNB Deviza nevű táblázatot a jobb hasábból. Ehez az kell, hogy megnézd az oldal forrását, hogy honnét lehet vágni, tehát hogy mihez igazítsd a reguláris kifejezés elejét meg a végét:
  if(eregi("MNB DEVIZA</font></td></tr>(.*)</tml>", $row, $resz)) {
$out = '<table>'."\n";
$out .= $resz;  // ezt vágtad ki
$out .= '</table>'."\n";
  }
Most már benne van az $out változóban ami kell, már csak ki kell íratni, vagy előtte még cachelni sem ártana.
nézd már meg azt a classt, amit küldtem, nekem müxik
ez a link elég jót ad vissza:

http://www.mnb.hu/engine.aspx?page=arfolyamtablazat&query=2005.07.27.,2005.07.27.,1,AUD,CAD,CHF,CZK,DKK,EUR,GBP,HRK,ISK,JPY,KRW,MXN,NOK,NZD,PLN,RON,SEK,SIT,SKK,TRY,USD
Hát ja, csak ha megnézed a forrását...
Nemtudom miért nem csinál valamelyik bank RSS-elérést, vagy leglább valami emészthető XML-t. Hírek, részletes időjárás, receptek, névnap minden elérhatő már RSS-ből, csak a valuta nem
http://currencysource.com/rss_currencyexchangerates.html
Webservice. Erre találták ki. A weblap az ember számára szolgáltat "feldolgozandó adatot", a webservice meg gép számára. Itt van róla infó (nekem is épp a minap súgta meg egy kolléga a linket):
http://www.mnb.hu/arfolyamok.asmx
További kulcsszavak a technológiához: SOAP, WSDL.
erre tucc ezzel megoldást?

HTTP/1.1 500 Internal Server Error. Date: Thu, 28 Jul 2005 17:57:50 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 1.1.4322 Cache-Control: private Content-Type: text/xml; charset=utf-8 Content-Length: 514    soap:Server  Server was unable to process request. --> This is an unexpected token. The expected token is 'NAME'. Line 2, position 11.    HTTP/1.1 400 Bad Request Content-Type: text/html Date: Thu, 28 Jul 2005 17:57:50 GMT Connection: close Content-Length: 20
Bad Request

nekem egy ilyet dobott vissza. valakinek ötlet?
És pontosan mit post-oltál el? Mert a hibaüzenetből nekem úgy tűnik, hogy nem volt jó.
Ha minden igaz, akkor ha azt post-olod, ami ezen az oldalon felül van:
http://www.mnb.hu/arfolyamok.asmx?op=GetCurrentExchangeRates
úgy, hogy a content-length headerbe a kiemelt szöveg helyére beírod a törzsben lévő xml doksi hosszát (ha jól számoltam 312), akkor az alatta lévő válaszban a kiemelt string helyén valami ilyesmi fog szerepelni (természetesen sortörés és egyéb whitespace nélkül):
<MNBCurrentExchangeRates>
  <Day date="2005-07-28">
    <Rate curr="AUD" unit="1">153,49</Rate>
    <Rate curr="CAD" unit="1">164,59</Rate>
    <Rate curr="CHF" unit="1">156,77</Rate>
    <Rate curr="CZK" unit="1">8,12</Rate>
    <Rate curr="DKK" unit="1">32,86</Rate>
    <Rate curr="EUR" unit="1">245,15</Rate>
    <Rate curr="GBP" unit="1">354,46</Rate>
    <Rate curr="HRK" unit="1">33,57</Rate>
    <Rate curr="ISK" unit="1">3,15</Rate>
    <Rate curr="JPY" unit="100">180,37</Rate>
    <Rate curr="KRW" unit="100">19,77</Rate>
    <Rate curr="MXN" unit="1">19,08</Rate>
    <Rate curr="NOK" unit="1">30,97</Rate>
    <Rate curr="NZD" unit="1">137,99</Rate>
    <Rate curr="PLN" unit="1">60,01</Rate>
    <Rate curr="RON" unit="1">69,67</Rate>
    <Rate curr="SEK" unit="1">26,08</Rate>
    <Rate curr="SIT" unit="1">1,02</Rate>
    <Rate curr="SKK" unit="1">6,27</Rate>
    <Rate curr="TRY" unit="1">152,11</Rate>
    <Rate curr="USD" unit="1">203,22</Rate>
  </Day>
</MNBCurrentExchangeRates>
Tessék, itt a kód, ez megcsinálja a lekérdezést. A 11-edik sorban ($s) van az egész visszaadott XML, ezt a php parserével szétszeded és máris megvan az adat.

<?php

$bdy = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
$bdy.= "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
$bdy.= "<soap:Body>";
$bdy.= "<GetCurrentExchangeRates xmlns=\"http://www.mnb.hu/webservices/\" />";
$bdy.= "</soap:Body>";
$bdy.= "</soap:Envelope>\r\n";

$req = "POST /arfolyamok.asmx HTTP/1.1\r\n";
$req.= "Host: www.mnb.hu\r\n";
$req.= "Connection: Close\r\n";
$req.= "Content-Type: text/xml; charset=utf-8\r\n";
$req.= "Content-Length: ".strlen($bdy)."\r\n";
$req.= "SOAPAction: \"http://www.mnb.hu/webservices/GetCurrentExchangeRates\"\r\n\r\n";

$fs = fsockopen("www.mnb.hu", 80);
fwrite($fs, $req.$bdy);
while (!feof($fs))
{
    $s = fgets($fs);
    echo $s."<BR/>";
}
fclose($fs);
?>

Ha viszont a hostolt oldalon nincs engedélyezve az fsockopen, hát az szívás. Ha az 5-ös PHP-t használod, akkor abban már van gyári SOAP támogatás. Lehet, hogy azzal egyszerűbben megoldható.
Nekem működik. Tudsz még ilyen webservice forrásokat, vagy minek hívják?
De ehez akkor mindegyikhez külön kell írni xml értelmezőt nem arra amit visszaad?
Az MNB-ét is hetekig kerestem. Se google, se semmi eredmény. Aztán e-mailben kaptam meg a címet egy kollégától.

A különböző XML-ek parsolásáról: hát a WSDL alapvető feladata az volna, hogy azonosítsa a hívható "függvényeket", a bemeneti paramétereket és a kimeneti paramétereket típussal együtt. Erre aztán mindenféle automatikus eszköz van, a .NET például a WSDL-ből már olyan szinten kódot generál, hogy ott már csak meg kell hívni a megfelelő metódust, és az ember ölébe is pottyantak a visszaadott adatok.
Jelen esetben ez a WSDL (http://www.mnb.hu/arfolyamok.asmx?WSDL) nem a legjobban kidolgozott, mert egy teljes XML részfát ad vissza nyers string-ként, holott visszaadhatná ezt mondjuk tömbként is.
Miért van, ha parser segítségével egy XML hírforrást akarok elérni, hogy ha megakarom nyítni az XML-t

$fp = @fopen('http://www.hwsw.hu/xml/latest_news_rss.xml', "r");

Akkor ezt az üzit kapom:
Warning: feof(): supplied argument is not a valid File-Handle resource in /home/friends-lan/public_html/xml/index.php on line 84
kipróbáltam az alábbi forráskódot, de nekem nem megy! Biztos PHP beállítási hiba, de mi lehet az?

ez volt a teszt:
$fp = @fopen('http://www.eco.hu/', "r");
while(!feof($fp)){
$row .= fgets($fp, 4096);
}
fclose($fp);

if(eregi("MNB DEVIZA</font></td></tr>(.*)</tml>", $row, $resz)) {
$out = '<table>'."\n";
$out .= $resz; // ezt vágtad ki
$out .= '</table>'."\n";
}


ezt kapom vissza:

Warning: feof(): supplied argument is not a valid File-Handle resource in /home/friends-lan/public_html/xml/index.php on line 82

Warning: fgets(): supplied argument is not a valid File-Handle resource in /home/friends-lan/public_html/xml/index.php on line 83


nem értem.....

Nem kell saját magadnak szórakoznod fopennel meg ilyen hülyeségekkel, ennél a félmegoldásnál sokkal jobbat kapsz készen a PEAR ExhangeRates osztályával...
Köszi átfutom, mert ez így nekem tényleg fél megoldás!

De pontosan mit tud ez a csomag?
Egy xml árfolyamlistából tudsz vele lekérdezni árfolyamokat (a default xmlforrása tökéletes szerintem), és konvertálgatni köztük, formátumot beállítani, stb.

gyakorlatilag mindössze átkonvertálod minden érintett pénznem 1 árát forintra, és megkapod hány forintnak felel meg...
jó ez erre a feladatra OK, csak azért próbálkozom az fopen- el, mert mi ha pl. a BÉT vagy az ECO árfolyamdiagramját szeretném betölteni a lapomra?

Tehát mindenképp azért kellene fopen, h univerzális, minden elérhető legyen....
A diagrammok képek, és simán linkelheted is őket...
egy példát tudnál mondani? nagyon életmentő lenne.

Pl.: a www.bet.hu -on bal oldalt van egy diagram, arra lenne szükségem!

nagyon hálás tudnék lenne!
http://www.bet.hu/gfx/pic/BUX.png

simán azt csinálod, hogy
<img src="http://www.bet.hu/gfx/pic/BUX.png" alt="bux diagramm" />

bármilyen böngészővel meg tudod nézni a képek címét...
ez így tényleg OK! gondolom a hivatkozás révén amikor frissűl a BÉT-en, akkor frissül nekem is a kép?

viszont ha már egy táblázat kellene, ami nem kép hanem HTML forrás azt már nem megy ezzel a módszerrel?
Igen, az frissül magától.

A táblázat viszont már HTML, így ha egyéb adatokat is tartalmaz, akkor azt ki kell bányásznod valahonnan. Ez megtehető magából a html forrásból is, de én valószínűbbnek tartom, hogy az a html is valami xml féle adatforrást használ, tehát pear xml-el azt is meg lehet egyszerűen oldani, csak meg kell keresni (érdeklődni) hol a forrás.
Belépés
E-mail cím:
Jelszó:

RSS források
-Hírek
-Cikkek
-Fórumok
Top pontgyűjtők
»Micu1.770
»Árnyék810
»vinie530
»Frostech0400
»Riha400
»pelz350
»djjjozsi310
»stl290
»NevemTeve230
»klorand220
Hírek
»Cassandra-ra tér át a MySQL-ről a Digg is
»Letölthető a Mozilla Jetpack SDK első kiadása
»Saját alkalmazásboltot nyitott a Google
»Súlyos sebezhetőség minden Apache kiszolgálóban
»Natív 3D-s támogatás a legújabb Android fejlesztőkészletben
» több hír
PC Fórum hírek
»Minden weboldalra beköltözne a Facebook
»Nem boldogul az legújabb merevlemezekkel az XP és a Linux
»Átírják a Firefox licencszerződését
»Több tízezer nebuló a Microsuliban
»Sebezhető az Internet Explorer és az Opera is
»Még márciusban megjelenik az Intel nyolcmagos szerverlapkája
»Hamis Core i7 processzorokat árultak a neten
»Korábban jön a Windows 7 Service Pack 1
Tagi blogok
»USB
»PHP, mint sablonmotor egyszerűen
»Én és linux
»Coming out