[ mnicic @ 26.04.2006. 19:36 ] @
------------------------------------

Informacija iz 2010. godine
Poruka: http://www.elitesecurity.org/p2678616

Citat:
Predrag Supurovic: Ovih dana sam se bavio preuzimanjem kursne liste i prilicno me je namucilo. Dokumentacije je dosta stura, ali uz nesto kopanja i par hintova podrske iz NBS uspelo mi je da zavrsim stvar.

Objasnjenje i primer koji radi imate na PHP, nusoap i veb servis za kursnu listu NBS


------------------------------------

Pravim kursnu listu dinara po ASC fajlu NBS. Imam problem pri "dobijanju" fajla.

Code:

$k_file = "http://www.nbs.yu/serbian/kursevi/ascii/Kl" . gmdate("ymd") . ".asc"
...
if(!($f = fopen($k_file, "r"))) die ("---");
{
     $zemlja = fgets($f, 110);
     ...


Nece nikako da mi ocita fajl. Kako mogu da resim ovaj problem?



[Ovu poruku je menjao Goran Rakić dana 03.09.2010. u 00:39 GMT+1]
[ SmilieBG @ 26.04.2006. 20:03 ] @
Paa.... verovatno zato sto je fajl ASC a _nije_ ACS

http://www.nbs.yu/serbian/kursevi/ascii/Kl060425.asc

;)

Poz,
Sale
[ SmilieBG @ 26.04.2006. 20:04 ] @
predlazem, da zapalis jednu, popijes kafu, malo prosetas... najozbiljnije ;)
Znam u kakvom sam ja stanju, kad postavim pitanje, a ispostavise se da je sintaksicka greska ;)

Poz,
Sale
[ mnicic @ 26.04.2006. 20:10 ] @
oups! sorry! to je moja greska u prebacivanju koda ovde na forum. u programu je ispravno napisano "ASC". jos jedom, sorry...

da li neko ima ideju gde je problem?
[ Gojko Vujovic @ 26.04.2006. 20:34 ] @
Za dovlačenje fajla probaj:

Code:
$l = file("http://www.nbs.yu/serbian/kursevi/ascii/Kl" . gmdate("ymd") . ".asc");


Za parsing vidi php.net/explode ili ako nije dovoljan, preg_match.
[ SmilieBG @ 26.04.2006. 20:45 ] @
ja testirao i meni radi :S

http://aleksandar.skodric.eu/testes.php

code:

http://aleksandar.skodric.eu/testes.phps

Poz,
Sale
[ Aleksandar Marković @ 26.04.2006. 21:57 ] @
Kursna lista i vremenska prognoza
[ mnicic @ 27.04.2006. 10:42 ] @
@smilieBG
pogledao ja, ne radi ni kod tebe...
[ Gojko Vujovic @ 27.04.2006. 11:18 ] @
Prvo proveri da li generisani url stvarno postoji (otvori ga u browseru), pa onda daj dijagnozu da li skripta radi ili ne. Konkretno, juče je njegova skripta radila, danas ne radi jer ne postoji kursna lista sa tim imenom.

I mogu li da pitam zašto voliš fopen i ručno brljanje po strukturi fajla, ako postoje file i explode funkcije koje sam pomenuo?
[ mnicic @ 27.04.2006. 13:57 ] @
@gojko vujovic
da, da - kasnije sam video da ne postoji sa tim imenom. ok je...

koristio sam i ja explode funkciju, samo mi je bio problem fopen. ali resio sam sa file() - ne znam zasto mi je prvo fopen palo na pamet. hvala svima!

[Ovu poruku je menjao mnicic dana 27.04.2006. u 15:04 GMT+1]
[ Aleksandar Marković @ 27.04.2006. 16:11 ] @
uvek je interesantno videti razlicita resenja ...tip za ubuduce ...postuj svoje finalno resenje, ako si vec postavio pitanje i dobio neke odgovore...daj pomoc onima kojima ce to pitanje tek postati potrebno

[Ovu poruku je menjao Aleksandar Marković dana 27.04.2006. u 18:16 GMT+1]
[ mnicic @ 27.04.2006. 22:31 ] @
naravno, resenje cu postaviti. samo trebam jos malo da ga doradim kako drugi ne bi imali problema - da im olaksam posao.
[ pyc @ 11.08.2006. 08:10 ] @
Od 08/08/2006 menjala se logika oko kursne liste NBS, tako da se sada na adresi http://www.nbs.yu/serbian/kursevi/ascii/ (ovaj direktorijum ne moze da se vidi, ali je format fajla bio Klyymmdd.asc, vise ne mogu naci kursne liste. Da li sada postoji neki direktorijum odakle bi mogla da se povuce kursna lista, a da to nije preko forumulara sa weba...?

