Skip to the content.

Ghid utilizare serviciu API de publicare in sistemul Imopedia.ro

Cuprins


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

2023.06.01

2023.05.12

2022.03.07

2021.09.01

2021.08.01


FAQ – Întrebări frecvente

  1. 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.

  2. 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.

  3. 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.

  4. Cum gestionez autentificarea la API?

    Autentificarea la API se face prin metoda login, care va returna un session_id ce trebuie utilizat în toate apelurile ulterioare. După ce ați terminat operațiunile, este necesar să apelați metoda logout pentru a închide sesiunea.

  5. 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.

  6. 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 și CONTACT_EMAIL. Alternativ, dacă aveți un ID de agent dintr-un alt apel API, îl puteți folosi în câmpul AGENT_ID.

  7. Cum se gestionează locația unei oferte?

    Locația unei oferte este definită prin câmpurile JUDET, ZONA, REPER și coordonatele geografice (GEO_LAT și GEO_LONG) pentru a facilita afișarea corectă pe harta Google Maps.

  8. 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.

  9. 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.

  10. 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.

  11. 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ă.

  12. 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 și T_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:

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

Detalii tehnice

ID-uri.

ID-urile ofertelor sunt numerice. Pentru sincronizarea ofertelor se poate alege una din cele 2 strategii:

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

TIP IMOBIL

O oferta are un atribut ce reprezintă tipul imobilului. Valorile sunt

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:

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)

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