private function _loadComments()
 {
     $youtube = new YouTube($this->_developerKey);
     $data = $youtube->getComments($this->_id, $this->_maxResults, $this->_startIndex);
     $xml = new SimpleXMLElement($data);
     //fetch comments
     $this->_comments = array();
     foreach ($xml->entry as $entry) {
         $comment = new YouTubeVideoComment($entry);
         $this->_comments[] = $comment;
     }
     //fetch list data
     $namespaces = $xml->getNameSpaces(true);
     if ($namespaces) {
         $openSearch = $entry->children($namespaces['openSearch']);
     } else {
         return FALSE;
     }
     $this->_totalVideos = (int) $openSearch->totalResults;
     $this->_startIndex = (int) $openSearch->startIndex;
     $this->_maxResults = (int) $openSearch->itemsPerPage;
     if ($this->_comments) {
         return TRUE;
     }
     /* else */
     return FALSE;
 }
Example #2
0
 public static function XtractMessage($p_cloudBankException)
 {
     /* This is a work around to get the error message from the exception
     	    coming from the seriously broken SOAPFault implementation of SCA_SDO
     	 */
     $v_exceptionMessage = $p_cloudBankException->getMessage();
     if ($v_xmlOpeningTagPos = strpos($v_exceptionMessage, '<?xml')) {
         $v_soapFaultXML = new SimpleXMLElement(substr($v_exceptionMessage, $v_xmlOpeningTagPos));
         $v_soapFaultXMLNamespaces = $v_soapFaultXML->getNameSpaces();
         $v_message = (string) $v_soapFaultXML->children($v_soapFaultXMLNamespaces['SOAP-ENV'])->Body->Fault->children()->faultstring;
     } else {
         $v_message = $v_exceptionMessage;
     }
     return $v_message;
 }
Example #3
0
 private function _loadInfo()
 {
     $data = $this->_youtube->getUserData($this->_username);
     $xml = new SimpleXMLElement($data);
     $namespaces = $xml->getNameSpaces(true);
     if ($namespaces) {
         $yt = $xml->children($namespaces['yt']);
     } else {
         return FALSE;
     }
     $this->_channelTitle = (string) $xml->title;
     $this->_age = (string) $yt->age;
     $this->_gender = (string) $yt->gender;
     $this->_location = (string) $yt->location;
     $this->_loaded = TRUE;
 }