Poslednji datum za koji postoji lista u tom diru je Kl060810.asc
[ Gojko Vujovic @ 11.08.2006. 09:04 ] @
http://www.nbs.yu/data/page.ph...30&SUBMIT=Prikaži
[ papago @ 27.12.2006. 01:02 ] @
Da li je neko uspeo da resi ovaj problem sa citanjem fajlova sa nbs servera, posto sada vise nista ne funkcionise....
[ Boris Stevanovic @ 27.12.2006. 06:51 ] @
A zasto ti to treba ?
[ pyc @ 27.12.2006. 08:26 ] @
Izgleda da nekome u NBS smeta automatsko preuzimanje kursne liste, pa su koliko vidim juče smislili neku novu smicalicu... Nije lako provaliti šta je, ali radim na tome... Izgleda da su počeli da proveravaju referera, pa onda može da se učita samo iz browsera... Radim na rešenju, objaviću ako rešim.
[ pyc @ 27.12.2006. 10:36 ] @
Pokusao sam kompletno da rekontruisem POST zahtev koji ide ka serveru NBS da bi se u odgovoru dobila kursna lista i trebalo bi da header tog zahteva izgleda ovako:

Code:

POST http://www.nbs.yu/data/page.ph...s_page=kursnaLista.jsp?lang=sr HTTP/1.1
Host: www.nbs.yu
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://www.nbs.yu/data/page.ph...p;nbs_page=kl_form.jsp?lang=sr
Content-Type: application/x-www-form-urlencoded
Content-Length: 52

datum=27.12.2006&eksport=ascii&clientIP=80.93.235.82



Do sada sam varijable datum, eksport i clientIP slao preko GET-a i to je radilo... juce je odjednom prestalo da radi, a ja sam se bacio na zadatak da PHP te stvari salje preko POST-a. Ovde cu da ostavim kod koji kod mene automatski preuzima kursnu listu, i prvu verziju koja je radila do prekjuce, i drugu verziju sa POST varijablama koja mi i dalje ne radi. Izgleda da je problem u tome sto file_get_contents() funkcija, ne moze da kao argument prihvati resource koji napravi funkcija stream_context_create()... bilo kako bilo, trenutno sam jako zauzet da bi kopao danima(?) :) zasto sve ovo ne radi, ako neko moze da preuzme stafetu, bio bih zahvalan, a sada i stari i novi kod:

stari:
Code:

<?
$filename = 'http://www.nbs.yu/data/page.ph...naLista.jsp?lang=sr&datum='.date('d').'.'.date('m').'.'.date('Y').'&vrsta=1&eksport=ascii&clientIP=208.68.210.233&SUBMIT=Prikaži';
$filelocal = 'kliste/Kl'.date('y').date('m').date('d').'.asc';

if(!file_exists($filelocal)) {  //ako vec nije uspeo da skine u prethodnom pokusaju
    $str = file_get_contents($filename);
    //if (date('D') != 'Sat' && date('D') != 'Sun' && strlen($str) > 500) {
    if (date('D') != 'Sat' && date('D') != 'Sun') {
        $fp = fopen($filelocal,"w");
        fwrite($fp,$str);
        fclose($fp);
    } 
    else {  //pravi se kopija fajla na disku za danas a od juce...  TREBA DA SE POVEDE RACUNA AKO SE od 01 oduzima 1....
        $d = date('j')-1;
        if ($d < 10) $d = '0'.$d;
        $m = date('m');
        $y = date('y');
        if(date('j') == '1') {
            switch(date('m')) {
                case '01': $d = '31'; $m = '12'; $y = date('Y') - 1; $y = substr($y,2,2); break;
                case '02': $d = '31'; $m = '01'; break;
                case '03': 
                            //AKO JE PRESTUPNA GODINA.
                            if (mcal_is_leap_year(date('Y')) == 0) $d = '28'; else $d = '29'; 
                            $m = '02'; break;

                case '04': $d = '31'; $m = '03'; break;
                case '05': $d = '30'; $m = '04'; break;
                case '06': $d = '31'; $m = '05'; break;
                case '07': $d = '30'; $m = '06'; break;
                case '08': $d = '31'; $m = '07'; break;
                case '09': $d = '31'; $m = '08'; break;
                case '10': $d = '30'; $m = '09'; break;
                case '11': $d = '31'; $m = '10'; break;
                case '12': $d = '30'; $m = '11'; break;
            }
        }
        $fileyesterday = 'liste/Kl'.$y.$m.$d.'.asc';
        copy($fileyesterday,$filelocal);
    }
}    
?> 


novi:
Code:

<?
error_reporting(E_ALL);

function http_build_query($a,$b='',$c=0){
    if (!is_array($a)) return false;
    foreach ((array)$a as $k=>$v){
    if ($c) $k=$b."[".$k."]"; elseif (is_int($k)) $k=$b.$k;
    if (is_array($v)||is_object($v)) {$r[]=http_build_query($v,$k,1);continue;}
    $r[]=$k."=".urlencode($v);
    }
    return implode("&",$r);
}
$filename = 'http://www.nbs.yu/data/page.ph...s_page=kursnaLista.jsp?lang=sr';

$danas = date('d').'.'.date('m').'.'.date('Y');

$postdata = http_build_query(
   array(
       'datum' => $danas,
       'eksport' => 'ascii',
       'clientIP' => '208.68.210.233'
   )
);

$opts = array('http' =>
   array(
       'method'  => 'POST',
       'header'  =>    "Content-type: application/x-www-form-urlencoded\r\n" .
                       "Host: www.nbs.yu\r\n" .
                       "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1\r\n" .
                       "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n" .
                       "Accept-Language: en-us,en;q=0.5\r\n" .
                       "Referer: http://www.nbs.yu/data/page.ph...p;nbs_page=kl_form.jsp?lang=sr\r\n" .
                       "Content-Length: 54",
       'content' => $postdata
   )
);

