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
DrupalD
Enroll to Drupal 10 Training