Kanal-Aktualisierungen mittels youtube RSS feeds verfolgen · 2013-04-14
Um Youtube-Kanäle in Selfoss zu verfolgen habe ich folgenden spout zusammengehackt. Abgelegt wird er unter spouts\youtube\youtube.php. Über die youtube API gdata wird ein RSS-Feed erzeugt und dann an Simplepie übergeben. Youtube API
Es wird der Benutzername statt der Benutzer-ID benutzt, noch lässt das die Youtube-API zu.
<?PHP
namespace spouts\youtube;
/** * Spout for fetching an Youtube rss feed * * @package spouts * @subpackage rss * @copyright Copyright (c) Tobias Zeising (http://www.aditu.de) * @license GPLv3 (http://www.gnu.org/licenses/gpl-3.0.html) * @author Tobias Zeising <tobias.zeising@aditu.de> * @copywork Arndt Staudinger <info@clucose.com> April 2013 */ class youtube extends \spouts\rss\feed {
/** * name of source * * @var string */ public $name = 'Youtube RSS Feed';
/** * description of this source type * * @var string */ public $description = 'An Youtube RSS Feed as source';
/** * config params * array of arrays with name, type, default value, required, validation type * * - Values for type: text, password, checkbox * - Values for validation: alpha, email, numeric, int, alnum, notempty * * e.g. * array( * "id" => array( * "title" => "URL", * "type" => "text", * "default" => "", * "required" => true, * "validation" => array("alnum") * ), * .... * ) * * @var bool|mixed */ public $params = array( "channel" => array( "title" => "channel", "type" => "text", "default" => "", "required" => true, "validation" => array("notempty") ) );
/** * loads content for given source * I supress all Warnings of SimplePie for ensuring * working plugin in PHP Strict mode * * @return void * @param mixed $params the params of this source */ public function load($params) { parent::load(array( 'url' => 'http://gdata.youtube.com/feeds/api/users/' . $params['channel'] . '/uploads?alt=rss&orderby=published') ); }
/** * returns the date of this item * * @return string date */ public function getDate() { if($this->items!==false && $this->valid()){ $date1 = @current($this->items)->get_item_tags('', 'pubDate'); $date = date('Y-m-d H:i:s', strtotime($date1[0]['data'])); } if(strlen($date)==0) $date = date('Y-m-d H:i:s'); return $date; }
/** * returns the thumbnail of this item (for multimedia feeds) * * @return mixed thumbnail data */ public function getThumbnail() { if($this->items===false || $this->valid()===false) return "";
$item = current($this->items);
// search enclosures (media tags) if(count(@$item->get_enclosures()) > 0) {
// thumbnail given? if(@$item->get_enclosure(0)->get_thumbnail()) return @$item->get_enclosure(0)->get_thumbnail();
// link given? elseif(@$item->get_enclosure(0)->get_link()) return @$item->get_enclosure(0)->get_link();
// no enclosures: search image link in content } else {
$image = $this->getImage(@$item->get_content()); if($image!==false) return $image; }
return ""; } }
