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