XML/RPC.php

Transkript

XML/RPC.php
<?php
// nacteni tridy z PEARu
//require_once 'XML/RPC.php';
require_once 'public_html/XML/RPC.php';
#----------------------------------------------------------------#Třída pro práci s daty na Sreality
#----------------------------------------------------------------class SrealitySession
{
private $client;
private $ID;
private $heslo;
private $sw_klic;
private $fixedPart;
private $sessionId;
private $outputTextBuffer;
public $lastStatus;
public $lastStatusMessage;
public $lastOutput;
public function SrealitySession($ID, $heslo, $sw_klic)
{
$this->client = new XML_RPC_Client('/RPC2', 'http://import.beta.sreality.cz', 0);
//'http://import.beta.sreality.cz'
$this->ID = $ID;
$this->heslo = $heslo;
$this->sw_klic = $sw_klic;
}
public function Init()
{
$params = array(new XML_RPC_Value($this->ID, 'int'));
$msg = new XML_RPC_Message('getHash', $params);
// poslani dotazu na server
$response = $this->client->send($msg);
if ($response->faultCode()) {
//!CALLERR!
$this->lastStatus = -1;
$this->lastStatusMessage = $response->faultString() ;
$this->lastOutput = array();
return FALSE;
}
// nacteni vysledku
$getHash = XML_RPC_decode($response->value());
// je dotaz je OK ?
if ($getHash['status'] == 200) {
$output = $getHash['output'];
$this->fixedPart = $output[0]['sessionId'];
// vytvoreni dotazu pro login a poslani na server
// parametry – sessionId se vypocte z obdrzeneho (vystup getHash), pak hesla a
SW klice
$this->sessionId = $this->fixedPart;
return TRUE;
}
else return FALSE;
$this->lastStatus = $getHash['status'];
$this->lastStatusMessage = $getHash['statusMessage'];
$this->lastOutput = $getHash['output'];
}
#----------------------------------
# Private metody
#---------------------------------private function RenewSessionId()
{
$newVarPart = md5($this->sessionId . md5($this->heslo) . $this->sw_klic);
$this->sessionId = substr($this->fixedPart, 0, 48).$newVarPart;
return new XML_RPC_Value($this->sessionId);
}
private function ParameterizedCall($command, $params)
{
//Add session ID
array_unshift($params, $this->RenewSessionId());
//!CALLBEGIN!
$msg = new XML_RPC_Message($command, $params);
$response = $this->client->send($msg);
// nacteni vysledku
if ($response->faultCode()) {
//!CALLERR!
$this->lastStatus = -1;
$this->lastStatusMessage = $response->faultString() ;
$this->lastOutput = array();
return FALSE;
}
else
{
//!CALLEND!
$decodedresponse = XML_RPC_decode($response->value());
$this->lastStatus = $decodedresponse['status'];
$this->lastStatusMessage = $decodedresponse['statusMessage'];
$this->lastOutput = $decodedresponse['output'];
// pokud je status 200, je to OK
return ($this->lastStatus==200);
}
}
#---------------------------------#Veřejné metody
#---------------------------------public function Login()
{
return ($this->ParameterizedCall("login", array()));
}
public function Logout()
{
return ($this->ParameterizedCall("logout", array()));
}
public function ListAdvert()
{
return ($this->ParameterizedCall("listAdvert", array()));
}
public function ListSeller()
{
return ($this->ParameterizedCall("listSeller", array()));
}
public function ListPhoto($advertId, $advertRkid)
{
return ($this->ParameterizedCall("listPhoto", array(
new XML_RPC_Value($advertId, 'int'),
new XML_RPC_Value($advertRkid, 'string'))));
}
public function ListStat()
{
return ($this->ParameterizedCall("listStat", array(
new XML_RPC_Value(array(0), 'struct'),
new XML_RPC_Value(array(""), 'array'))));
}
public function ListDailyStat($advertId, $advertRkid)
{
return ($this->ParameterizedCall("listDailyStat", array(
new XML_RPC_Value($advertId, 'int'),
new XML_RPC_Value($advertRkid, 'string'))));
}
public function DelPhoto($photoId, $photoRkid)
{
return ($this->ParameterizedCall("delPhoto", array(
new XML_RPC_Value($photoId, 'int'),
new XML_RPC_Value($photoRkid, 'string'))));
}
public function AddAdvert($data)
{
return ($this->ParameterizedCall("addAdvert", array(new XML_RPC_Value($data,
'struct'))));
}
public function DelAdvert($advertId, $advertRkid)
{
return ($this->ParameterizedCall("delAdvert", array(
new XML_RPC_Value($advertId, 'int'),
new XML_RPC_Value($advertRkid, 'string'))));
}
public function DelSeller($sellerId, $sellerRkid)
{
return ($this->ParameterizedCall("delSeller", array(
new XML_RPC_Value($sellerId, 'int'),
new XML_RPC_Value($sellerRkid, 'string'))));
}
public function AddSeller( $sellerRkid, $client_login, $client_name, $contact_gsm)
{
$data=array (
'client_login' => new XML_RPC_Value($client_login, 'string'),
'client_name' => new XML_RPC_Value($client_name, 'string'),
'contact_gsm' => new XML_RPC_Value($contact_gsm, 'string')
);
return ($this->ParameterizedCall("addSeller", array(
new XML_RPC_Value(0, 'int'),
new XML_RPC_Value($sellerRkid, 'string'),
new XML_RPC_Value($data, 'struct')
)));
}
#Upload fotografie
public function AddPhoto($advertId, $advertRkid, $photoRkid, $filename, $main, $alt)
{
if (file_exists($filename))
{
$handle = fopen($filename, "rb");
if($handle==FALSE){
$this->lastStatusMessage = "Chyba při otevírání souboru ".$filename;
return FALSE;
}
else
{
$contents = fread($handle, filesize($filename));
fclose($handle);
if ($contents==FALSE)
{
$this->lastStatusMessage = "Chyba při čtení souboru s fotkou ".$filename;
return FALSE;
}
else {
$data =array(
'data' => new XML_RPC_Value($contents, 'base64'),
'main' => new XML_RPC_Value($main, 'int'),
'alt' => new XML_RPC_Value($alt, 'string'),
'photo_rkid' => new XML_RPC_Value($photoRkid, 'string')
);
return
$this->ParameterizedCall("addPhoto", array(
new XML_RPC_Value($advertId, 'int'),
new XML_RPC_Value($advertRkid, 'string'),
new XML_RPC_Value($data, 'struct')));
}
}
}
else
{
$this->lastStatusMessage = "Soubor s fotkou nebyl nalezen ".$filename;
return FALSE;
}
}
#Smaže komplet všechny inzeráty RK
public function DeleteAllAdverts()
{
if ($this->ListAdvert())
{
$success=TRUE;
$list=$this->lastOutput;
foreach ($list as $o)
{
if (!$this->DelAdvert($o['advert_id'],"")) $success = FALSE;
}
return $success;
}
else
return FALSE;
}
#Smaže komplet všechny makléře RK
public function DeleteAllSellers()
{
if ($this->ListSeller())
{
$success=TRUE;
$list=$this->lastOutput;
foreach ($list as $o)
{
if (!$this->DelSeller($o['seller_id'],"")) $success = FALSE;
}
return $success;
}
else
return FALSE;
}
//Základní třída - publikuje aktivní inzeráty, k nim přidäné fotky a smaže inzeráty,
které se nemají publikovat
public function PublishAllAdsWithPics($DB)
{
$message="";
/*
//listStat
if ($this->ListStat())
{
$message.="Celková návštěvnost: ".$this->lastOutput[0]['total_views'].",
Celkové náklady: ".$this->lastOutput[0]['total_price']."<br /><br />";
}
else
{
$message.="Chyba stavu inzerátů<br />".$this->lastStatusMessage."<br /><br />";
}
*/
$this->ResetTextBuffer();
$ads = $DB->GetAdsToExport();
$allAdsToPublish=array();
if ($this->ListAdvert()) $listOfAds=$this->lastOutput;
else
{
$message.="<b>POZOR:</b> Chyba při načítání seznamu všech publikovaných
inzerátů: ".$this->lastStatusMessage."<br />";
$listOfAds=array();
}
while($row = mysql_fetch_array($ads))
{
$thisAdMessage="";
$advertRkid=$row['advert_rkid'];
array_push($allAdsToPublish, $advertRkid);
$data = array();
$gps_longitude = 0.0;
$gps_latitude = 0.0;
$loc_address="";
for ( $i = 0; $i <count($row)/2; $i+=3)
{
if ($row[$i]!="")
{
//echo $row[$i+1] . "-" . $row[$i] . "-" .$row[$i+2] . "<br />";
if ($row[$i+2]=="int")
$data[$row[$i+1]] = new XML_RPC_Value((int)$row[$i], "int");
else
$data[$row[$i+1]] = new XML_RPC_Value($row[$i], $row[$i+2]);
if ($row[$i+1]=="locality_latitude")
$gps_latitude = (double)$row[$i];
else if ($row[$i+1]=="locality_longitude")
$gps_longitude = (double)$row[$i];
else if ($row[$i+1]=="locality_city")
$loc_address = (string)$row[$i];
}
}
$listStat="";
$listDailyStat="";
$adErr="";
//Spuštění publikace inzerátu
$success=$this->AddAdvert($data);
if (!$success && $this->lastStatus==452 &&
(strlen(strstr($this->lastStatusMessage,"Address not found"))>0 ||
strlen(strstr($this->lastStatusMessage,"locality_city"))>0)) //Address not
found error nebo adresa nevyplěná
{
//Reverse geocoding Google
if ($gps_longitude>0 && $gps_latitude>0) //Reverse geocoding
{
// Your Google Maps API key
//$key = "YOUR_KEY_HERE";
// Desired address
$request_url =
"http://maps.googleapis.com/maps/api/geocode/xml?latlng=".$gps_latitude.
".$gps_longitude."&sensor=false&language=cs";
// Retrieve the URL contents
$successXml = TRUE;
$xml = simplexml_load_file($request_url) or $successXml = FALSE;
if ($successXml) {
// Parse the returned XML file
//$xml = new SimpleXMLElement($page);
if ($xml->children()->status == 'OK')
{
//$addr = $xml->children()->result->formatted_address;
$addr = "";
$addresses = $xml->children()->result->address_component;
foreach($addresses as $address){
if ($address->type=="locality")
{
$addr = $address->short_name;
break;
}
}
if (strlen($addr)>0) {
//echo $addr;
$data["locality_city"] = new XML_RPC_Value($addr, "string");
$data["locality_inaccuracy_level"]=new XML_RPC_Value(2, "int");;
$thisAdMessage.="Adresa byla změněna podle GPS, původní adresa:
".$loc_address.", nová adresa: ".$addr."<br />";
$this->PrintMsg("G");
$success=$this->AddAdvert($data);
}
}
else $thisAdMessage.="Chyba reverzního geokódování Google: ".$xml>children()->status."<br />".$request_url."<br />";
}
}
else
$this->PrintMsg("N");
//Reverse geocoding Google
}
if ($success)
{
$adErr=$this->lastStatusMessage;
$this->PrintMsg("#");
$advertId=$this->lastOutput[0]["advert_id"];
$thisAdMessage="<b>".$row["title"]."</b> (".$advertId.") - ".$adErr."<br
/>".$thisAdMessage."<br />";
$pics = $DB->GetThisAdPicsToExport($row[0]);
$allPicsToPublish=array();
/*
$success=FALSE;
if (strlen($advertId)>0 && $advertId!="0" && $advertId!="NULL")
$success=$this->ListPhoto($advertId,"");
else
$success=$this->ListPhoto(0,$advertRkid);
*/
if ($this->ListPhoto(0,$advertRkid)) $listOfPhotos=$this->lastOutput;
else
{
$thisAdMessage.="<b>POZOR: Chyba při načítání seznamu fotek: </b>".$this>lastStatusMessage." (".$this->lastStatus.") <br />";
$listOfPhotos=array();
}
while($rowpic = mysql_fetch_array($pics))
{
array_push($allPicsToPublish, trim($rowpic["photo_rkid"]));
$isPicPublished=FALSE;
//Test shodnosti ID fotek
foreach ($listOfPhotos as $publishedPhoto)
{
if (trim($publishedPhoto['photo_rkid'])==trim($rowpic['photo_rkid']))
{
$isPicPublished=TRUE;
break;
}
}
//Publikace fotky
if (!$isPicPublished)
{
$this->PrintMsg("+");
if ($this->AddPhoto($advertId, "", $rowpic["photo_rkid"], str_replace("//",
"/", $rowpic["filename"]), $rowpic["main"], $rowpic["alt"]))
$thisAdMessage.=$rowpic["photo_name"]." - OK<br /><br />";
else
$thisAdMessage.=$rowpic["photo_name"]." - Err<br />".$this>lastStatusMessage." (".$this->lastStatus.") <br /><br />";
}
else
$this->PrintMsg("-");
}
//Mazání nepublikovaných fotek
foreach ($listOfPhotos as $photo)
{
if (trim($photo['photo_rkid'])=="") //fotka s nedefinovaným RKID - přidána
rozhraním sreality
$this->PrintMsg("?");
else
if (!in_array($photo['photo_rkid'], $allPicsToPublish))
{
//$this->PrintMsg("M");
if (!$this->DelPhoto(0, $photo['photo_rkid']))
{
$this->PrintMsg("x");
$thisAdMessage.="<b style='color:blue>".$photo['photo_rkid']." - Chyba
při mazání fotky</b><br />".$this->lastStatusMessage."<br /><br />";
}
else
$this->PrintMsg("X");
$thisAdMessage.=$photo['photo_rkid']." - fotka úspěšně smazána.<br />";
}
//else $this->PrintMsg("f");
}
//listDailyStat
if ($this->ListDailyStat($advertId, ""))
{
if ((count($this->lastOutput))>0)
$listDailyStat="Datum: ".$this->lastOutput[0]['date'].", Počet shlédnutí:
".$this->lastOutput[0]['views'].", Stržená cena: ".$this->lastOutput[0]['price'];
else
$listDailyStat="Neznámý stav.";
}
else
{
$thisAdMessage.="Chyba denního stavu inzerátu<br />".$this>lastStatusMessage." (".$this->lastStatus.") <br /><br />";
$listDailyStat="ERR - ".$this->lastStatusMessage." (".$this->lastStatus.")";
}
}
else
{
$thisAdMessage="<span style='color:red'><b>".$row["title"]." - Error</b><br
/>".$this->lastStatusMessage." (".$this->lastStatus.
/>".$thisAdMessage."<br />";
$adErr=$this->lastStatusMessage;
$this->PrintMsg("E");
}
//Zápis o stavu inzerátu
if (!$DB->SetAdStatus($row['advert_rkid'], $thisAdMessage, $adErr, $this>GetTextBuffer(),$listStat, $listDailyStat))
$thisAdMessage.="<b>Chyba zápisu do databáze</b><br />";
$this->ResetTextBuffer();
$message.=$thisAdMessage;
}
//Mazání nepublikovaných inzerátů
foreach ($listOfAds as $ad)
{
if (trim($ad['advert_rkid'])=="") //ad s nedefinovaným RKID - přidán rozhraním
sreality
$this->PrintMsg("?");
else
if (!in_array($ad['advert_rkid'], $allAdsToPublish))
{
if (!$this->DelAdvert(0, $ad['advert_rkid']))
{
$message.="<b>".$ad['advert_rkid']." - Chyba při mazání inzerátu</b><br
/>".$this->lastStatusMessage."<br /><br />";
if (!$DB->SetAdStatus($ad['advert_rkid'], "Error removing this ad.", "DELERR", "X-err","",""))
$message.="<b>Chyba zápisu do databáze</b><br />";
}
else
{
$this->PrintMsg("X");
if (!$DB->SetAdStatus($ad['advert_rkid'], "Ad was removed.", "DEL", "X","",
""))
$message.="<b>Chyba zápisu do databáze</b><br />";
}
}
//else $this->PrintMsg("x");
}
return $message;
}
//Publikuje zcela všechny fotky
public function PublishAllPics($DB)
{
$this->ResetTextBuffer();
$pics = $DB->GetPicsToExport();
$message="";
$i=0;
while($row = mysql_fetch_array($pics))
{
$style="";
if (!$this->AddPhoto(0, $row["advert_rkid"], $row["photo_rkid"],
$row["filename"], $row["main"], $row["alt"]))
{
$this->PrintMsg("-");
$style=" style='color:red'";
}
else
$this->PrintMsg("+");
$message.="<b".$style.">".$row["photo_name"]."</b><br />".$this>lastStatusMessage."<br /><br />";
$i++;
if ($i>10) break;
}
return $message;
}
//Publikuje zcela všechny makléře
public function PublishSellers($DB)
{
$sellers = $DB->GetAllSellersToExport();
$message="";
while($row = mysql_fetch_array($sellers))
{
$style="";
if (!$this->AddSeller($row["seller_rkid"], $row["client_login"],
$row["client_name"], $row["contact_gsm"]))
$style=" style='color:red'";
$message.="<b".$style.">".$row["client_name"]."</b> - ".$this>lastStatusMessage." (".$this->lastStatus.")<br />";
}
return $message;
}
//Výstupní funkce
private function ResetTextBuffer()
{
$this->outputTextBuffer="";
}
private function GetTextBuffer()
{
return $this->outputTextBuffer;
}
private function PrintMsg($msgtxt)
{
echo $msgtxt;
$this->outputTextBuffer.=$msgtxt;
}
}
#----------------------------------------------------------------#Třída pro práci s daty na JOOMLA
#----------------------------------------------------------------class DatabaseSession {
private $host;
private $user;
private $pass;
private $db;
private $db_link;
private $conn = false;
private $persistant = false;
public $error = false;
public function Config($host='localhost',$user="sreaexport",$pass='password',
$db='database_jo152'){ // class config
$this->error = true;
$this->persistant = false;
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->db = $db;
}
public function Connect(){ // connection function
// Establish the connection.
if ($this->persistant)
$this->db_link = mysql_pconnect($this->host, $this->user, $this->pass,
true);
else
$this->db_link = mysql_connect($this->host, $this->user, $this->pass,
true);
if (!$this->db_link) {
if ($this->error) {
$this->error($type=1);
}
return false;
}
else {
if (empty($this->db)) {
if ($this->error) {
$this->error($type=2);
}
}
else {
mysql_set_charset('utf8',$this->db_link);
$db = mysql_select_db($this->db, $this->db_link); // select db
if (!$db) {
if ($this->error) {
$this->error($type=2);
}
return false;
}
$this -> conn = true;
}
return $this->db_link;
}
}
private function VerifyConnection()
{
if (!mysql_ping ($this->db_link)) {
//here is the major trick, you have to close the connection (even though its
not currently working) for it to recreate properly.
mysql_close($this->db_link);
$this->Connect();
}
}
public function close() { // close connection
if ($this -> conn){ // check connection
if ($this->persistant) {
$this -> conn = false;
}
else {
mysql_close($this->db_link);
$this -> conn = false;
}
}
else {
if ($this->error) {
return $this->error($type=4);
}
}
}
public function error($type=''){ //Choose error type
if (empty($type)) {
return false;
}
else {
if ($type==1)
RaiseException( "Database could not connect. ". mysql_error());
else if ($type==2)
RaiseException("Mysql error " . mysql_error());
else if ($type==3)
RaiseException("Error: Process has been stopped. ". mysql_error());
else
RaiseException("Error: no connection !!! ". mysql_error());
}
}
private function PrepareSQLForAdsExport()
{
$result = mysql_query("SELECT * FROM `qsrea_fields`");
if (!$result) {
RaiseException('Invalid query: ' . mysql_error());
}
$SQL = "";
while($row = mysql_fetch_array($result))
{
$SQL.=", ";
if (is_null($row['field_name_JOOMLA'])) /*není dotažená položka*/
{
if ($row['type_name']=="int")
{
$SQL.= $row['initial_value'];
}
else
{
$SQL.= "'" . $row['initial_value']."'";
}
}
else
{
if ($row['codesCount']>0) //Je třeba provést přemapování funkcí
{
$SQL.="remapCodebook(".$row['id_srealityexport_fields'].",
`".$row['field_name_JOOMLA']."`)";
}
else
$SQL.="`".$row['field_name_JOOMLA']."`"
;
}
$SQL.= " AS `" . $row['field_name']."` " ;
$SQL.= ", '".$row['field_name']."' AS `_" . $row['field_name']."` " ;
$SQL.= ", '".$row['type_name']."' AS `__" . $row['field_name']."` " ;
}
//POZOR
//`qsrea_adstopublish` musí implementaovat stejnou strukturu sloupců (3 sloupce
pro exp. položku ) jako zbytek tohoto dotazu
$SQL= "SELECT `qsrea_adstopublish`.*".$SQL." FROM `sgj_properties_products` INNER
JOIN `qsrea_adstopublish` ON
`sgj_properties_products`.id=`qsrea_adstopublish`.advert_rkid";
return $SQL;
}
public function GetAdsToExport()
{
$this->VerifyConnection();
$cmd=$this->PrepareSQLForAdsExport();
//echo $cmd."<br />";
$result = mysql_query($cmd);
if (!$result) {
RaiseException('Invalid query: ' . mysql_error());
}
return $result;
}
private function PrepareSQLForPicsExport($where)
{
$SQL =
"SELECT
sgj_properties_images.id AS photo_rkid,
sgj_properties_images.product_id AS advert_rkid,
CASE WHEN sgj_properties_images.ordering = 1 THEN 1 ELSE 0 END AS main,
sgj_properties_images.`text` AS alt,
sgj_properties_images.path AS filename,
sgj_properties_images.ordering,
sgj_properties_images.rout,
sgj_properties_images.`date`,
sgj_properties_images.uid,
sgj_properties_images.name AS `photo_name`
FROM
`sgj_properties_images`
WHERE
(sgj_properties_images.published = 1 AND
TRIM(UPPER(sgj_properties_images.type)) = 'JPG') ".$where."
ORDER BY
sgj_properties_images.ordering";
return $SQL;
}
public function GetAllPicsToExport()
{
$this->VerifyConnection();
$cmd = $this->PrepareSQLForPicsExport("");
$result = mysql_query($cmd);
if (!$result) {
RaiseException('Invalid query: ' . mysql_error());
}
return $result;
}
public function GetThisAdPicsToExport($advertRkid)
{
$this->VerifyConnection();
$cmd = $this->PrepareSQLForPicsExport("AND
sgj_properties_images.product_id=".$advertRkid);
$result = mysql_query($cmd);
if (!$result) {
RaiseException('Invalid query: ' . mysql_error());
}
return $result;
}
public function GetAllSellersToExport()
{
$this->VerifyConnection();
$cmd =
"SELECT
sgj_properties_profiles.mid AS seller_rkid,
sgj_properties_profiles.name AS client_name,
TRIM(sgj_properties_profiles.email) AS client_login,
sgj_properties_profiles.mobile AS contact_gsm,
sgj_properties_profiles.ordering
FROM
sgj_properties_profiles
WHERE
TRIM(sgj_properties_profiles.email) <> '' AND
sgj_properties_profiles.published = 1
ORDER BY
sgj_properties_profiles.ordering";
$result = mysql_query($cmd);
if (!$result) {
RaiseException('Invalid query: ' . mysql_error());
}
return $result;
}
//Nastaví stav inzerátu po exportu
public function SetAdStatus($advertRkid, $statusMsg, $statusErr, $statusProgress,
$statusSrea, $statusDaily)
{
$this->VerifyConnection();
$cmd = 'UPDATE `sgj_properties_products`
SET
`extra90` = "'.$statusMsg.'",
`extra91` = "'.$statusErr.'",
`extra92` = "'.$statusProgress.'",
`extra93` = "'.$statusSrea.'",
`extra94` = "'.$statusDaily.'"
WHERE id='.$advertRkid;
//echo $cmd;
$result = mysql_query($cmd);
if (!$result) {
RaiseException('Invalid query: ' . mysql_error());
}
return $result;
}
}
//-----------------------------------------------------function RaiseException($msg)
{
var_dump(debug_backtrace());
die($msg);
}
?>

