Ghid utilizare serviciu API de publicare in sistemul Imopedia.ro
Cuprins
- Changelog
- Introducere
- FAQ – Întrebări frecvente
- Documentatie & Campuri
- Operatii expuse prin api
- Nomenclatoare
- Exemplu PHP
Suport tehnic
Pentru mai multe detalii puteți lua legătura cu departamentul tehnic Imopedia.ro la adresa de email support@imopedia.ro
Changelog
2023.10.25
- Suport valoare
Sold
pentru campulTAGURI
2023.06.01
- Adaugare camp
IMOPEDIA
2023.05.12
- Adaugare camp
COLLAB_AGENT_ACTIVE
,COLLAB_COMMISSION_SHARE
,COLLAB_DETAILS
2022.03.07
- Adaugare campuri
PRET_TEXT_DISCOUNT
,T_I_PRET_DISCOUNT
,T_H_PRET_DISCOUNT
- Adaugare camp
TAGURI
2021.09.01
- Adaugare in fisierul de campuri descrieri pentru campurile
COMISION
,COMISION_I
2021.08.01
- Publicare document
- Adaugare exemple pentru campurile
TITLU
,COMISION
,VIDEO_INFO
- Adaugare in fisierul de campuri descrieri pentru campurile
TOTAL_ENERGY_CONSUMPTION
,EMISSION_INDEX
,RENEWABLE_SOURCES_CONSUMPTION
FAQ – Întrebări frecvente
-
Cum pot accesa API-ul Imopedia.ro?
Pentru a accesa API-ul, trebuie să primiți un nume de utilizator și o parolă de la echipa tehnică Imopedia.ro. Odată ce aveți aceste credențiale, puteți folosi endpoint-ul SOAP disponibil la adresa http://syncapi.imopedia.ro/api2/sync.wsdl.
-
Ce tipuri de imobile pot publica folosind API-ul?
API-ul suportă mai multe tipuri de imobile, inclusiv apartamente, birouri, case/vile, spații comerciale, spații industriale și terenuri. Fiecare tip de imobil are un ID specific, detaliat în documentația API-ului.
-
Cum pot adăuga imagini la o ofertă?
După ce ați adăugat o ofertă cu succes și ați obținut un ID pentru ofertă, puteți folosi metoda
addFile
din API pentru a încărca imagini. Este necesar să trimiteți imaginea codificată în format Base64 împreună cu informații despre locația și descrierea acesteia. -
Cum gestionez autentificarea la API?
Autentificarea la API se face prin metoda
login
, care va returna unsession_id
ce trebuie utilizat în toate apelurile ulterioare. După ce ați terminat operațiunile, este necesar să apelați metodalogout
pentru a închide sesiunea. -
Ce formate de fișiere video sunt acceptate?
API-ul suportă linkuri către video-uri de pe YouTube, Vimeo și alte platforme de tururi virtuale. Aceste linkuri trebuie trimise în câmpul
VIDEO_INFO
în format JSON. -
Ce se întâmplă dacă o ofertă nu are un agent asociat?
În cazul în care nu aveți un agent asociat, puteți completa detaliile de contact direct în câmpurile
CONTACT_PERS
,CONTACT_TEL
șiCONTACT_EMAIL
. Alternativ, dacă aveți un ID de agent dintr-un alt apel API, îl puteți folosi în câmpulAGENT_ID
. -
Cum se gestionează locația unei oferte?
Locația unei oferte este definită prin câmpurile
JUDET
,ZONA
,REPER
și coordonatele geografice (GEO_LAT
șiGEO_LONG
) pentru a facilita afișarea corectă pe harta Google Maps. -
Care sunt valorile posibile pentru câmpul
TAGURI
?Câmpul
TAGURI
poate conține un array JSON cu diverse etichete specifice proprietății. Consultați documentația pentru o listă completă de taguri disponibile. -
Ce se întâmplă dacă există deja o imagine în sistem?
Înainte de a adăuga o imagine nouă, puteți verifica dacă aceasta există deja în sistem folosind metoda
existsFile
. Dacă imaginea există, nu va mai fi necesar să o reîncărcați. -
Ce se întâmplă dacă oferta nu este publicată corect?
În cazul în care apare o eroare la publicarea unei oferte, veți primi un răspuns cu detalii despre eroarea respectivă în câmpul de răspuns al API-ului. Verificați detaliile trimise și asigurați-vă că toate câmpurile obligatorii sunt completate corect.
-
Pot utiliza propriul ID de ofertă?
Da, puteți alege să folosiți propriile ID-uri interne pentru oferte, cu condiția ca acestea să fie numerice și să fie unice pentru fiecare ofertă.
-
Ce tipuri de tranzacții pot gestiona prin API?
API-ul suportă mai multe tipuri de tranzacții imobiliare, inclusiv vânzare și închiriere. Câmpurile relevante pentru tranzacții sunt
T_V_TRANZ
pentru vânzare șiT_I_TRANZ
pentru închiriere.
Introducere
Informații generale
API-ul de publicare în sistemului imopedia.ro utilizează protocolul SOAP pentru administrarea ofertelor. Webservice-ul expus este http://syncapi.imopedia.ro/api2/sync.wsdl .
Flux de funcționare al clientului de webservice:
- Login în sistem
- Operații în sistem
- Logout
Accesul la webservice
Accesul la webservice este restricționat pe baza de user și parola. Datele de conectare la sistem vor fi primit din partea Imopedia.ro .
Operatii expuse prin API
Documentatie API
Pachetul de informații despre webservice cuprinde
- Documentul de prezentare (document curent)
- Spreadsheet nomenclatoare si campuri proprietate
- Spreadsheet nomenclator ZONE
- Exemplu PHP 5.3
Detalii tehnice
ID-uri.
ID-urile ofertelor sunt numerice. Pentru sincronizarea ofertelor se poate alege una din cele 2 strategii:
- Folosirea ID-urilor interne aplicației, condiția fiind să fie numerice. Un ID indica o singura oferta și numai una.
- Generarea de ID-uri de către sistemul Imopedia.ro
AGENTIA
O oferta are o agentie atașata. ID-ul de agentie pentru care se poate trimite oferte este primit împreuna cu userul și parola de api.
AGENTUL
Informatia despre agent se poate trimite in 2 variante diferite
- fie pe campurile
CONTACT_PERS
,CONTACT_TEL
,CONTACT_EMAIL
- fie prin campul
AGENT_ID
, trimitandu-se id-ul din call-urile saveAgent
TIP IMOBIL
O oferta are un atribut ce reprezintă tipul imobilului. Valorile sunt
- 1 – Apartament
- 2 – Birou
- 4 – Casa/Vila
- 5 – Spațiu comercial
- 6 – Spațiu industrial
- 7 - Teren
Nomenclatoare
Idei generale
Proprietățile de descriere ale ofertei se completează conform descrierilor făcute în fișierul excel nomenclatoare api.xlsx. Pentru fiecare câmp se dau detalii. Acolo unde câmpul are un nomenclator atașat se face legătura către worksheet-ul în care este detaliat nomenclatorul. Fiecărui tip de imobil ii corespunde o lista de valori. Excepție face nomenclatorul de Zone, care se face intr-un fișier separat.
Localizare oferta.
Localizarea oferta se face prin următoarele câmpuri:
JUDET
(Pentru Ilfov se folosește București)ZONA
conform nomenclatoruluiREPER
– câmp text- coordonate pentru localizare harta Google Map (latitudine, longitudine și zoom).
Exemplu PHP
<?php
define('IMOPEDIA_USER', 'user');//Se va indica impreuna cu datele de login ce ID-uri de agentii se pot folosi
define('IMOPEDIA_PASSWORD', 'parola');//Se va indica impreuna cu datele de login ce ID-uri de agentii se pot folosi
//ne conectam
include('ImopediaSoap.php');
$imopedia = new ImopediaSoap('http://syncapi.imopedia.ro/api2/sync.wsdl?' . time(), IMOPEDIA_USER, IMOPEDIA_PASSWORD);
$imopedia->connect();
//agentia
$agentia = 0;//id-ul agentiei, in functie de login. Se va indica impreuna cu datele de login ce ID-uri de agentii se pot folosi
//adaugam o oferta
//denumirea campurilor variaza in functie de tipul tranzactiei
$run = array();
$run['camp_pret'] = 'T_V_PRET';
$run['camp_moneda'] = 'T_V_MONEDA';
$run['camp_tranz'] = 'T_V_TRANZ';
//LISTA de video-uri/tururi virtuale atasate la un anunt
$videos = json_encode([
[
'TITLE' => "Titlu video",
'FILE_URL' => "https://www.youtube.com/watch?v=akotZoPsG5M", //link catre un un youtube, vimeo , roundme sau alt tur virtual
]]);
//campurile pe care le trimitem
$options = array(
'AGENTIA' => $agentia,
'ID_LOCAL' => 67654,
'DATA_MODIFICARE' => '2012-01-11',
'DATA_APARITIE' => '2012-01-11',
'ZONA' => 'Giurgiului',
'JUDET' => 'Bucuresti',
'COMISION' => 2,//2%
'TITLU' => 'Apartament 2 camere in Giurgiului',
'SUPR_UTILA' => '91.55',
'GEO_LAT' => '44.392663',
'GEO_LONG' => '26.089659',
'AN_CONSTRUCTIE' => 1960,
'NRCAM' => 5,
'NRDORMITOARE' => 3,
'NR_BAI' => 2,
'NR_GR_SANITARE' => 2,
'DOTARI' => '',
'VECINATATI' => '',
'ACTE_DOBANDIRE' => '',
'TIP_IMOBIL_REAL' => 3,
$run['camp_pret'] => '43423',
$run['camp_moneda'] => 'EUR',
$run['camp_tranz'] => 1,
'CONTACT_PERS' => 'Geoerrge Popescu',
'CONTACT_EMAIL' => 'teest_agent@run.ro',
'CONTACT_TEL' => '0721117111',
'AMPLASAMENT' => '',
'A_IMPARTIRE' => '',
'STARE_IMOBIL' => '',
'T_EXTRAVILAN' => '',
'T_INTRAVILAN' => '',
'T_AGRICOL' => '',
'NR_BALCOANE' => 3,
'REPER' => 'Piata Progresul',
'SUPR_ALTE' => 'Baie 1: 5.54 mp, Bucatarie: 8.64 mp, Camera Zi (Living): 25.43 mp, Dormitor 2: 17.95 mp, Dormitor Matrimonial: 20.75 mp',
'OBSERVATII' => 'PIATA PROGRESUL - BLOC NOU. Straduta linistita de case, la cateva minute de bulevard dar ferita de trafic. Este o proprietate rafinata perfecta pentru o familie activa, intr-un bloc deosebit construit in 2008. Apartamentul are un decor minunat, un living perfect pentru recreere, baie cu hidromasaj, bucatarie mobilata si utilata. Cele trei balcoane ofera o panorama larga asupra imprejurimilor.',
'ADDRESS' => 'Adresa',
'C_PIVNITA' => '',
'C_MANSARDA' => '1',
'T_D_APA' => '1',
'T_D_CANALIZARE' => '1',
'T_D_GAZE' => '1',
'T_D_CURENT' => '1',
'VIDEO_INFO' => $videos
);
$optionso = arrayToObject($options);
//salvam informatiile
$soap_result = $imopedia->execute('saveProperty', $optionso);
print_r($soap_result);
//id-ul ofertei adaugate
$oferta_adaugata = $soap_result['_success'][0]['result']['property_id'];
//daca oferta s-a adaugat cu succes trimitem si pozele
if ($oferta_adaugata) {
$photos = array(); //array-ul cu poze
$photos[1]['Location'] = 'http://clienti2.run.ro/usr/poze/thumb_612_x_0_309_1747.jpg';
$photos[1]['Content-Description'] = 'Descrierea pozei';
$photos[1]['Object-ID'] = 4534;
foreach ($photos as $photo) {
$options['FILE_ID'] = md5($photo['Object-ID'] . $photo['Content-Description'] . $photo['Location']);
$options['FILE_TITLE'] = $photo['Content-Description'];
$optionso = arrayToObject($options);
//verificam daca poza exista pe imopedia.ro
$rrr = $imopedia->execute('existsFile', $optionso);
//daca exista
if ($rrr['_success']['0']['photo']['exists'] == 1) continue;
//daca nu exista
echo PHP_EOL . 'iau ' . $photo['Location'];
$options['FILE_BODY'] = base64_encode(file_get_contents($photo['Location']));
$optionso = arrayToObject($options);
$soap_result = $imopedia->execute('addFile', $optionso);
}
echo PHP_EOL . ' Am adaugat oferta http://www.imopedia.ro/anunt/apartament-in-bucuresti-dorobanti-' . $agentia . 'RUN' . $oferta_adaugata . '.html';
}
// logout api imopedia
$imopedia->disconnect();
exit;
function objectToArray($data)
{
if (is_array($data) || is_object($data)) {
$result = array();
foreach ($data as $key => $value) {
$result[$key] = objectToArray($value);
}
return $result;
}
return $data;
}
function arrayToObject($array)
{
if (!is_array($array)) {
return $array;
}
$object = new stdClass();
if (is_array($array) && count($array) > 0) {
foreach ($array as $name => $value) {
$name = (trim($name));
if (!empty($name)) {
$object->$name = arrayToObject($value);
}
}
return $object;
} else {
return FALSE;
}
}
?>
ImopediaSoap.php
<?php
class ImopediaSoap
{
function __construct($url, $user, $password)
{
print_r($url);
ini_set('soap.wsdl_cache_enabled', '0');
ini_set('soap.wsdl_cache_ttl', '0');
$this->user = $user;
$this->password = $password;
$this->client = new SoapClient($url, array('cache_wsdl' => 0, 'trace' => 1));
}
function connect()
{
$this->sess_id = $this->client->__soapCall('login', array('username' => $this->user, 'password' => $this->password));
return $this->sess_id;
}
function disconnect()
{
$result = $this->client->__soapCall('logout', array('session_id' => $this->sess_id));
}
function execute($method, $options)
{
$foo = array();
$foo['session_id'] = $this->sess_id;
$foo['options'] = $options;
return $result = $this->client->__soapCall($method, $foo);
}
}
?>
Observatii Ucraina (deprecated)
Pentru ofertele cu regim special pentru Refugiatii din Ucraina folositi campurile de mai jos (detalii se gasesc in acest document)
PRET_TEXT_DISCOUNT
- Ex: Capacitate 4 persoane, disponibil de la 1 aprilie, pe o perioada de min. 2 luni. Rog telefon inainte pentru confirmare.T_I_PRET_DISCOUNT
- Ex: 200T_H_PRET_DISCOUNT
- Ex: NULLTAGURI
- Ex: Ucraina
Lista completa a campurilor poate fi regasita aici : campuri & nomenclatoar
Exemplu PHP pentru campurile prezentate mai sus
$info['PRET_TEXT_DISCOUNT']='Capacitate 4 persoane, disponibil de la 1 aprilie, pe o perioada de min. 2 luni. ..';
$info['T_I_PRET_DISCOUNT']=200;
$info['T_H_PRET_DISCOUNT']=null;
$info['TAGURI']=json_encode(['Ucraina']);
Camp | Tip | Explicatie |
---|---|---|
TAGURI | string | un array encodat json cu diverse taguri disponibile. Taguri posibile: “Ucraina” |
PRET_TEXT_DISCOUNT | string | text cu detalii si conditii in legatura cu pretuile cu discount |
T_I_PRET_DISCOUNT | float | Pret de inchiriere cu discount |
T_H_PRET_DISCOUNT | float | Pret regim hotelier cu discount |