diff options
| author | Steve Clay <steve@mrclay.org> | 2012-04-09 17:05:57 -0400 | 
|---|---|---|
| committer | Steve Clay <steve@mrclay.org> | 2012-04-09 17:05:57 -0400 | 
| commit | f399afdd2e3cc072efaca069b7a874c7801b31f6 (patch) | |
| tree | a2f5d4fb13f5d2b142953451f37294d4b8981598 /lib | |
| parent | e80bb29671b7887d5749a9eb147be38e6f0401f4 (diff) | |
| download | elgg-f399afdd2e3cc072efaca069b7a874c7801b31f6.tar.gz elgg-f399afdd2e3cc072efaca069b7a874c7801b31f6.tar.bz2 | |
switched to platform classes. see https://github.com/Elgg/videolist/issues/4
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Videolist/Platform/Bliptv.php | 39 | ||||
| -rw-r--r-- | lib/Videolist/Platform/Gisstv.php | 51 | ||||
| -rw-r--r-- | lib/Videolist/Platform/Metacafe.php | 39 | ||||
| -rw-r--r-- | lib/Videolist/Platform/Vimeo.php | 41 | ||||
| -rw-r--r-- | lib/Videolist/Platform/Youtube.php | 38 | ||||
| -rw-r--r-- | lib/Videolist/PlatformInterface.php | 23 | ||||
| -rw-r--r-- | lib/bliptv.php | 29 | ||||
| -rw-r--r-- | lib/gisstv.php | 41 | ||||
| -rw-r--r-- | lib/metacafe.php | 29 | ||||
| -rw-r--r-- | lib/videolist.php | 61 | ||||
| -rw-r--r-- | lib/vimeo.php | 31 | ||||
| -rw-r--r-- | lib/youtube.php | 28 | 
12 files changed, 266 insertions, 184 deletions
| diff --git a/lib/Videolist/Platform/Bliptv.php b/lib/Videolist/Platform/Bliptv.php new file mode 100644 index 000000000..6956e060d --- /dev/null +++ b/lib/Videolist/Platform/Bliptv.php @@ -0,0 +1,39 @@ +<?php + +class Videolist_Platform_Bliptv implements Videolist_PlatformInterface +{ +    public function getType() +    { +        return "bliptv"; +    } + +    public function parseUrl($url) +    { +        $parsed = parse_url($url); +        $path = explode('/', $parsed['path']); + +        if ($parsed['host'] != 'blip.tv' || count($path) < 3) { +            return false; +        } + +        return array( +            'videotype' => 'bliptv', +            'video_id' => $parsed['path'], +        ); +    } + +    public function getData($parsed) +    { +        $video_id = $parsed['video_id']; + +        $buffer = file_get_contents('http://blip.tv'.$video_id.'?skin=rss'); +        $xml = new SimpleXMLElement($buffer); + +        return array( +            'title' => current($xml->xpath('/rss/channel/item/title')), +            'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))), +            'thumbnail' => current($xml->xpath('/rss/channel/item/media:thumbnail/@url')), +            'embedurl' => current($xml->xpath('/rss/channel/item/blip:embedUrl')), +        ); +    } +} diff --git a/lib/Videolist/Platform/Gisstv.php b/lib/Videolist/Platform/Gisstv.php new file mode 100644 index 000000000..f811619a8 --- /dev/null +++ b/lib/Videolist/Platform/Gisstv.php @@ -0,0 +1,51 @@ +<?php + +class Videolist_Platform_Gisstv implements Videolist_PlatformInterface +{ +    public function getType() +    { +        return "gisstv"; +    } + +    public function parseUrl($url) +    { +        $parsed = parse_url($url); +        $path = explode('/', $parsed['path']); + +        if ($parsed['host'] != 'giss.tv' || $path[1] != 'dmmdb') { +            return false; +        } + +        if($path[2] == 'contents' && isset($path[3])) { +            $video_id = $path[3]; +        } elseif($path[3] == 'contents' && isset($path[4])) { +            $video_id = $path[4]; +        } else { +            return false; +        } + +        return array( +            'videotype' => 'gisstv', +            'video_id' => $video_id, +        ); +    } + +    public function getData($parsed) +    { +        $video_id = $parsed['video_id']; + +        $buffer = file_get_contents('http://giss.tv/dmmdb//rss.php'); +        $xml = new SimpleXMLElement($buffer); + +        $data = array(); +        foreach($xml->xpath('/rss/channel/item') as $item){ +            if ($item->link === 'http://giss.tv/dmmdb//contents/'.$video_id) { +                $data['title'] = $item->title; +                $data['description'] = strip_tags($item->description); +                $data['thumbnail'] = $item->thumbnail; +                break; +            } +        } +        return $data; +    } +} diff --git a/lib/Videolist/Platform/Metacafe.php b/lib/Videolist/Platform/Metacafe.php new file mode 100644 index 000000000..3cf2fb8ce --- /dev/null +++ b/lib/Videolist/Platform/Metacafe.php @@ -0,0 +1,39 @@ +<?php + +class Videolist_Platform_Metacafe implements Videolist_PlatformInterface +{ +    public function getType() +    { +        return "metacafe"; +    } + +    public function parseUrl($url) +    { +        $parsed = parse_url($url); +        $path = explode('/', $parsed['path']); + +        if ($parsed['host'] != 'www.metacafe.com' || $path[1] != 'watch' || !(int) $path[2]) { +            return false; +        } + +        return array( +            'videotype' => 'metacafe', +            'video_id' => $path[2], +        ); +    } + +    public function getData($parsed) +    { +        $video_id = $parsed['video_id']; + +        $buffer = file_get_contents("http://www.metacafe.com/api/item/$video_id"); +        $xml = new SimpleXMLElement($buffer); + +        return array( +            'title' => current($xml->xpath('/rss/channel/item/title')), +            'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))), +            'thumbnail' => current($xml->xpath('/rss/channel/item/media:thumbnail/@url')), +            'embedurl' => current($xml->xpath('/rss/channel/item/media:content/@url')), +        ); +    } +} diff --git a/lib/Videolist/Platform/Vimeo.php b/lib/Videolist/Platform/Vimeo.php new file mode 100644 index 000000000..82bd57309 --- /dev/null +++ b/lib/Videolist/Platform/Vimeo.php @@ -0,0 +1,41 @@ +<?php + +class Videolist_Platform_Vimeo implements Videolist_PlatformInterface +{ +    public function getType() +    { +        return "vimeo"; +    } + +    public function parseUrl($url) +    { +        $parsed = parse_url($url); +        $path = explode('/', $parsed['path']); + +        if ($parsed['host'] != 'vimeo.com' || !(int) $path[1]) { +            return false; +        } + +        return array( +            'videotype' => 'vimeo', +            'video_id' => $path[1], +        ); +    } + +    public function getData($parsed) +    { +        $video_id = $parsed['video_id']; + +        $buffer = file_get_contents("http://vimeo.com/api/v2/video/$video_id.xml"); +        $xml = new SimpleXMLElement($buffer); + +        $videos = $xml->children(); +        $video = $videos[0]; + +        return array( +            'title' => $video->title, +            'description' => strip_tags($video->description), +            'thumbnail' => $video->thumbnail_medium, +        ); +    } +} diff --git a/lib/Videolist/Platform/Youtube.php b/lib/Videolist/Platform/Youtube.php new file mode 100644 index 000000000..41c7d1252 --- /dev/null +++ b/lib/Videolist/Platform/Youtube.php @@ -0,0 +1,38 @@ +<?php + +class Videolist_Platform_Youtube implements Videolist_PlatformInterface +{ +    public function getType() +    { +        return "youtube"; +    } + +    public function parseUrl($url) +    { +        $parsed = parse_url($url); +        parse_str($parsed['query'], $query); + +        if ($parsed['host'] != 'www.youtube.com' || $parsed['path'] != '/watch' || !isset($query['v'])) { +            return false; +        } + +        return array( +            'videotype' => 'youtube', +            'video_id' => $query['v'], +        ); +    } + +    public function getData($parsed) +    { +        $video_id = $parsed['video_id']; + +        $buffer = file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$video_id); +        $xml = new SimpleXMLElement($buffer); + +        return array( +            'title' => $xml->title, +            'description' => strip_tags($xml->content), +            'thumbnail' => "http://img.youtube.com/vi/$video_id/default.jpg", +        ); +    } +} diff --git a/lib/Videolist/PlatformInterface.php b/lib/Videolist/PlatformInterface.php new file mode 100644 index 000000000..25ca019e9 --- /dev/null +++ b/lib/Videolist/PlatformInterface.php @@ -0,0 +1,23 @@ +<?php + +interface Videolist_PlatformInterface { +    /** +     * @abstract +     * @return string +     */ +    public function getType(); + +    /** +     * @abstract +     * @param string $url +     * @return array +     */ +    public function parseUrl($url); + +    /** +     * @abstract +     * @param array $parsed +     * @return array +     */ +    public function getData($parsed); +} diff --git a/lib/bliptv.php b/lib/bliptv.php deleted file mode 100644 index f4c0f772c..000000000 --- a/lib/bliptv.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -function videolist_parseurl_bliptv($url) { -	$parsed = parse_url($url); -	$path = explode('/', $parsed['path']); - -	if ($parsed['host'] != 'blip.tv' || count($path) < 3) { -		return false; -	} -	 -	return array( -		'videotype' => 'bliptv', -		'video_id' => $parsed['path'], -	); -} - -function videolist_get_data_bliptv($parsed){ -	$video_id = $parsed['video_id']; -	 -	$buffer = file_get_contents('http://blip.tv'.$video_id.'?skin=rss'); -	$xml = new SimpleXMLElement($buffer); -	 -	return array( -		'title' => sanitize_string(current($xml->xpath('/rss/channel/item/title'))), -		'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))), -		'thumbnail' => sanitize_string(current($xml->xpath('/rss/channel/item/media:thumbnail/@url'))), -		'embedurl' => sanitize_string(current($xml->xpath('/rss/channel/item/blip:embedUrl'))), -	); -} diff --git a/lib/gisstv.php b/lib/gisstv.php deleted file mode 100644 index 24e11340a..000000000 --- a/lib/gisstv.php +++ /dev/null @@ -1,41 +0,0 @@ -<?php - -function videolist_parseurl_gisstv($url) { -	$parsed = parse_url($url); -	$path = explode('/', $parsed['path']); - -	if ($parsed['host'] != 'giss.tv' || $path[1] != 'dmmdb') { -		return false; -	} -	 -	if($path[2] == 'contents' && isset($path[3])) { -		$video_id = $path[3]; -	} elseif($path[3] == 'contents' && isset($path[4])) { -		$video_id = $path[4]; -	} else { -		return false; -	} -	 -	return array( -		'videotype' => 'gisstv', -		'video_id' => $video_id, -	); -} - -function videolist_get_data_gisstv($parsed){ -	$video_id = $parsed['video_id']; -	 -	$buffer = file_get_contents('http://giss.tv/dmmdb//rss.php'); -	$xml = new SimpleXMLElement($buffer); -	 -	$data = array(); -	foreach($xml->xpath('/rss/channel/item') as $item){ -		if(sanitize_string($item->link) == 'http://giss.tv/dmmdb//contents/'.$video_id) { -			$data['title'] = sanitize_string($item->title); -			$data['description'] = strip_tags($item->description); -			$data['thumbnail'] = sanitize_string($item->thumbnail); -			break; -		} -	} -	return $data; -} diff --git a/lib/metacafe.php b/lib/metacafe.php deleted file mode 100644 index 34b006a32..000000000 --- a/lib/metacafe.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -function videolist_parseurl_metacafe($url) { -	$parsed = parse_url($url); -	$path = explode('/', $parsed['path']); - -	if ($parsed['host'] != 'www.metacafe.com' || $path[1] != 'watch' || !(int) $path[2]) { -		return false; -	} -	 -	return array( -		'videotype' => 'metacafe', -		'video_id' => $path[2], -	); -} - -function videolist_get_data_metacafe($parsed){ -	$video_id = $parsed['video_id']; -	 -	$buffer = file_get_contents("http://www.metacafe.com/api/item/$video_id"); -	$xml = new SimpleXMLElement($buffer); -	 -	return array( -		'title' => sanitize_string(current($xml->xpath('/rss/channel/item/title'))), -		'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))), -		'thumbnail' => sanitize_string(current($xml->xpath('/rss/channel/item/media:thumbnail/@url'))), -		'embedurl' => sanitize_string(current($xml->xpath('/rss/channel/item/media:content/@url'))), -	); -} diff --git a/lib/videolist.php b/lib/videolist.php index ae2441847..93b27b51c 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -1,36 +1,45 @@  <?php -define('VIDEOLIST_SUPPORTED_PLATFORMS', 'youtube, vimeo, metacafe, bliptv, gisstv'); - -foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){ -	include(elgg_get_plugins_path()."videolist/lib/$videotype.php"); -} -  /** - * @param string $url   * @return array   */ -function videolist_parseurl($url){ -	foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){ -		if (is_callable("videolist_parseurl_$videotype")){ -			if ($parsed = call_user_func("videolist_parseurl_$videotype", $url)) { -				return $parsed; -			} -		} -	} -	return array(); +function videolist_get_default_platforms() { +    static $platforms = array(); +    if (! $platforms) { +        require dirname(__FILE__) . '/Videolist/PlatformInterface.php'; +        $path = dirname(__FILE__) . '/Videolist/Platform'; +        foreach (scandir($path) as $filename) { +            if (preg_match('/^(\\w+)\\.php$/', $filename, $m)) { +                require "$path/$filename"; +                $class = 'Videolist_Platform_' . $m[1]; +                $platform = new $class(); +                if ($platform instanceof Videolist_PlatformInterface) { +                    /* @var Videolist_PlatformInterface $platform */ +                    $platforms[$platform->getType()][] = $platform; +                } +            } +        } +    } +    return $platforms;  }  /** - * @param array $parsed - * @return array + * @param string $url + * @return array [parsed, platform]   */ -function videolist_get_data($parsed) { -	$videotype = $parsed['videotype']; - -	if(is_callable("videolist_get_data_$videotype")){ -		return array_merge($parsed, call_user_func("videolist_get_data_$videotype", $parsed)); -	} else { -		return $parsed; -	} +function videolist_parse_url($url) { +    $parsed = parse_url($url); +    $params['url'] = $url; +    $platforms = videolist_get_default_platforms(); +	$platforms = elgg_trigger_plugin_hook('videolist:prepare', 'platforms', $params, $platforms); +    foreach ($platforms as $list) { +        foreach ($list as $platform) { +            /* @var Videolist_PlatformInterface $platform */ +            $parsed = $platform->parseUrl($url); +            if ($parsed) { +                return array($parsed, $platform); +            } +        } +    } +	return false;  } diff --git a/lib/vimeo.php b/lib/vimeo.php deleted file mode 100644 index 0433c5a94..000000000 --- a/lib/vimeo.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php - -function videolist_parseurl_vimeo($url) { -	$parsed = parse_url($url); -	$path = explode('/', $parsed['path']); -	 -	if ($parsed['host'] != 'vimeo.com' || !(int) $path[1]) { -		return false; -	} - -	return array( -		'videotype' => 'vimeo', -		'video_id' => $path[1], -	); -} - -function videolist_get_data_vimeo($parsed){ -	$video_id = $parsed['video_id']; -	 -	$buffer = file_get_contents("http://vimeo.com/api/v2/video/$video_id.xml"); -	$xml = new SimpleXMLElement($buffer); -	 -	$videos = $xml->children(); -	$video = $videos[0]; -	 -	return array( -		'title' => sanitize_string($video->title), -		'description' => strip_tags($video->description), -		'thumbnail' => sanitize_string($video->thumbnail_medium), -	); -} diff --git a/lib/youtube.php b/lib/youtube.php deleted file mode 100644 index 6ed9344b0..000000000 --- a/lib/youtube.php +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -function videolist_parseurl_youtube($url) { -	$parsed = parse_url($url); -	parse_str($parsed['query'], $query); -	 -	if ($parsed['host'] != 'www.youtube.com' || $parsed['path'] != '/watch' || !isset($query['v'])) { -		return false; -	} -	 -	return array( -		'videotype' => 'youtube', -		'video_id' => $query['v'], -	); -} - -function videolist_get_data_youtube($parsed){ -	$video_id = $parsed['video_id']; -	 -	$buffer = file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$video_id); -	$xml = new SimpleXMLElement($buffer); -	 -	return array( -		'title' => sanitize_string($xml->title), -		'description' => strip_tags($xml->content), -		'thumbnail' => "http://img.youtube.com/vi/$video_id/default.jpg", -	); -} | 