/*
if (function_exists('stream_context_create')) {
   echo "available.<br />\n";
} else {
   echo "not available.<br />\n";
}
*/

$context  = stream_context_create($opts);
$filelocal = 'liste/Kl'.date('y').date('m').date('d').'.asc';

echo "danas: " . $danas."<br>";
echo "postdata: " . $postdata."<br>";
print_r($opts);

if(!file_exists($filelocal)) {  //ako vec nije uspeo da skine u prethodnom pokusaju
    echo "da li je ovo normalno";    
    $str = file_get_contents($filename, false, $context);
    echo $str;
    //if (date('D') != 'Sat' && date('D') != 'Sun' && strlen($str) > 500) {
    if (date('D') != 'Sat' && date('D') != 'Sun') {
        $fp = fopen($filelocal,"w");
        fwrite($fp,$str);
        fclose($fp);
    }
    else {  //pravi se kopija fajla na disku za danas a od juce...  TREBA DA SE POVEDE RACUNA AKO SE od 01 oduzima 1....
        $d = date('j')-1;
        if ($d < 10) $d = '0'.$d;
        $m = date('m');
        $y = date('y');
        if(date('j') == '1') {
            switch(date('m')) {
                case '01': $d = '31'; $m = '12'; $y = date('Y') - 1; $y = substr($y,2,2); break;
                case '02': $d = '31'; $m = '01'; break;
                case '03':
                            //AKO JE PRESTUPNA GODINA.
                            if (mcal_is_leap_year(date('Y')) == 0) $d = '28'; else $d = '29';
                            $m = '02'; break;

                case '04': $d = '31'; $m = '03'; break;
                case '05': $d = '30'; $m = '04'; break;
                case '06': $d = '31'; $m = '05'; break;
                case '07': $d = '30'; $m = '06'; break;
                case '08': $d = '31'; $m = '07'; break;
                case '09': $d = '31'; $m = '08'; break;
                case '10': $d = '30'; $m = '09'; break;
                case '11': $d = '31'; $m = '10'; break;
                case '12': $d = '30'; $m = '11'; break;
            }
        }
        $fileyesterday = 'liste/Kl'.$y.$m.$d.'.asc';
        copy($fileyesterday,$filelocal);
    }
}
?>
[ papago @ 27.12.2006. 13:58 ] @
mnogo ti hvala pyc...odmah cu veceras da isprobam da li funkcionise..

veliki pozdrav
[ agvozden @ 28.12.2006. 00:49 ] @
Malo jednostavniji nacin za pristup kursnoj listi nbs, bez koriscenja POST-a:

Code:

function get_from_url($url){
    $opts = array(
        'http' => array(
            'method' => "GET",
            'header' => 
            "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1\r\n" .
            "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n" .
            "Accept-Language: en-us,en;q=0.5\r\n" 
        )
    );
    $context = stream_context_create($opts);
    $handle = @fopen($url, "rb", false, $context); 
    $contents = '';
    if ($handle){
        while (!feof($handle)) {
            $contents .= fread($handle, 8192);
        }
        fclose($handle);
    } else return false;
    return $contents;
}


jednostavan poziv funkcije

Code:

$source = "http://www.nbs.yu/serbian/kursevi/ascii/Kl".date("ymd", time()).".asc";
$contents = get_from_url($source);


Uz kombinaciju sa kesiranjem, odredjivanjem zadnjeg datuma i parsovanjem ascii-ja moze se dobiti upotrebljiv skript.
Ovo obicno stavljam kao plug-in kroz iframe: http://www.bgsvetionik.com/plugins/kursna_lista/kursna_lista.php
[ agvozden @ 28.12.2006. 09:08 ] @
Jutros su opet promenili ...
ne moze se uzeti direktno, ipak mora POST
[ papago @ 28.12.2006. 10:11 ] @
Mozda ce vam ovo pomoci...

napisao sam adminu mejl i on(a) mi je je odgovorio(la) sledece:
Nadam se da ce vam ovo pomoci. Mozda ce se naci i neki PHP genije koji ce da napise funkciju za parsovanje ovoga XML konstrukta.



Postovanje,

U attachmentu vam prosledjujemo uputsvo koriscenja web servisa za kursne
liste.

Isto ce danas biti objavljeno na sajtu.

Pozdrav,

Web urednistvo NBS.




