This CodeLet allows you programatically import property to content type:
- Install module.
- Create content type with the fields to which you want to import.
- you have to update KEY/PASSWORD for Vebra API and URL of property on Vebra.
CodeLet
<?php/** * Implementation of hook_menu** @author saru1683*/function vebra_import_menu() { $item = array(); $item['vebra_import_property/%'] = array( 'type' => MENU_CALLBACK, 'page callback' => '_get_vebra_property_detail', 'page arguments' => array(1), 'access callback' => TRUE, ); return $item;}/** * menu callback */function _get_vebra_property_detail($arg = NULL) { //ADD VEBRA PROPERTY URL FOR IMPORT TO NODE $url = 'http://webservices.vebra.com/export/APIKEY/v4/branch/BRANCHID/property/PROPERTYID'; $property_detail_xml = _get_response($url, false); if($property_detail_xml) { if(_xml_vebra_import_process($property_detail_xml)) { //watchlog true; }else { //watchlog false; } } drupal_goto('');}/** * property import process */function _xml_vebra_import_process($xml) { $om__result = new StdClass(); $p = xml_parser_create(); xml_parse_into_struct($p, $xml, $vals, $index); xml_parser_free($p); $ar__index = $index; $ar__value = $vals; $om__result->field_property_id = isset($vals[0]['attributes']['ID']) ? $vals[0]['attributes']['ID'] : 0; $om__result->field_rent_pm = isset($ar__value[$ar__index['PRICE'][0]]['value']) ? $ar__value[$ar__index['PRICE'][0]]['value'] : ''; $om__result->field_property_type = isset($ar__value[$ar__index['TYPE'][0]]['value']) ? $ar__value[$ar__index['TYPE'][0]]['value'] : ''; $ss__field_property_images = NULL; // allow six files $sn__property_file_count = isset($ar__index['FILE']) ? count($ar__index['FILE']) : 0; if($sn__property_file_count > 10) { $sn__property_file_count = 10; } // for($i = 0; $i < $sn__property_file_count; $i++) { $attr = isset($ar__value[$ar__index['FILE'][$i]]['attributes']) ? $ar__value[$ar__index['FILE'][$i]]['attributes'] : array(); if(!isset($attr) || !isset($attr['TYPE']) || $attr['TYPE'] != 9) { $sn__url_index = isset($ar__index['URL'][$i]) ? $ar__index['URL'][$i] : ''; $sn__value_index = isset($sn__url_index) && isset($ar__value[$sn__url_index]['value']) ? $ar__value[$sn__url_index]['value'] : ''; if($sn__value_index != '') { if (strpos($ar__value[$ar__index['URL'][$i]]['value'],'home/hip/') === false) {//check is not energy certificate $ss__field_property_images .= $ar__value[$ar__index['URL'][$i]]['value'] . ', '; } } } } $om__result->field_property_images = $ss__field_property_images; $om__result->field_reference = isset($ar__value[$ar__index['AGENTS'][0]]['value']) ? $ar__value[$ar__index['AGENTS'][0]]['value'] : ''; $om__result->field_bedrooms = isset($ar__value[$ar__index['BEDROOMS'][0]]['value']) ? $ar__value[$ar__index['BEDROOMS'][0]]['value'] : ''; $om__result->field_description = isset($ar__value[$ar__index['DESCRIPTION'][0]]['value']) ? addslashes($ar__value[$ar__index['DESCRIPTION'][0]]['value']) : ''; $om__result->field_lat_long_lat = isset($ar__value[$ar__index['LATITUDE'][0]]['value']) ? $ar__value[$ar__index['LATITUDE'][0]]['value'] : ''; $om__result->field_lat_long_lon = isset($ar__value[$ar__index['LONGITUDE'][0]]['value']) ? $ar__value[$ar__index['LONGITUDE'][0]]['value'] : ''; $om__result->field_area = isset($ar__value[$ar__index['AREA'][0]]['value']) ? trim($ar__value[$ar__index['AREA'][0]]['value']) : ''; if(isset($ar__index['BULLET']) && !empty($ar__index['BULLET'])) { $attr = isset($ar__value[$ar__index['BULLET'][0]]['attributes']) ? $ar__value[$ar__index['BULLET'][0]]['attributes'] : ''; if($attr && $attr['ID'] == 1) $om__result->field_area = isset($ar__value[$ar__index['BULLET'][0]]['value']) ? $ar__value[$ar__index['BULLET'][0]]['value'] : $ss__field_area; } $ss__field_energy_certificate = NULL; $ss__certificate = ''; $ar__index['FILE'] = isset($ar__index['FILE']) ? $ar__index['FILE'] : array(); for($i = 0; $i < count($ar__index['FILE']); $i++) { $attr = isset($ar__value[$ar__index['FILE'][$i]]['attributes']) ? $ar__value[$ar__index['FILE'][$i]]['attributes'] : ''; if($attr && $attr['TYPE'] == 9) { $ar__index_certificate = $ar__index['FILE'][$i] + 2; $ss__certificate .= (trim($ar__value[$ar__index_certificate]['value']) ? trim($ar__value[$ar__index_certificate]['value']) : trim($ar__value[$ar__index_certificate+1]['value'])) . ','; } } $om__result->field_energy_certificate = $ss__certificate; $om__result->field_data_available = isset($ar__value[$ar__index['AVAILABLE'][0]]['value']) ? $ar__value[$ar__index['AVAILABLE'][0]]['value'] : ''; $om__result->field_facilities2 = NULL; $ar__index['BULLET'] = isset($ar__index['BULLET']) ? $ar__index['BULLET'] : array(); for($i = 0; $i < count($ar__index['BULLET']); $i++) { $ss__facility = isset($ar__value[$ar__index['BULLET'][$i]]['value']) ? $ar__value[$ar__index['BULLET'][$i]]['value'] : '' ; $ss__field_facilities2 .= $ss__facility . '#|#'; } $om__result->field_facilities2 = $ss__field_facilities2; $om__result->field_city_or_town = isset($ar__value[$ar__index['TOWN'][0]]['value']) ? $ar__value[$ar__index['TOWN'][0]]['value'] : ''; $om__result->field_postcodeprop = isset($ar__value[$ar__index['STREET'][0]]['value']) ? $ar__value[$ar__index['STREET'][0]]['value'] : ''; $om__result->field_street = isset($ar__value[$ar__index['STREET'][0]]['value']) ? $ar__value[$ar__index['STREET'][0]]['value'] : ''; $om__result->field_property_name_or_number = isset($ar__value[$ar__index['NAME'][0]]['value']) ? $ar__value[$ar__index['NAME'][0]]['value'] : ''; $om__result->field_locality = isset($ar__value[$ar__index['LOCALITY'][0]]['value']) ? $ar__value[$ar__index['LOCALITY'][0]]['value'] : ''; $ss__field_map_from_address = NULL; $ss_display = isset($ar__value[$ar__index['DISPLAY'][0]]['value']) ? $ar__value[$ar__index['DISPLAY'][0]]['value'] : ''; $om__result->title = $ss_title = $ss_display; $om__result->field_display_title = $ss_display; //Create node $node = new StdClass(); $node->type = 'import';//content type $node->uid = 1; $node->title = $om__result->title; $node->status = 1; $node->language = 'und'; //price $node->field_rent_pm['und']['0']['value'] = $om__result->field_rent_pm; //property type $node->field_property_type['und'][0]['value'] = $om__result->field_property_type; $ss__destination = file_build_uri('csv_import_property'); $ss__pro_images = explode(',', $om__result->field_property_images); if(count($ss__pro_images)) { for($i = 0; $i < count($ss__pro_images); $i++) { $file_url = trim($ss__pro_images[$i]); if($file_url != '') { $file = _save_property_images($file_url, 1,'properties'); $node->field_property_images['und'][$i] = (array)$file; } } } //reference $node->field_reference['und']['0']['value'] = $om__result->field_reference; //field_bedrooms $node->field_bedrooms['und']['0']['value'] = $om__result->field_bedrooms; //field_description $node->field_description['und']['0']['value'] = $om__result->field_description; //field_lat_long:lat $node->field_lat_long['und'][0] = array( 'lat' => $om__result->field_lat_long_lat, 'lon' => $om__result->field_lat_long_lon, ); //field_area $node->field_area['und']['0']['value'] = $om__result->field_area; //field_energy_certificate $ss__certificate_images = explode(',', $om__result->field_energy_certificate); if(count($ss__certificate_images)) { //if (file_prepare_directory($ss__destination, FILE_CREATE_DIRECTORY)) { for($i = 0; $i < count($ss__certificate_images); $i++) { $file_url = trim($ss__certificate_images[$i]); if($file_url != '') { $file = _save_property_images($file_url); $node->field_energy_certificate['und'][$i] = (array)$file; } } //} } //field_data_available $arr__data_available = explode('/',$om__result->field_data_available); $sn__yy = $arr__data_available[2]; $sn__mm = $arr__data_available[1]; $sn__dd = $arr__data_available[0]; $node->field_data_available['und']['0']['value'] = $sn__yy . '-' . $sn__mm . '-' . $sn__dd .' 00:00:00';//str_replace('/', '-', $om__result->field_data_available);//date('Y-m-d H:i:s'); //field_facilities2 $ss__facilities = explode('#|#', $om__result->field_facilities2); $jj = 0; for($ii = 0; $ii < count($ss__facilities); $ii++) { if(trim($ss__facilities[$ii])) { $node->field_facilities2['und'][$jj]['value'] = $ss__facilities[$ii]; $jj++; } } //field_city_or_town $node->field_city_or_town['und']['0']['value'] = $om__result->field_city_or_town; //field_postcodeprop $node->field_postcodeprop['und']['0']['value'] = $om__result->field_postcodeprop; //field_street $node->field_street['und']['0']['value'] = $om__result->field_street; //field_city_or_town $node->field_property_name_or_number['und']['0']['value'] = $om__result->field_property_name_or_number; $node->field_locality['und']['0']['value'] = $om__result->field_locality; //field_map_from_address field not available on property listing content type //field_display_title $node->field_display_title['und']['0']['value'] = $om__result->field_display_title; $node->field_property_id['und'][0]['value'] = $om__result->field_property_id; // update existing property $query = db_select('field_data_field_property_id', 'p'); $query->join('node', 'n', 'p.entity_id = n.nid'); $query->fields('n', array('nid')) ->condition('p.field_property_id_value', $om__result->field_property_id, '=') ->condition('p.bundle', 'property_listing', '='); $result = $query->execute(); if($result->rowCount()) { $record = $result->fetchAssoc(); if(!empty($record['nid'])) $node->nid = $record['nid']; } // end of update existing node_submit($node); $nid = node_save($node); if($node->nid) { drupal_set_message(t('@node has been created', array('@node' => $node->title))); }else { drupal_set_message('DB:Error ', 'error'); } unset($node, $om__result, $r__result); return true;}function _get_response($url = '', $request_token = false){ if($url == '') return false; $ss__token = variable_get('csv_import_token',0); $username = 'XXXXXXXXXX'; $password = 'XXXXXXXXXX'; $ch = curl_init(); if(isset($_SESSION['VAR']) && $_SESSION['VAR'] > 3 ) { drupal_set_message('We are failed to fetch Token please try after some times', 'error'); unset($_SESSION['VAR']); watchdog('import', 'failed to fetch Token ',array(), WATCHDOG_NOTICE); //drupal_goto(''); } curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_URL, $url); if($request_token == false ) { watchdog('import property', 'Authorize using old token',array(), WATCHDOG_NOTICE); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '.base64_encode($ss__token) )); // I found this to be the only way of consistently authorising between user-password combo and using a token } else { watchdog('csv_import', 'Authorize using User:Pass',array(), WATCHDOG_NOTICE); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '.base64_encode("$username:$password") )); // I found this to be the only way of consistently authorising between user-password combo and using a token } $response = curl_exec($ch); list($headers, $body) = explode("\r\n\r\n", $response); $headers = nl2br($headers); $headers = explode('<br />', $headers); $status = explode(' ', $headers[0]); $status = $status[1]; if($status == '200'){ foreach($headers as $header) { $components = explode(': ', trim($header)); $headers[$components[0]] = isset($components[1]) ? $components[1] : ''; } $ss__token = isset($headers['Token']) ? $headers['Token'] : variable_get('csv_import_token', 0); if(isset($headers['Token'])){ variable_set('csv_import_token', $ss__token); watchdog('import', 'Token updated', array(), WATCHDOG_NOTICE); } return $body; } else if($status == '401') { $_SESSION['VAR'] = isset($_SESSION['VAR']) ? ($_SESSION['VAR'] + 1) : 1; return _get_response($url, true); drupal_set_message('Unauthorized'); } else if($status == '204') { drupal_set_message('Import Property: Provided branch has no property list'); } else if($status == '403') { drupal_set_message('Import Property: Forbidden The access property that is not available to the client'); } else if($status == '404') { drupal_set_message('Import Property: incorrect URL'); } else if($status == '410') { drupal_set_message('Import Property: The property/branch has been deleted OR is not currently available'); } else if($status == '500') { drupal_set_message('Import Property: Something bad happened to the API'); } else if($status == '501') { drupal_set_message('Import Property: The API version in the request is not supported'); } else drupal_set_message('Import Property: Property Import fail');}?>
Info file details
name = Custom Vebra Property Import
description = Custom feature for import vebra property to node type
core = 7.x
package = custom