public function parseItem($itemArray, $user, $item = null, $ingestor = null) { if (!isset($item)) { $item = new Item(); // set the defaults $item->setDateCreated(new \DateTime("now")); $item->setChildItemsCount(0); $item->setEnabled(true); $item->setPublished(false); $item->setUser($user); } $item->setDateUpdated(new \DateTime("now")); // parse the item if (isset($ingestor)) { $item->setIngestedBy($ingestor); } if (isset($itemArray['title'])) { $item->setTitle($itemArray['title']); } if (isset($itemArray['description'])) { $item->setDescription($itemArray['description']); } if (isset($itemArray['text'])) { $mediaType = $item->getMediaType(); $text = $item->getText(); if ($mediaType !== 'project' || $mediaType == 'project' && !isset($text)) { if (is_array($itemArray['text'])) { $itemJson = json_encode($itemArray['text']); // quick fix to encode integers properly before upgrading to php >= 5.3.3 $itemJson = preg_replace("/\"(\\d+)\"/", '$1', $itemJson); $item->setText($itemJson); } else { $item->setText($itemArray['text']); } } } if (isset($itemArray['uri'])) { $item->setUri($itemArray['uri']); } if (isset($itemArray['attribution_uri'])) { $item->setAttributionUri($itemArray['attribution_uri']); } if (isset($itemArray['media_type'])) { $item->setMediaType($itemArray['media_type']); } if (isset($itemArray['layer_type'])) { $item->setLayerType($itemArray['layer_type']); } if (isset($itemArray['media_geo_latitude'])) { $item->setMediaGeoLatitude($itemArray['media_geo_latitude']); } if (isset($itemArray['media_geo_longitude'])) { $item->setMediaGeoLongitude($itemArray['media_geo_longitude']); } if (isset($itemArray['headline'])) { $item->setHeadline($itemArray['headline']); } $thumbnailSize = 4; $mediaType = $item->getMediaType(); if ($mediaType === 'project') { $thumbnailSize = 6; } if (!isset($itemArray['thumbnail_url']) || isset($itemArray['create_thumbnail'])) { $thumbnail = $this->thumbnailService->getItemThumbnail($item->getUri(), $thumbnailSize); } else { $thumbnail = $itemArray['thumbnail_url']; } if (null !== $thumbnail) { $item->setThumbnailUrl($thumbnail); } if (isset($itemArray['media_date_created'])) { $parsedDate = strtotime($itemArray['media_date_created']); if ($parsedDate) { $d = date("Y-m-d h:i:s", $parsedDate); $item->setMediaDateCreated(new \DateTime($d)); } } if (isset($itemArray['media_creator_username'])) { $item->setMediaCreatorUsername($itemArray['media_creator_username']); } else { $item->setMediaCreatorUsername($user->getDisplayName()); } if (isset($itemArray['media_creator_realname'])) { $item->setMediaCreatorRealname($itemArray['media_creator_realname']); } else { $item->setMediaCreatorUsername($user->getDisplayName()); } if (isset($itemArray['archive'])) { $item->setArchive($itemArray['archive']); } if (isset($itemArray['location'])) { $item->setLocation($itemArray['location']); } if (isset($itemArray['license'])) { $item->setLicense($itemArray['license']); } if (isset($itemArray['attributes'])) { $item->setAttributes($itemArray['attributes']); } if (isset($itemArray['tags'])) { $item->setTags($itemArray['tags']); } if (isset($itemArray['published'])) { $item->setPublished($itemArray['published']); } if (isset($itemArray["child_items"])) { foreach ($itemArray["child_items"] as $child_item) { $child = self::parseItem($child_item, $user, $ingestor); if (isset($child)) { $item->addChildItem($child); } } } return $item; }
public function load($url, $parameters = null) { $regexMatches = $parameters["regex_matches"]; $loadCollectionItems = $parameters["load_child_items"]; $setId = $regexMatches[1]; // bam if (strpos($setId, 'PL') === 0) { $setId = substr($setId, 2); } // apparently the playlist ID changed... need to remove the PL prefix. $originalUrl = "http://gdata.youtube.com/feeds/api/playlists/{$setId}?v=2&alt=json&max_results=50"; // read feed into SimpleXML object $playlistInfo = json_decode(file_get_contents($originalUrl), true); $entry = $playlistInfo["feed"]; $collection = new Item(); $collection->setTitle($entry["title"]["\$t"]); $collection->setArchive("Youtube"); $collection->setDescription($entry["subtitle"]["\$t"]); $collection->setMediaType('Collection'); $collection->setLayerType('Youtube'); $collection->setUri($url); $collection->setAttributionUri($entry["media\$group"]["media\$content"][0]["url"]); $collection->setEnabled(true); $collection->setPublished(true); $collection->setChildItemsCount($entry["openSearch\$totalResults"]["\$t"]); $collection->setMediaCreatorUsername($entry["author"][0]["name"]["\$t"]); $collection->setMediaCreatorRealname('Unknown'); foreach ($entry["entry"] as $child) { $collection->setThumbnailUrl($child["media\$group"]["media\$thumbnail"][0]["url"]); if ($loadCollectionItems == false) { // we just want the set description - get a thumbnail from the first item and break break; } $item = new Item(); $item->setUri($child["media\$group"]["yt\$videoid"]["\$t"]); $item->setTitle($child["title"]["\$t"]); $item->setDescription($child["media\$group"]["media\$description"]["\$t"]); $item->setAttributionUri($child["media\$group"]["media\$player"]["url"]); $item->setMediaDateCreated($child["published"]["\$t"]); $item->setDateCreated(new \DateTime("now")); $item->setMediaType('Video'); $item->setLayerType('Youtube'); $item->setChildItemsCount(0); $item->setThumbnailUrl($child["media\$group"]["media\$thumbnail"][0]["url"]); $item->setArchive("Youtube"); $categories = $child["category"]; if (isset($categories)) { $itemTags = array(); foreach ($categories as $cat) { if (strpos($cat["term"], 'gdata.youtube.com') === false) { array_push($itemTags, $cat["term"]); } } $item->setTags($itemTags); } $item->setMediaCreatorUsername($child["author"][0]["name"]["\$t"]); $item->setMediaCreatorRealname($child["author"][0]["name"]["\$t"]); $item->setLicense($child["media\$group"]["media\$license"]["\$t"]); $accessControl = $child["yt\$accessControl"]; foreach ($accessControl as $access) { if ($access["action"] == "embed" && $access["permission"] == "allowed") { $collection->addChildItem($item); } } } return parent::returnResponse($collection, true, true); }