Narodna banka Srbije
Informaciona Tehnologija
Odeljenje za aplikativnu podršku
Uputstvo za korišćenje web servisa trenutno važeće kursne liste NBS
Lokacija service-a:
http://webservices.nbs.yu/Comm.../TempExchangeRatesService.asmx
WSDL service-a se nalazi na adresi:
http://webservices.nbs.yu/Comm...ExchangeRatesService.asmx?WSDL
--------------------------------------------------------------------
Metode servisa su sledece:
DataSet GetCurrentExchangeRates(decimal nExchangeRatesTypeID) -- preporuceni
nacin koriscenja za klijente koji ce konzumirati servis iz .NET aplikacija
string GetCurrentExchangeRatesXML(decimal nExchangeRatesTypeID) -- preporuceni
nacin koriscenja za klijente koji ce konzumirati servis iz drugih tehnologija ,pri tome su validne vrednosti za parametar nExchangeRatesTypeID {1, 2, 3}
1 – kurs za devize
2 – kurs za efektivu
3 – srednji kurs
---------------------------------------------------------------------
Ostali parametri sistema:
U zaglavlju zahteva (AuthenticationHeader) moraju se proslediti sledeci parametri:
UserName, Password, LicenceID
Prametru UserName treba proslediti vrednost TempTest,
Parametru Password treba proslediti vrednost TempTestPassword
Parametru LicenceID treba proslediti vrednost 0
Ukoliko postoji neko pitanje mozete ga uputiti na e-mail webservices@nbs.yu
[ milivoye @ 20.06.2007. 11:26 ] @
Da li bi mogao da okacis verziju koja vraca XML tako da mogu da formatiram output onako kako mi je potrabno?
[ zidane_zizu @ 01.10.2007. 15:59 ] @
Code:

<?
require_once('../lib/nusoap.php');
$soapaction = "http://www.nbs.rs/TempExchange...ervice/GetCurrentExchangeRates";

$wsdl = "http://webservices.nbs.yu/Comm...ExchangeRatesService.asmx?wsdl";
$namespace = "http://www.nbs.rs/TempExchangeRatesService";
$client = new soapclientw($wsdl);

$mysoapmsg = $client->serializeEnvelope('<GetCurrentExchangeRates xmlns="http://www.nbs.rs/TempExchangeRatesService">
      <nExchangeRatesListTypeID>1</nExchangeRatesListTypeID>
    </GetCurrentExchangeRates>','<AuthenticationHeader xmlns="http://www.nbs.rs/TempExchangeRatesService">
      <UserName>TempTest</UserName>
      <Password>TempTestPassword</Password>
      <LicenceID>0</LicenceID>
    </AuthenticationHeader>',array(),'document', 'literal');

$response = $client->send($mysoapmsg, $soapaction);

if ($client->fault) {
echo '<h3>Fault</h3><pre>';
print_r($response);
echo '</pre>';
}
echo $client->response;
?>


Ovo ce ti biti dovoljno da udjes u fazon. Potrebna ti je biblioteka NuSoap da mi mogao da koristis funkcije WS-a u 4-ci. Radi i u 5ci mada onda moras da prebacis ime klase SoapClient u npr SoapClientW kao sto sam ja to uradio...

Fora je da se mora rucno praviti Envelope deo Soap poruke jer .NET pravi problem kada se poziv ne formira na odgovarajuci nacin. Ako me ne bude mrzelo detaljnije cu ceo postupak objasniti na mom blogu > www.insaned.net.

Pozdrav!
[ sale83 @ 03.10.2007. 07:56 ] @
Citat:
milivoye: Da li bi mogao da okacis verziju koja vraca XML tako da mogu da formatiram output onako kako mi je potrabno?


Evo kako ja preuzimam kursnu listu u XML-u od NBS :

Code:

function getXML(){
        ini_set('user_agent', 'Mozilla Firefox');
        $date=date("d.m.Y");
        $url='http://www.nbs.yu/internet/latinica/scripts/kl.html?datum=';
        $url.=$date.'&broj=br.&godina='.date("Y").'&vrsta=1&eksport=xml';
        $xml = file_get_contents($url);
        preg_match("@(<kursna_lista>)(.*?)(</kursna_lista>)@si", $xml, $matches); 
        $ret = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
        $ret .= $matches[0];
        return $ret;
}


Poz
sale

[ Dr NIK @ 17.10.2007. 17:12 ] @
Evo moje verzije programa;

Code:

<?php
require_once('nusoap.php');

$wsdl = "http://webservices.nbs.yu/Comm...ExchangeRatesService.asmx?WSDL";
$namespace = "http://www.nbs.rs/TempExchangeRatesService";
$client = new soap_client($wsdl, true);

$header = 
'<AuthenticationHeader xmlns="http://www.nbs.rs/TempExchangeRatesService">
      <UserName>TempTest</UserName>
      <Password>TempTestPassword</Password>
      <LicenceID>0</LicenceID>
 </AuthenticationHeader>';

$client->setHeaders($header);

$parameters_array = array('parameters' => array(
                                            'nExchangeRatesListTypeID'=>1 // kurs za devize
                                            //'nExchangeRatesListTypeID'=>2 // kurs za efektivu
                                            //'nExchangeRatesListTypeID'=>3 //srednji kurs
                                            )
                        );

$xml_result_array =  $client->call('GetCurrentExchangeRatesXML', $parameters_array) ;
$xml_result = $xml_result_array['GetCurrentExchangeRatesXMLResult'];
echo $xml_result;

/*
 a moze i druga funkcija iz WS-a
$xml_result_array =  $client->call('GetCurrentExchangeRates', $parameters_array) ;
$xml_result = $xml_result_array['GetCurrentExchangeRatesResult'];
echo $xml_result;
*/
?>

POZ
[ Cybernoid II @ 13.11.2007. 14:49 ] @
Citat:
.NET pravi problem kada se poziv ne formira na odgovarajuci nacin

Istina...
Evo i moj mali doprinos za one koji koriste SOAP extension i klase
Code:

class AuthenticationHeader{
    function __construct() {
        $this->UserName='TempTest';
        $this->Password='TempTestPassword';
        $this->LicenceID=0;
    }
    public $UserName;
    public $Password;
    public $LicenceID;
}

class NBSSoapClient extends SoapClient {

    function __construct($wsdl,array $options){
        parent::__construct($wsdl,$options);    
        $auth=new AuthenticationHeader;
        $authvalues = new SoapVar($auth, SOAP_ENC_OBJECT);
        $header =  new SoapHeader('http://www.nbs.rs/TempExchangeRatesService','AuthenticationHeader', $authvalues, false);
        $this->__setSoapHeaders(array($header));
    }

    function __doRequest($request, $location, $action, $version) {
        $request=mb_ereg_replace('ns1:','',$request);
        $request=mb_ereg_replace(':ns1','',$request);
        $request=mb_ereg_replace('SOAP-ENV','soap',$request);
        $request=mb_ereg_replace('Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"','Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"',$request);
    return parent::__doRequest($request, $location, $action, $version);
    }
}

class GetCurrentExchangeRatesXML{
    function __construct($ID=3) {
        $this->nExchangeRatesListTypeID=$ID;
    }
    public $nExchangeRatesListTypeID;
}



Koristi se na sledeći način

Code:

$NBSclient = new NBSSoapClient("http://webservices.nbs.yu/Comm...ExchangeRatesService.asmx?WSDL",array(
            'soap_version' => SOAP_1_1,
            'style' => SOAP_DOCUMENT,
            'encoding' => 'utf-8',
            'use' => SOAP_LITERAL
        ));

$parameters= new GetCurrentExchangeRatesXML(3);
$response=$NBSclient->GetCurrentExchangeRatesXML($parameters);


Naravno ovo može da se još malo ulepša...

[Ovu poruku je menjao Cybernoid II dana 13.11.2007. u 16:00 GMT+1]
[ makki @ 28.07.2009. 13:51 ] @
Evo moram da podignem ovu temu :)

