Jump to content
vanish

Intrebare rss

Recommended Posts

Posted

Am nevoie sa extrag o tabela dintr-un fisier xml, am folosit urmatorul cod:


<?php
// rss page for Testing -
$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";

$xml = simplexml_load_file($feed_url);

// How many items to display
$count = 10;

// How many characters from each item
// 0 (zero) will show them all.
$char = 1090;

foreach ($xml->channel->item as $item) {
if($char == 0){
$newstring = $item->description;
}
else{
$newstring = substr($item->description, 0, $char);
}
if($count > 0){
//in case they have non-closed italics or bold, etc ...
echo"</i></b></u></a>\n";
echo"


$newstring

";

}
$count--;
}

?>

dar imi ia toata linia de sus pe mine ma intereseaza numai:

4r59ah_th.jpg

(si denumirea valutei in fata)

sau de unde pot sa i-au sursele sa imi apara asa:

28isylv.jpg

Posted (edited)

Pai, in primul rand tu tai aiurea tabelul. Ai predefinit un numar de caractere dupa care sa taie, dar ce te faci daca maine, in loc de 4.3771 valoarea va fi 4.0? Te alegi cu 3 caractere aiurea in plus. Si asta doar pentru o valoare.

Continutul lui $xml->channel->item[x]->description e un tabel HTML care poate fi tratat ca XML (presupunand ca nu are obscenitati gen <br>).

Cat despre exemplul din ultimul screenshot poti sa salvezi datele extrase din mai multe RSS-uri de la diverite surse intr-o baza de date si sa ti le afisezi cum vrei dupa aceea. Oricum este o idee buna sa le salvezi sa le salvezi undeva ca sa nu faci requesturi mereu pe site-ul lor, caci s-ar putea sa ai surprize.

Am rescris codul sa fie mai functional. Dar ti-as recomanda sa folosesti o baza de date.

<?php  
// rss page for Testing -
$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";

$schimb = NULL;