Podobné dokumenty

Objektové programování 2 - Starší publikace a seriály

Objektové programování 2 - Starší publikace a seriály V knize také občas používáme termín řadová funkce. Označujeme tak funkce, které nejsou metodami objektových typů (v situacích, kdy je podobné rozlišení potřebné). Pro jazyk C budeme občas používat ...

Více

Informace k aktualizaci Poski REAL

Informace k aktualizaci Poski REAL Expertreality.cz úprava adresy (podpora mcast), úprava 'object_type' - 'house_kind' - nutná verze PR 2.11 přidáno expertreality_cz_list_seller(), $this->a_sellers úprava expertreality_cz_uzivatele(...

Více

Sreality - dokumentace k importnímu rozhraní

Sreality - dokumentace k importnímu rozhraní Důležité: Oba tyto způsoby vyžadují co nejpřesnější zadání adresy. Ale ne vždy je přesná šipka na mapě žádoucí. Proto lze zadat ještě atribut locality_inaccuracy_level, který říká jak moc j...

Více

Sauto - dokumentace k importnímu rozhraní

Sauto - dokumentace k importnímu rozhraní string session_id id session získané z metody getHash() struct car_data { data vkládaného inzerátu (jednotlivé položky a jejich hodnoty) int car_id id inzerátu (vozidla) podle číslování Sauta stri...

Více

Brauniger IQ-ONE

Brauniger IQ-ONE VARIO m/s, 30 s (doba východisko ft/min-x100 po které se

Více

Přírodovědecká Fakulta Univerzity Palackého

Přírodovědecká Fakulta Univerzity Palackého použité literatury, příslušná stránka se uvede v hranaté závorce. Jde-li o citát, uvedou se čísla prvního a posledního řádku citátu. ii

Více