Kako pristupiti servisu NBS kada vise ne vazi test period, potrebni su pravi parametri za pristup koje mogu da dobiju iskljucivo pravna lica?

da li postoji neki nacin da preuzmem vazecu kl NBS sobirom da sam fizicko lice?
[ Nemanja Avramović @ 28.07.2009. 14:00 ] @
(Dok ti ne odgovori neko ko se zaista bavio time... )
Evo malo Googlah i pronađoh ovo:

Code:
http://www.nbs.rs/internet/latinica/scripts/kl.html?datum=DD.MM.YYYY&vrsta=1&eksport=EXP


EXP može biti xml, csv, html (lowercase)

Mada opet izgleda da moraš da čupaš xml/csv iz HTML-a :/

Takođe, možda možeš da se poslužiš ovim: http://kursna-lista.info/rss.xml

Kontaktirao sam Nenada (vlasnik sajta kursna-lista.info) da se javi na ovoj temi pa možda on bude znao kako da ti pomogne, jer on vuče kurs sa sajta NBS.

Pozdrav,
Nemanja
[ makki @ 28.07.2009. 14:32 ] @

Nemanja hvala ti! :)

Po svemu sudeci cu morati da se bavim parsiranjem.. al ajde da sacekam jos malo,
mozda se javi neko sa jos nekom idejom!

pozzz
[ 1r0nM4n @ 28.07.2009. 19:01 ] @
Pozdrav Marija. Na onoj drugoj temi si spomenula da ti je glupo da parsiraš neku stranu na netu. Hteo bih da te pitam zašto tako misliš? :) Sasvim je normalno da se to radi ako ti trebaju neki podaci koji se nalaze na toj strani a ne možeš na drugi način da dođeš do njih.

Ja planiram da napravim web servis (verovatno SOAP) za kursnu listu ali to tek kad završim novu verziju sajta (zbog drugih obaveza ne znam kad će to biti). Do tada ili ćeš morati da parsiraš sajt NBS-a ili neki drugi sajt koji pruža te informacije. Ne znam koliko dobro stojiš sa parsiranjem ali tu smo da pomognemo.

Možda ti od pomoći bude bila table2arr klasa...


Edit:

Da dodam da je ovde na forumu ranije bilo primera parsiranja sajta NBS-a pa pokušaj da nađeš to koristeći pretragu. Možda čak ima nešto i u ovoj temi (nisam je pročitao celu...).
[ agvozden @ 28.07.2009. 21:24 ] @
Koristim i Wsdl (temp user) i parsiranje, ali nisam jos imao prolema sa preuzimanjem...

http://www.google.com/ig/adde?...om/plugins/kursna_lista/gg.xml
[ makki @ 29.07.2009. 10:50 ] @
pomenula sam da mi je bezveze da parsiram neku web stranu, jer onda automatski zavisim od te strane, ako je izmene, ja moram da menjam svoj kod.. mnogo bi bila bolja varijanta da preuzimam kl u nekom formatu bilo da je xml ili neki drugi, pa da odatle izvlacim podatke, nego da se vezujem za tu neku stranu.. ako je to jedino resenje onda cu morati tako..

sto se tice parsiranja, pojma nemam kako sa tim stojim u php-u, jos se nisam time bavila (jesam u delfiju), videcu kako ce mi ici..

