|
[ suboticanin @ 03.03.2008. 19:18 ] @
| Zelim pomocu curl-a da preuzmem stranu:
http://www.nbs.yu/internet/lat...07&vrsta=1&eksport=xml
sa ovim kodom:
Code: <?php
$datum = '01.01.2007';
$vrsta = '1';
$eksport = 'xml';
$bcURL = 'http://www.nbs.yu/internet/latinica/scripts/kl.html';
$data = "datum=".urlencode($datum)."&vrsta=".urlencode($vrsta)."&eksport=".urlencode($eksport);
$cUrl = curl_init();
curl_setopt($cUrl, CURLOPT_URL, $bcURL);
curl_setopt($cUrl, CURLOPT_HEADER, 'Content-type: application/x-www-form-urlencoded');
curl_setopt($cUrl, CURLOPT_GET, 1);
curl_setopt($cUrl, CURLOPT_GETFIELDS, $data);
curl_setopt($cUrl, CURLOPT_TIMEOUT, 30);
$response = curl_exec($cUrl);
if (curl_errno($cUrl)) {
print curl_error($cUrl);
} else {
print $response;
}
?>
ali stalno dobijam 404 stranu. |
[ Gojko Vujovic @ 03.03.2008. 20:12 ] @
Code:
<?php
ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)');
$datum = '01.01.2007';
$vrsta = '1';
$eksport = 'xml';
$bcURL = 'http://www.nbs.yu/internet/latinica/scripts/kl.html';
$data = "datum=".urlencode($datum)."&vrsta=".urlencode($vrsta)."&eksport=".urlencode($eksport);
print file_get_contents("$bcURL?$data");
?>
[ suboticanin @ 04.03.2008. 06:39 ] @
hvala na odgovoru ali meni nažalost treba rešenje koriteći "curl", pošto to jedino funkcioniše na web serveru koji koristim.
[ karas @ 04.03.2008. 18:37 ] @
Ne valja ti URL, koliko vidim kursna lista je anchor koji poziva JavaScript.
[ suboticanin @ 04.03.2008. 19:11 ] @
klikni na ovaj link pa ces videti da je dobar link:
http://www.nbs.yu/internet/lat...07&vrsta=1&eksport=xml
nije problem u linku nego u mojoj PHP skripti.
[ Gojko Vujovic @ 04.03.2008. 20:22 ] @
Hajde kad baš insistiraš na curl-u:
Code:
<?php
$datum = '01.01.2007';
$vrsta = '1';
$eksport = 'xml';
$bcURL = 'http://www.nbs.yu/internet/latinica/scripts/kl.html';
$data = "datum=".urlencode($datum)."&vrsta=".urlencode($vrsta)."&eksport=".urlencode($eksport);
$bcURL .= "?$data";
$cUrl = curl_init();
curl_setopt($cUrl, CURLOPT_URL, $bcURL);
curl_setopt($cUrl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0)');
curl_setopt($cUrl, CURLOPT_HEADER, 'Content-type: application/x-www-form-urlencoded');
curl_setopt($cUrl, CURLOPT_GET, 1);
curl_setopt($cUrl, CURLOPT_TIMEOUT, 30);
$response = curl_exec($cUrl);
if (curl_errno($cUrl)) {
print curl_error($cUrl);
} else {
print $response;
}
?>
Inače ovo nije dobar način za skidanje liste jer ti niko ne garantuje koliko će dugo raditi ta stranica, kao što su i prethodne lokacije gde su držali kursne liste prestajale sa radom.
Za ove potrebe su napravili web servis za kursne liste. Uputstvo za korišćenje je ovde: http://www.nbs.yu/export/inter...006_koriscenje_web_servisa.pdf
O tome je bilo na ES-u još krajem 2006.
[ Nemanja Dubravac @ 04.03.2008. 20:26 ] @
probaj ovo:
Code:
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, $root . "tmp/cookieFileName"); //cookie fajl
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');
curl_setopt($ch, CURLOPT_URL,"http://www.nbs.yu/internet/latinica/scripts/ondate.html");
ob_start(); // prevent any output
curl_exec ($ch); // execute the curl command
ob_end_clean(); // stop preventing output
curl_setopt($ch, CURLOPT_COOKIEFILE, $root . "tmp/cookieFileName"); //cookie fajl
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_URL, "http://www.nbs.yu/system/modul...kl/kllatinica/kursnaLista.html");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'datum=' . date('d.m.Y') . '&vrsta=3&eksport=xml&godina=' . date('Y') . '&broj=br&lang=sr');
ob_start(); // prevent any output
$text = curl_exec ($ch); // execute the curl command
ob_end_clean(); // stop preventing output
curl_close ($ch);
rezultat treba da izadje u $text-u
iako sam kod stavio u code tag, es mi je ipak skratio jedan url u skripti, koji treba da izgleda ovako (bez razmaka)
http://www.nbs.yu/system/modules /yu.nbs.kl/kllatinica/kursnaLista.html
[ bonc @ 18.06.2008. 16:37 ] @
Nisam na vreme video ovu temu, pa mi je drugar uradio, pošto sam ja laik za php.
Uz njegovu dozbolu stavljam ovde, možda još nekom zatreba:
Code:
<?php
/*
* Kursna Lista 1.0.0
*
* Copyright (c) 2008 IvanG (stribor.co.yu)
* Licensed under GPL (http://www.gnu.org/licenses/gpl.html) licenses.
*
*/
/**
* Get a web file (HTML, XHTML, XML, image, etc.) from a URL. Return an
* array containing the HTTP server response header fields and content.
* Function taken from http://nadeausoftware.com/arti...ip_how_get_web_page_using_curl
* and added POST request data by IvanG
*/
function get_web_page( $url, $post=NULL )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
// ako dobijete grešku, sledeću liniju označite kao komentar
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "Pera", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_POST => $post!=NULL, // if there is post pass it on
CURLOPT_POSTFIELDS => $post // post parameters
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
// URL sa koga se uzimaju podaci
$url = "http://www.nbs.rs/internet/cirilica/scripts/kl.html";
//$url = "http://www.nbs.rs/internet/latinica/scripts/kl.html";
// POST podaci da bi se dobila kursna lista za današnji datum
$post_data = "datum=" . date("d.m.Y") . "&eksport=html&vrsta=3";
// Pokupi podatke sa nbs za današnji datum
$indata = get_web_page($url, $post_data);
if($indata['errno'] != 0)
die($indata['errmsg']);
preg_match_all('/<td.*?>(\\d+?)<\/td><td.*?>(.*?)<\/td><td.*?>(.*?)<\/td><td.*?>(.*?)<\/td>.*?<td.*?>(.*?)<\/td>/s', $indata['content'], $data, PREG_SET_ORDER);
if(count($data) > 0) {
echo "<table\n><tr><th>ŠIFRA VALUTE</th><th>NAZIV ZEMLjE</th><th>OZNAKA VALUTE</th><th>VAŽI ZA</th><th>DINARA</th></tr>\n";
// ispis podataka
for ($i = 0; $i < count($data); $i++) {
echo "<tr>\n<td>";
echo $data[$i][1]; // Sifra valute
echo "</td><td>";
echo $data[$i][2]; // Naziv zemlje
echo "</td><td>";
echo $data[$i][3]; // Oznaka valute
echo "</td><td>";
echo $data[$i][4]; // Vazi za
echo "</td><td>";
echo $data[$i][5]; // Dinara
echo "</td><td>\n</tr>";
}
echo "</table>";
} else {
echo "Podaci nisu nađeni.. ukoliko vidiš željene podatke u sledećem tekstu, znači da je promenjen format i potrebno je uskladiti regexp<br />\n";
echo $indata['content'];
}
?>
Ja sam za sebe izvršio izmenu u kodu da mi prikazuje samo kurs evra, tako što sam izbacio echo linije u if(count($data), pa stavio
Code: ...
if(count($data) > 0) {
echo "1 € = ";
// ispis podataka
echo $data[0][5];
echo "\n";
} else {
...
[ bonc @ 07.07.2008. 14:50 ] @
Dopuna, v.1.1.0, za ispisivanje broja kursne lite i datuma izdavanja:
Ispod bloka
Code: if(count($data) > 0) {
echo "<table\n><tr><th>ŠIFRA VALUTE</th><th>NAZIV ZEMLjE</th><th>OZNAKA VALUTE</th><th>VAŽI ZA</th><th>DINARA</th></tr>\n";
ubaciti blok
Code: // ovde se skuplja naslov - broj liste i datum formiranja
if (preg_match('/KURSNA LISTA BR\\. (\\d*).*FORMIRANA NA DAN(.*?)GODINE/s', $indata['content'], $regs)) {
echo "Broj:".$regs[1]."<br />\n";
echo "Dan:".$regs[2]."<br />\n";
} else {
echo "nema podataka?!";
}
// nastavak - ispis podataka
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|