This CodeLet will read data from an external API, parse the JSON response & build a node of specific type. It imports taxonomies & images as well. The fascinating thing about this CodeLet is, it can import data to multi - value node fields, including multi widget fields & different field types.
CodeLet
<?php
/* * @file * */
/** * Implemenation of hook_menu
* * @author DruaplD */
function hs_Pnode_import_menu() {
$items = array();
$items['hs-import'] = array(
'type' => MENU_CALLBACK,
'title' => t('Pnode Imports'),
'page callback' => 'hs_Pnode_import_data', 'access callback' => TRUE,
);
return $items;
}
/** * hs_Pnode_import_api_connection
* * Connect to API
* * @author DruaplD */
function hs_Pnode_import_api_connection($type, $estateId = NULL, $imageId = NULL) {
$ch = curl_init(); switch($type) {
//Here goes calls to external API using cURL }
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/** * hs_Pnode_import_data
* * Import data using API
* * @author DruaplD */
function hs_Pnode_import_data() {
//Perform some pre-checks, make connection to external API using URL, import JSON & parse it to import the data to node
_Pnode_build($type, $Id, $cId);
}
/** * _Pnode_build
* * * @author DruaplD
* */
function _Pnode_build($type, $Id, $cId) {
global $user;
$ar__Pnode = hs_Pnode_import_api_connection($type, $Id, $cId); $om__Pnode = json_decode($ar__Pnode);
if (!empty($om__Pnode)) {
$node = new stdClass(); $node->type = 'Pnode';
$node->uid = ($user->uid > 0 ? $user->uid : 1);
//Update. If node already exists
$nid = _get_nid($estate_ID);
if (!empty($nid)) {
$node->nid = $nid;
}
node_object_prepare($node);
$node->title = $om__Pnode->baseInformation->objectAddress->streetAddress .' '. $om__Pnode->assignment->estatenumber; $node->body['und'][0]['value'] = $om__Pnode->description->longSellingDescription;$node->body['und'][0]['summary'] = text_summary($om__Pnode->description->longSellingDescription);
//Images -- Multi Value field
foreach ($om__Pnode->advertiseOn->imageIds as $imageId) { $node->field_advertisement_image_id['und'][]['value'] = $imageId;
}
//Documents -- Multi Value field
foreach ($om__Pnode->advertiseOn->documents as $document) { $node->field_advertisement_documents['und'][]['value'] = $document;
}
//Links -- Multi Value field with multi widgets
foreach ($om__Pnode->advertiseOn->links as $link) {
$k = 0;
$node->field_advertisement_links['und'][$k]['title'] = $link->text;
$node->field_advertisement_links['und'][$k]['url'] = $link->links[0];
$k++;
}
//Coordinates -- Geo field
$ss__latitude = ($om__Pnode->baseInformation->objectAddress->coordinate->latitud ?: NULL);
$ss__longitude = ($om__Pnode->baseInformation->objectAddress->coordinate->longitud ?: NULL);
if ($ss__longitude != NULL && $ss__latitude != NULL) {
$geofield = array( 'geom' => "POINT ($ss__longitude $ss__latitude)", 'geo_type' => 'point', 'lat' => $ss__latitude . "000000", 'lon' => $ss__longitude . "000000", 'left' => $ss__longitude . "000000", 'top' => $ss__latitude . "000000", 'right' => $ss__longitude . "000000", 'bottom' => $ss__latitude . "000000" );
$node->field_coordinates['und'][0] = $geofield;
}
//Street -- Taxonomy
$street = taxonomy_get_term_by_name($om__Pnode->baseInformation->objectAddress->streetAddress);
if (empty($street[0])) {
$street = new stdClass();
$street->vid = 4;
$street->name = trim($om__Pnode->baseInformation->objectAddress->streetAddress);
taxonomy_term_save($street);
}
else {
$street = array_shift($street);
}
$node->field_Pnode_street['und'][0]['tid'] = $street->tid;
//Province -- Taxonomy
$province = taxonomy_get_term_by_name($om__Pnode->baseInformation->objectAddress->area);
if (empty($province[0])) {
$province = new stdClass();
$province->vid = 3;
$province->name = trim($om__Pnode->baseInformation->objectAddress->area);
taxonomy_term_save($province);
}
else {
$province = array_shift($province);
}
$node->field_Pnode_province['und'][0]['tid'] = $province->tid;
//City -- Taxonomy
$city = taxonomy_get_term_by_name($om__Pnode->baseInformation->objectAddress->city);
if (empty($city[0])) {
$city = new stdClass();
$city->vid = 2;
$city->name = trim($om__Pnode->baseInformation->objectAddress->city);
taxonomy_term_save($city);
}
else {
$city = array_shift($city);
}
$node->field_Pnode_city['und'][0]['tid'] = $city->tid;
//Submit node
$node = node_submit($node);
//Save node
node_save($node);
drupal_set_message(t('Pnode :node imported successfully with Nod id :nid', array(':node' => $node->title, ':nid' => $node->nid)));
}
}
?>
Info file details