hvala na ponudjenoj pomoci svakako, ako bude trebalo obraticu se!


agvozden, bas me cudi kako ti prolazi wdsl (temp user) .. meni je to prestalo da radi onog momenta kad je prosao test period... probacu ponovo da ukljucim, ali sumnjam da ce mi proraditi...

pozzz
[ 1r0nM4n @ 29.07.2009. 15:45 ] @
Citat:
makki: pomenula sam da mi je bezveze da parsiram neku web stranu, jer onda automatski zavisim od te strane, ako je izmene, ja moram da menjam svoj kod..


Da, ne može drugačije. Na svom sajtu imam cron job koji se izvršava na svaka 4 sata i koji proverava da li je izmenjen(a) sajt/stranica NBS-a. Ako se to desi, a nadam se da neće nikad ili barem ne u nekom nezgodnom trenutku , automatski ću dobiti SMS tako da ću imati dovoljno vremena da izmenim kod do sledećeg update-a baze.
[ 1r0nM4n @ 04.08.2009. 23:05 ] @
Evo ako neko hoće da parsira XML:

http://kursna-lista.info/dev/xml.php (RSD, jednostavno, podaci Narodne banke Srbije)
http://kursna-lista.info/dev/xml_all.php (RSD, komplikovano)
http://kursna-lista.info/dev/rates2.php?code=rsd&xml (code može da se menja)
http://kursna-lista.info/dev/rates2.php?code=rsd&rss (RSS)


Napomena: Preporučujem svakome ko želi da koristi ove resurse da me obavesti email-om na nenad.vasic <at> irondev.net kako bi na vreme dobio obaveštenje u slučaju izmena ovih URL-ova. Neću vas spamovati. Časna programerska.
[ makki @ 05.08.2009. 13:06 ] @
Samo da javim da sam sredila kod, problem je bio do mene, u svakom slucaju sada mi radi to kako treba..
I dalje koristim testni user za servis Narodne banke i funkcionise!

Hvala svima na ponudjenoj pomoci i odgovorima

Pozzz
Marija.
[ gargoyle @ 16.09.2009. 18:16 ] @
makki jel možeš da staviš ovde kod koji koristiš? Hvala.
[ nikolaamp @ 30.12.2009. 20:46 ] @
Zdravo svima,


Zeleo sam da pitam da li je neko mozda implementirao ovaj servis nakon promena u septembru koje je NBS uradila? Ja sam koristio prosli uz pomoc nusoap PHP biblioteke, ali se sa novim nikako nesto ne snalazim. Bilo bi od velike pomoci ukoliko bi neko postovao kod koji je koristio ili makar deo koda.


Kod koji sam ja koristio je:

$soapaction = "http://communicationoffice.nbs.rs/GetCurrentExchangeRate";
$wsdl = "https://webservices.nbs.rs/Com...tExchangeRateService.asmx?WSDL";
$namespace = "http://communicationoffice.nbs.rs";

//kreiranje SOAP klijenta, tj. objekta preko kog ce se komunicirati
$client = new soapclient($wsdl);

