summaryrefslogtreecommitdiffstats
path: root/fetcher
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-11-11 13:21:51 +0100
committerBernhard Posselt <dev@bernhard-posselt.com>2014-11-11 13:22:00 +0100
commitbff164146b101a18392f22cd942ec1c9a8589628 (patch)
treeaf4fe3e78cd0880656f0cbb4f2c4bdace35fea7b /fetcher
parentdf4cbdb81d6cf8ec532e099b44c9ec7d009f28c6 (diff)
add youtube playlist support, fix #620, fix #618
Diffstat (limited to 'fetcher')
-rw-r--r--fetcher/youtubefetcher.php75
1 files changed, 75 insertions, 0 deletions
diff --git a/fetcher/youtubefetcher.php b/fetcher/youtubefetcher.php
new file mode 100644
index 000000000..cc96e987f
--- /dev/null
+++ b/fetcher/youtubefetcher.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * ownCloud - News
+ *
+ * This file is licensed under the Affero General Public License version 3 or
+ * later. See the COPYING file.
+ *
+ * @author Bernhard Posselt <dev@bernhard-posselt.com>
+ * @copyright Bernhard Posselt 2012, 2014
+ */
+
+namespace OCA\News\Fetcher;
+
+
+class YoutubeFetcher implements IFeedFetcher {
+
+ private $feedFetcher;
+
+ public function __construct(FeedFetcher $feedFetcher){
+ $this->feedFetcher = $feedFetcher;
+ }
+
+
+ private function buildUrl($url) {
+ $baseRegex = '%(?:https?://|//)?(?:www.)?youtube.com';
+ $playRegex = $baseRegex . '.*?list=([^&]*)%';
+
+ if (preg_match($playRegex, $url, $matches)) {
+ $id = $matches[1];
+ return 'http://gdata.youtube.com/feeds/api/playlists/' . $id;
+ } else {
+ return false;
+ }
+ }
+
+
+ /**
+ * This fetcher handles all the remaining urls therefore always returns true
+ */
+ public function canHandle($url){
+ return $this->buildUrl($url) !== false;
+ }
+
+
+ /**
+ * Fetch a feed from remote
+ * @param string $url remote url of the feed
+ * @param boolean $getFavicon if the favicon should also be fetched,
+ * defaults to true
+ * @param string $lastModified a last modified value from an http header
+ * defaults to false. If lastModified matches the http header from the feed
+ * no results are fetched
+ * @param string $etag an etag from an http header.
+ * If lastModified matches the http header from the feed
+ * no results are fetched
+ * @throws FetcherException if it fails
+ * @return array an array containing the new feed and its items, first
+ * element being the Feed and second element being an array of Items
+ */
+ public function fetch($url, $getFavicon=true, $lastModified=null,
+ $etag=null) {
+ $transformedUrl = $this->buildUrl($url);
+
+ $result = $this->feedFetcher->fetch(
+ $transformedUrl, $getFavicon, $lastModified, $etag
+ );
+
+ // reset feed url so we know the correct added url for the feed
+ $result[0]->setUrl($url);
+
+ return $result;
+ }
+
+
+}