function get_itunes_top100_song()
{
    echo "get itunes top 100 song ...";
    $ar = array();
    $html = get_data("https://itunes.apple.com/de/rss/topsongs/limit=100/explicit=true/xml", "ITUNES");
    try {
        $arx = new SimpleXMLElement($html);
    } catch (Exception $e) {
        return "";
    }
    $namespaces = $arx->getNameSpaces(true);
    foreach ($arx->entry as $a) {
        $im = $a->children($namespaces['im']);
        $ar[] = array('title' => (string) $im->name, 'artist' => (string) $im->artist, 'id' => (string) $a->id);
    }
    echo "done\n";
    return $ar;
}
Example #5
0
 /**
  * Create a entry for given item
  *
  * @param SimpleXMLElement $item
  * @param RDR_Feed $feed
  * @return RDR_Entry | null
  */
 private static function createEntryForItem($item, RDR_Feed $feed)
 {
     $guid = self::xmlValue($item->guid);
     if (!$guid) {
         $guid = self::xmlValue($item->id);
     }
     if (!$guid) {
         $guid = self::xmlValue($item->link);
     }
     $entry = RDR_Entry::get($feed, $guid);
     $now = dt("now");
     $entry->title = null;
     $entry->title = cut(self::xmlValue($item->title), 252, "...");
     $entry->text = null;
     $entry->text = self::xmlValue($item->description);
     if (!$entry->text) {
         $entry->text = self::xmlValue($item->content);
     }
     if (!$entry->text) {
         $entry->text = self::xmlValue($item->summary);
     }
     $entry->datetime = null;
     $entry->datetime = dt(self::xmlValue($item->pubDate));
     if (!$entry->datetime->valid) {
         $entry->datetime = dt(self::xmlValue($item->published));
     }
     if (!$entry->datetime->valid) {
         $entry->datetime = dt(self::xmlValue($item->updated));
     }
     if ($entry->datetime->valid && $entry->datetime->getUnixtime() > $now->getUnixtime()) {
         $entry->datetime = $now;
     }
     $count = count($item->link);
     foreach ($item->link as $link) {
         if ($count > 1) {
             if (self::xmlAttr($link, "type") == "text/html") {
                 $entry->link = self::xmlAttr($link, "href");
             }
         } else {
             $entry->link = self::xmlValue($link);
         }
     }
     if (!$entry->link) {
         $entry->link = self::xmlValue($item->link);
     }
     if (!$entry->link) {
         $entry->link = self::xmlAttr($item->link, "href");
     }
     $entry->image = null;
     $enclosures = $item->xpath("enclosure");
     if ($enclosures) {
         foreach ($enclosures as $encl) {
             if ($entry->image) {
                 break;
             }
             if (self::xmlAttr($encl, "type")) {
                 if (strpos(self::xmlAttr($encl, "type"), "image") !== false) {
                     $entry->image = self::xmlAttr($encl, "url");
                 }
             } elseif (self::xmlAttr($encl, "url")) {
                 if (preg_match("~jpg|jpeg|gif|png~i", self::xmlAttr($encl, "url"))) {
                     $entry->image = self::xmlAttr($encl, "url");
                 }
             }
         }
     }
     $namespaces = $item->getNameSpaces(true);
     if ($namespaces) {
         foreach ($namespaces as $ns) {
             $tmp = $item->children($ns);
             foreach ($tmp as $key => $value) {
                 if (!$entry->datetime->valid && strpos($key, "date") !== false) {
                     $entry->datetime = dt(self::xmlValue($value));
                 }
                 if (!$entry->title && strpos($key, "title") !== false) {
                     $entry->title = cut(self::xmlValue($value), 252, "...");
                 }
                 if (strpos($key, "description") !== false || strpos($key, "content") !== false || strpos($key, "encoded") !== false) {
                     $text = self::xmlValue($value);
                     if ($text && (!$entry->text || mb_strlen($text) > $entry->text)) {
                         $entry->text = $text;
                     }
                     if (!$entry->image) {
                         $attr = $value->attributes();
                         $url = isset($attr->url) ? self::xmlValue($attr->url) : null;
                         $type = isset($attr->type) ? self::xmlValue($attr->type) : null;
                         if ($url && (preg_match("~\\.(jpg|jpeg|png|gif)~i", $url) || preg_match("~image\\/~i", $type))) {
                             $entry->image = $url;
                         }
                     }
                 }
             }
         }
     }
     # if datetime is older than maxlifetime than don't store
     if (!$entry->datetime->valid) {
         $entry->datetime = $now;
     }
     $time = RDR_Setting::get("maxentrylifetime")->value;
     if ($time && $entry->datetime->getUnixtime() < dt("now {$time}")->getUnixtime()) {
         return;
     }
     $entry->store();
     return $entry;
 }
		/**
		* This function takes in a SimpleXML Object, sets the template variables and parses the template based on it.
		* The expected object is a 'entry' node from an ATOM feed from YouTube.
		*
		* @param SimpleXMLElement $video An 'entry' node from an ATOM feed.
		*/
		private function parseVideoRow($video)
		{
			$rating      = '';
			$ratingStars = '';
			$viewCount   = '0';

			// get the thumbnail image
			$namespaces = $video->getNameSpaces(true);

			// get the media namespace
			$media = $video->children($namespaces['media']);

			// get the gd namespace, which contains information about the video ratings
			$ratings = $video->children($namespaces['gd']);

			// get the yt namespace, which contains information abouts the video statistics and video ID
			$stats = $video->children($namespaces['yt']);

			$thumbnail = $media->group->thumbnail->attributes();
			$length    = $media->group->content->attributes();
			$videoInfo = $media->group->children($namespaces['yt']);
			$duration  = $videoInfo->duration->attributes();

			// finding the video ID can be tricky
			$videoId = trim((string)@$videoInfo->videoid);

			if(empty($videoId)) {
				$videoId = @$video->id;
				if(!empty($videoId)) {
					$videoId = str_replace('http://gdata.youtube.com/feeds/api/videos/', '', $videoId);
				}
			}

			// the duration of the vieo is given in seconds, we want to format it into minutes
			$length = date('G:i:s', (int)$duration['seconds']);

			// if it's less than an hour, don't show zero for the hours
			if(substr($length,0, 2) == '0:') {
				$length = substr($length, 2);
			}

			// not all videos come with statistics, so if there is none, just ignore this code block
			if(isset($stats->statistics)) {
				$statsInfo = $stats->statistics->attributes();
				$viewCount = $statsInfo['viewCount'];
			}

			// not all videos come with rating information :(
			if(isset($ratings->rating)) {
				$rating = $ratings->rating->attributes();
				$averageRating = (float)$rating['average'];
				$ratingNumber = round($averageRating, 0);
				$ratingNumber = min($ratingNumber, 5);
				$ratingNumber = max($ratingNumber, 1);

				for($i=1; $i<=$ratingNumber; $i++) {
					$ratingStars .= $this->template->render('Snippets/RatingOn.html');
				}

				for($i=1; $i<=(5-$ratingNumber); $i++) {
					$ratingStars .= $this->template->render('Snippets/RatingOff.html');
				}
			}

			// set up the video summary, we need to make sure it's a string and that it's not too long
			$summary = (string)$media->group->description;
			if(strlen($summary) > 85) {
				$summary = substr($summary, 0, 85) . "...";
			}

			// set up the video title, we need to make sure it's a string and that it's not too long
			$title = (string)$video->title;
			if(strlen($title) > 25) {
				$title = substr($title, 0, 23) . "...";
			}

			$GLOBALS['videoLength']    = $length;
			$GLOBALS['videoRating']    = $ratingStars;
			$GLOBALS['videoId']        = $videoId;
			$GLOBALS['videoViews']     = number_format($viewCount);
			$GLOBALS['videoTitle']     = isc_html_escape($title);
			$GLOBALS['videoTitleFull'] = isc_html_escape((string)$video->title);
			$GLOBALS['videoImage']     = (string)$thumbnail['url'];
			$GLOBALS['videoSummary']   = isc_html_escape($summary);
			$GLOBALS['videoSummaryFull'] = isc_html_escape((string)$media->group->description);

			$html = $this->template->render('Snippets/YouTubeVideoRow.html');

			// IE doesn't like new lines in lists at all, it adds weird spacing between list items.
			$html = str_replace(array("\r", "\n"), '', $html);

			return $html;
		}
Example #7
0
 private function _parseAtom($data)
 {
     $xml = new SimpleXMLElement($data);
     //fetch videos
     $this->_videos = array();
     foreach ($xml->entry as $entry) {
         $video = new YouTubeVideo($entry, $this->_developerKey);
         $this->_videos[] = $video;
     }
     //fetch list data
     $namespaces = $xml->getNameSpaces(true);
     if ($namespaces) {
         $openSearch = $xml->children($namespaces['openSearch']);
     } else {
         return FALSE;
     }
     $this->_totalVideos = (int) $openSearch->totalResults;
     $this->_startIndex = (int) $openSearch->startIndex;
     $this->_maxResults = (int) $openSearch->itemsPerPage;
     if ($this->_videos) {
         return TRUE;
     }
     /* else */
     return FALSE;
 }