//kreiranje poruke, XML-a, koja ce biti poslata Web servisu NBS-a
$mysoapmsg = $client->serializeEnvelope('<GetCurrentExchangeRate xmlns="http://communicationoffice.nbs.rs"><exchangeRateListTypeID>1</exchangeRateListTypeID></GetCurrentExchangeRate>
','<AuthenticationHeader xmlns="http://communicationoffice.nbs.rs"><UserName>**********</UserName><Password>**********</Password><LicenceID>**********</LicenceID></AuthenticationHeader>',array(),'document', 'literal');

//prihvatanje poruke od WS-a
$response = $client->send($mysoapmsg, $soapaction);


Medjutim, dobijam gresku:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://webservices.nbs.rs/Com...tExchangeRateService.asmx?WSDL' : Start tag expected, '<' not found...


Hvala unapred na pomoci!

Pozdrav,
Nikola

[Ovu poruku je menjao nikolaamp dana 30.12.2009. u 22:04 GMT+1]

[Ovu poruku je menjao nikolaamp dana 30.12.2009. u 22:04 GMT+1]
[ zmil @ 04.08.2010. 08:53 ] @
kazite mi gde gresim
Hvala unapred
Code:
$wsdl = "https://webservices.nbs.rs/Com.../ExchangeRateService.asmx?WSDL";

 $soapClient = new SoapClient($wsdl);
$sh_param = array('UserName'    =>    'sajt',
                    'Password'    =>    'ime',
                    'LicenceID'    =>    '0'
                    );
        $headers = new SoapHeader('http://www.nbs.rs/TempExchangeRatesService','AuthenticationHeader', $sh_param); 

 $soapClient->__setSoapHeaders(array($headers)); 
 $ap_param =array( 'nexchangeRateListTypeID'=>1 // kurs za devize
                                            //'nExchangeRatesListTypeID'=>2 // kurs za efektivu
                                            //'nExchangeRatesListTypeID'=>3 //srednji kurs
                         
                        );
$info = $soapClient->__call("GetCurrentExchangeRate", array($ap_param)); 
print_r($info);
[ kazil @ 04.08.2010. 09:02 ] @
A greska je...?
[ zmil @ 04.08.2010. 09:20 ] @
ovo

Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object hasn't 'exchangeRateListTypeID' property in C:\lamp\htdocs\navidiku\rssread\ssKursp12.php:22 Stack trace: #0 C:\lamp\htdocs\navidiku\rssread\ssKursp12.php(22): SoapClient->__call('GetCurrentExcha...', Array) #1 {main} thrown in C:\lamp\htdocs\navidiku\rssread\ssKursp12.php on line 22
[ Predrag Supurovic @ 12.08.2010. 15:42 ] @
Da li je neko uspeo da natera PHP da procita kursnu listu otkako je NBS promenila API?




[ zmil @ 12.08.2010. 18:27 ] @
uspeo sam i radi
Code:
require_once('lib/nusoap.php');
$soapaction = "http://communicationoffice.nbs.rs/GetCurrentExchangeRate";
$wsdl = "https://webservices.nbs.rs/Com.../ExchangeRateService.asmx?WSDL";
$namespace = "http://communicationoffice.nbs.rs";

//kreiranje SOAP klijenta, tj. objekta preko kog ce se komunicirati
$client = new nusoap_client($wsdl);

//kreiranje poruke, XML-a, koja ce biti poslata Web servisu NBS-a
$mysoapmsg = $client->serializeEnvelope('<GetCurrentExchangeRate xmlns="http://communicationoffice.nbs.rs"><exchangeRateListTypeID>1</exchangeRateListTypeID></GetCurrentExchangeRate>
','<AuthenticationHeader xmlns="http://communicationoffice.nbs.rs"><UserName></UserName><Password></Password><LicenceID></LicenceID></AuthenticationHeader>',array(),'document', 'literal');

//prihvatanje poruke od WS-a
$response = $client->send($mysoapmsg, $soapaction);
 

$_f="skurs.php";
    $buf=sprintf("<?php\nclass Kurs{  \nvar \$NOVAC=%s;\nfunction VratiKurs(){return \$this->NOVAC;}\n  \n}\n?>",var_export($response['GetCurrentExchangeRateResult']['diffgram']['ExchangeRateDataSet'],1));
    $fp=fopen($_f,'ab');
    if($fp&&flock($fp,LOCK_EX)){ftruncate($fp,0);fseek($fp,0);fwrite($fp,$buf);fflush($fp);fclose($fp);}else exit ();
    

[ Predrag Supurovic @ 13.08.2010. 11:03 ] @
Kod mene ovaj tvoj kod ne radi. Na poziv $client->send() soap prijavljuej gresku:

HTTP Error: Unsupported HTTP response status 400 Bad Request (soapclient->response has contents of the response)


Stavio sam potpuno isti kod koji si ovde dao, samo sam upisao username, pass i licenceID...


Je l' ovako uvek kad se nesto radi sa SOAP ili je to ovako bagljavo samo sa ovim serverom NBS?
[ zmil @ 13.08.2010. 15:08 ] @
Pada mi na pamet url prema servisu
iskreno kod mene radi 100%
$wsdl = "https://webservices.nbs.rs/Com.../ExchangeRateService.asmx?WSDL";
[ kelja @ 13.08.2010. 15:16 ] @
Izvinite, da li vas zanima ovo:

http://www.nbs.rs/export/internet/latinica/scripts/kl_devize.html

najcesce valute, ili bas moraju da budu sve?
[ simone85 @ 15.08.2010. 20:48 ] @
Probao sam ovaj tvoj kod i radi kod mene. Ucitava bez problema sve valute.
[ stopet @ 17.08.2010. 21:44 ] @
Da li je neko resio problem sa novim pristupom podacima kursne liste...molim ako neko jeste da mi pusti porukom kod..hvala...
[ Bojan Kopanja @ 19.08.2010. 10:17 ] @
Mozes jednostavno da vuces kurs sa RSS-a recimo sa ovog sajta: http://www.kursna-lista.info/rss.xml

Oni uzimaju od NBS-a kurs tako da sve sto trebas da uradis jeste da prikazes rezultat rss feeda na svom sajtu :).
[ cubrovic @ 25.08.2010. 10:35 ] @

Jel skida neko kursnu listu za datum ili samo tekucu kursnu listu.

GetCurrentExchangeRate mi radi kako treba

dok

GetExchangeRateByDate vraca gresku u ulaznim parametrima.
Iz dokumentacije se vidi samo da za datum ocekuje string od 10 karaktera.
Probao sam "08.08.2010" i "08/08/2010" i bece. Vraca "Greska u ulaznim podacima".

Jel koristi neko neke od tih datumskih metoda i na koji nacin?
Sve se bojim da mozda likovi nisu ni implementirali sve metode pogotovo sto svugde pisu kako imaju servis za skidanje tekuce kursne liste a ove za datum ne pominju ;)

[ cubrovic @ 25.08.2010. 12:57 ] @
Dopuna. Kontaktirao sam ih na mail i datum mora biti u obliku yyyyMMdd.
Radi sa tim formatom. Za slucaj da nekom zatreba...
[ Predrag Supurovic @ 25.08.2010. 19:14 ] @
Ovih dana sam se bavio preuzimanjem kursne liste i prilicno me je namucilo. Dokumentacije je dosta stura, ali uz nesto kopanja i par hintova podrske iz NBS uspelo mi je da zavrsim stvar.