foreach ($xml->channel->item as $item) {
$table = simplexml_load_string($item->description);
foreach($table->tr as $tr) {
try {
$currency = "" . $tr->td[1] . "";
if($currency != "") {
// Valorile BNR
$schimb["BNR"][$currency] = "" . $tr->td[2] . "";
// Valorile Reiffeisen - self explanatory sper
$schimb["Raiffeisen"]["casa"]["cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["raiffeisen"]["casa"]["vanzare"][$currency] = "" . $tr->td[4] . "";
$schimb["raiffeisen"]["cont"]["cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["raiffeisen"]["cont"]["vanzare"][$currency] = "" . $tr->td[4] . "";
}
} catch (Exception $e) {
echo $e;
}
}
}
/* In acest moment se pot accesa datele sub forma
* $schimb["banca"]["locatie"]["actiune"]["moneda"]
* unde:
* - banca: numele bancii - momentan BNR sau Raiffeisen
* - locatie:
* * casa - pentru valorile de schimb la casa
* * cont - pentru valorile de schimb in cont (sub 20.000 EUR sau echivalent) aka ultimele 2 coloane din tabel
* - moneda: unitatea monetara din tabel; ex: EUR,GBP,JPY,etc
*
* Apeleaza "print_r($schimb);" pentru a vedea exact structura daca nu e clar din explicatii
*/

Edited by u0m3
Adaugare script_v1
Posted (edited)

asta sa fie oare rezultatul ?


Array ( [BNR] => Array ( [EUR] => 4.3712 [USD] => 3.2980 [GBP] => 5.2315 [CHF] => 3.6265 [AUD] => 3.4299 [CAD] => 3.2954 [DKK] => 0.5879 [HUF] => 1.4841 [JPY] => 3.9909 [NOK] => 0.5724 [SEK] => 0.4897 [TRL] => 1.8312 [PLN] => 1.0482 [CZK] => 0.1765 [MDL] => 0.2796 [EGP] => 0.5464 [RUB] => 0.1124 ) [Raiffeisen] => Array ( [casa] => Array ( [cumparare] => Array ( [EUR] => 4.3000 [USD] => 3.2400 [GBP] => 5.1100 [CHF] => 3.5500 [AUD] => 3.3800 [CAD] => 3.2500 [DKK] => 0.5750 [HUF] => 1.4500 [JPY] => 3.9400 [NOK] => 0.5600 [SEK] => 0.4780 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) ) ) [raiffeisen] => Array ( [casa] => Array ( [vanzare] => Array ( [EUR] => 4.4200 [USD] => 3.3650 [GBP] => 5.3100 [CHF] => 3.6850 [AUD] => 3.4800 [CAD] => 3.3500 [DKK] => 0.5950 [HUF] => 1.5500 [JPY] => 4.0400 [NOK] => 0.5780 [SEK] => 0.4940 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) ) [cont] => Array ( [cumparare] => Array ( [EUR] => 4.3000 [USD] => 3.2400 [GBP] => 5.1100 [CHF] => 3.5500 [AUD] => 3.3800 [CAD] => 3.2500 [DKK] => 0.5750 [HUF] => 1.4500 [JPY] => 3.9400 [NOK] => 0.5600 [SEK] => 0.4780 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) [vanzare] => Array ( [EUR] => 4.4200 [USD] => 3.3650 [GBP] => 5.3100 [CHF] => 3.6850 [AUD] => 3.4800 [CAD] => 3.3500 [DKK] => 0.5950 [HUF] => 1.5500 [JPY] => 4.0400 [NOK] => 0.5780 [SEK] => 0.4940 [TRL] => 0.0000 [PLN] => 0.0000 [CZK] => 0.0000 [MDL] => 0.0000 [EGP] => 0.0000 [RUB] => 0.0000 ) ) ) )

ultimele doua nu ma intereseaza:


$schimb["raiffeisen"]["cont"]["cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["raiffeisen"]["cont"]["vanzare"][$currency] = "" . $tr->td[4] . "";

se pot extrage datele doar pentru primele 2 valute?

modific: ?


$schimb["Raiffeisen"]["casa"]["cumparare"]["EUR"] = "" . $tr->td[3] . "";

imi da rezultate aiurea daca incerc sa scot doar datele pentru primele doua valute :)

Edited by vanish
Posted

Pai le extrage pe toate, dar tu apoi scrii doar ce ai nevoie.

Adica la afisare scrii doar

echo "Cumparare Euro: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["EUR"] . "\n";
echo "Vanzare Euro: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["EUR"] . "\n";
echo "Cumparare Dolar American: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["USD"] . "\n";
echo "Vanzare Dolar American: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["USD"] . "\n";
// etc

Demo-ul cu

print_r($schimb);

era doar ca sa vezi tu structura de stocare daca nu era clar din cod. De afisat le afisezi cum vrei.

Posted (edited)

nu imi recunoaste indicele "vanzare" doar "cumparare"

Notice: Undefined index: vanzare


Cumparare Euro: 4.3000
Notice: Undefined index: vanzare in C:\xampp\htdocs\rs.php on line 43
Vanzare Euro: Cumparare Dolar American: 3.2400
Notice: Undefined index: vanzare in C:\xampp\htdocs\rs.php on line 45
Vanzare Dolar American:


<?php
// rss page for Testing -
$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";
$xml = simplexml_load_file($feed_url);

$schimb = NULL;

foreach ($xml->channel->item as $item) {
$table = simplexml_load_string($item->description);
foreach($table->tr as $tr) {
try {
$currency = "" . $tr->td[1] . "";
if($currency != "") {
// Valorile BNR
$schimb["BNR"][$currency] = "" . $tr->td[2] . "";
// Valorile Reiffeisen - self explanatory sper
$schimb["Raiffeisen"]["casa"]["Cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["raiffeisen"]["casa"]["Vanzare"][$currency] = "" . $tr->td[4] . "";
$schimb["raiffeisen"]["cont"]["Cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["raiffeisen"]["cont"]["Vanzare"][$currency] = "" . $tr->td[4] . "";
}
} catch (Exception $e) {
echo $e;
}
}
}
/* In acest moment se pot accesa datele sub forma
* $schimb["banca"]["locatie"]["actiune"]["moneda"]
* unde:
* - banca: numele bancii - momentan BNR sau Raiffeisen
* - locatie:
* * casa - pentru valorile de schimb la casa
* * cont - pentru valorile de schimb in cont (sub 20.000 EUR sau echivalent) aka ultimele 2 coloane din tabel
* - moneda: unitatea monetara din tabel; ex: EUR,GBP,JPY,etc
*
* Apeleaza "print_r($schimb);" pentru a vedea exact structura daca nu e clar din explicatii
*/
{



echo "Cumparare Euro: " . $schimb["Raiffeisen"]["casa"]["Cumparare"]["EUR"] . "\n";
echo "Vanzare Euro: " . $schimb["Raiffeisen"]["casa"]["Vanzare"]["EUR"] . "\n";
echo "Cumparare Dolar American: " . $schimb["Raiffeisen"]["casa"]["Cumparare"]["USD"] . "\n";
echo "Vanzare Dolar American: " . $schimb["Raiffeisen"]["casa"]["Vanzare"]["USD"] . "\n";

}

?>

Edited by vanish
Posted (edited)

Cred ca e o eroare ce tine de faptul ca unele chei sunt lower-case altele sunt sentence-case.

In PHP $array["index"] nu e tot una cu $array["Index"]. Verifica acest aspect: de exemplu in blocul if am scris prima oara Raiffeisen iar a dupa aceea raiffeisen. Trebuie sa fie toate la fel.

Am recorectat codul:

<?php  
// rss page for Testing -
$feed_url = "http://www.raiffeisen.ro/abonare-rss/curs-valutar.xml";

$xml = simplexml_load_file($feed_url);

$schimb = NULL;

foreach ($xml->channel->item as $item) {
//echo $item->description;
$table = simplexml_load_string($item->description);
foreach($table->tr as $tr) {
try {
$currency = "" . $tr->td[1] . "";
if($currency != "") {
// Valorile BNR
$schimb["BNR"][$currency] = "" . $tr->td[2] . "";
// Valorile Reiffeisen - self explanatory sper
$schimb["Raiffeisen"]["casa"]["cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["Raiffeisen"]["casa"]["vanzare"][$currency] = "" . $tr->td[4] . "";
$schimb["Raiffeisen"]["cont"]["cumparare"][$currency] = "" . $tr->td[3] . "";
$schimb["Raiffeisen"]["cont"]["vanzare"][$currency] = "" . $tr->td[4] . "";
}
} catch (Exception $e) {
echo $e;
}
}
}
/* In acest moment se pot accesa datele sub forma
* $schimb["banca"]["locatie"]["actiune"]["moneda"]
* unde:
* - banca: numele bancii - momentan BNR sau Raiffeisen
* - locatie:
* * casa - pentru valorile de schimb la casa
* * cont - pentru valorile de schimb in cont (sub 20.000 EUR sau echivalent) aka ultimele 2 coloane din tabel
* - actiune:
* * cumparare
* * vanzare
* - moneda: unitatea monetara din tabel; ex: EUR,GBP,JPY,etc
*
* Apeleaza "print_r($schimb);" pentru a vedea exact structura daca nu e clar din explicatii
*/

echo "Cumparare Euro: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["EUR"] . "\n";
echo "Vanzare Euro: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["EUR"] . "\n";
echo "Cumparare Dolar American: " . $schimb["Raiffeisen"]["casa"]["cumparare"]["USD"] . "\n";
echo "Vanzare Dolar American: " . $schimb["Raiffeisen"]["casa"]["vanzare"]["USD"] . "\n";

Edited by u0m3
Adaugat cod complet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...