Objasnjenje i primer koji radi imate na PHP, nusoap i veb servis za kursnu listu NBS
[ axx420 @ 31.08.2010. 12:04 ] @
Pozdrav svima!

Ja sam kursnu listu do sada skidao sa linkom:

http://www.nbs.rs/internet/lat...0.&vrsta=1&eksport=xml

Dobijem XML i iz njega izvučem ono što mi treba.
Sada to više ne radi.

Posle dosta čitanja kodova, eksperimentisanja, traženja i pokušavanja radi mi samo:

http://www.nbs.rs/kursnaListaM...r=&listtype=1&lang=lat

i treba da se parsira HTML što mi je potpuno besmisleno.
Varijantu sa XML nisam našao. Može sa:

http://www.nbs.rs/export/internet/cirilica/scripts/ondate.html

pa pod prikaz izaberem xml ali da sam hteo da klikćem mogao sam i preko www.nbs.rs.
Nije mi jasno zašto su menjali ono što radi i zašto preuzimanje kursne liste nije dokumentovano.

Ne koristim php, ne poznajem SOAP i WDSL, kursna lista NBS bi trebala biti javna informacija, dostupna svima, čemu tolika mistifikacija?

Ima li neko neki direktan kontakt u NBS pa da postavim par pitanja?
[ agvozden @ 31.08.2010. 13:44 ] @
Pozeljno je da radis sa wdsl jer ce ti to omoguciti koliko toliku permanentnost.

Ukoliko parsiras html, to ti nece dugo trajati, jer oni stalno menjaju nesto.

Problem sa wdsl je sto moras da to radis preko firme (potrebno je da se registrujes da bi dobio podatke)

Resenje moze biti koriscenje servisa onih koji vec preuzimaju podatke.

evo ti kursna lista jedne menjacnice:
http://www.bgsvetionik.com/plugins/kursna_lista/kursna_lista.xml

ili

http://www.kursna-lista.info/rss.xml
[ 1r0nM4n @ 31.08.2010. 14:08 ] @
Kao što sam već spomenuo na prethodnoj strani, ovi resursi mogu slobodno da se koriste:


http://kursna-lista.info/dev/xml.php (XML, RSD, jednostavno, podaci Narodne banke Srbije)
http://kursna-lista.info/dev/xml_all.php (XML, RSD, "komplikovano")
http://kursna-lista.info/dev/rates2.php?code=rsd&xml (XML, code može da se menja)
http://kursna-lista.info/dev/rates2.php?code=rsd&rss (RSS, code može da se menja)


Uskoro bih trebao da završim kompletno novi sajt sa još nekim novim ("kul") stvarima tako da preporučujem registraciju na sajtu kako bi bili obavešteni. Ili se jednostavno javite na nenad.vasic at irondev.net pa ćete dobiti obaveštenje.


Pozdrav


Edit:

Pre nekog vremena mi je neko poslao mail da u prvom XML-u nije dobra vrednost kurseva za HUF i JPY. Vrednost je dobra nego paritet tih valuta je 100 pa treba samo da se pomnoži.

[Ovu poruku je menjao 1r0nM4n dana 31.08.2010. u 15:19 GMT+1]
[ axx420 @ 31.08.2010. 16:21 ] @
Hvala Aleksandru i Nenadu,

oba navedena rešenja su više nego dobra - baš onako kako bi to trebao da ima i zvaničan sajt NBS.

Nenade, zanima me da li je na isti način moguće dobiti kursnu listu za neki prethodni datum?
Nešto poput: http://kursna-lista.info/dev/xml.php?datum=10.08.2010 ?

Evo kako su to uradili Hrvati:

http://www.hnb.hr/tecajn/h100810.htm

prosto i jednostavno.
[ 1r0nM4n @ 31.08.2010. 17:07 ] @


Reload Ali to je već malo previše informacija sa moje strane u tako slobodnom obliku... Ostaviću ga tako da može da se koristi dok ne završim novu verziju sajta a posle ću da vidim... Opet napominjem da me obavesti svako ko koristi ovo da bi ga na vreme obavestio u slučaju nekih promena...
[ Slobodanp @ 03.11.2016. 17:37 ] @
Mislim da je ovo od pomoći, istorijske stope NBS-a, ovde kursna lista nbs
[ Nemanja Avramović @ 05.11.2016. 19:42 ] @
Oživeo si temu staru 6 godina...
[ sasho.new @ 18.11.2018. 12:36 ] @
@zmil - tvoj primer odlično radi sa nusoap.php hederom ali ljudi su malo nestrpljivi...

problem sa ovim topic-om je u tome što se posle izvesnog pretvori u diskusiju o sajtu kusrna-lista.info što baš i nije ok jer to nije topic nego kursna lista nbs.
ja sam tvoj primer malo proširio sa php xml parser funkcijama ali ono što ustvari hoću je da napravim da komunikacija radi sa php native soap klasom.
dakle pristup bez nusoap.php hedera sa SoapClient klasom.

nadam se da ću uspeti...
[ valjan @ 19.11.2018. 06:55 ] @
zmil se izgleda obogatio na kursnim razlikama i pre pet godina je prestao da postuje na forum, tako da ne verujem da će ti dati neki savet ili ohrabrenje tvojoj nadi ;-)