', '', $string);
+ return $string;
+ }
+
+ function StripWithDelimiters($string, $start, $end) {
+ while (strpos($string, $start) !== false) {
+ $section_to_remove = substr($string, strpos($string, $start));
+ $section_to_remove = substr($section_to_remove, 0, strpos($section_to_remove, $end) + strlen($end));
+ $string = str_replace($section_to_remove, '', $string);
+ } return $string;
+ }
+
+ function StripRecursiveHTMLSection($string, $tag_name, $tag_start) {
+ $open_tag = '<'.$tag_name;
+ $close_tag = ''.$tag_name.'>';
+ $close_tag_length = strlen($close_tag);
+ if (strpos($tag_start, $open_tag) === 0) {
+ while (strpos($string, $tag_start) !== false) {
+ $max_recursion = 100;
+ $section_to_remove = null;
+ $section_start = strpos($string, $tag_start);
+ $search_offset = $section_start;
+ do {
+ $max_recursion--;
+ $section_end = strpos($string, $close_tag, $search_offset);
+ $search_offset = $section_end + $close_tag_length;
+ $section_to_remove = substr($string, $section_start, $section_end - $section_start + $close_tag_length);
+ $open_tag_count = substr_count($section_to_remove, $open_tag);
+ $close_tag_count = substr_count($section_to_remove, $close_tag);
+ } while ($open_tag_count > $close_tag_count && $max_recursion > 0);
+ $string = str_replace($section_to_remove, '', $string);
+ }
+ }
+ return $string;
+ }
+
+ if (empty($param['feed']))
+ $this->returnError('Please select a feed to display.'.$url, 400);
+ if ($param['feed'] !== preg_replace('/[^a-zA-Z-\/]+/', '', $param['feed']) || substr_count($param['feed'], '/') > 1 || strlen($param['feed'] > 64))
+ $this->returnError('Invalid "feed" parameter.'.$url, 400);
+
+ $url = $this->getURI().'rss/'.$param['feed'].'.xml';
+ $html = file_get_html($url) or $this->returnError('Could not request Futura-Sciences: '.$url, 500);
+ $limit = 0;
+
+ foreach($html->find('item') as $element) {
+ if ($limit < 10) {
+ $article_url = str_replace('#xtor=RSS-8', '', StripCDATA($element->find('guid', 0)->plaintext));
+ $article = file_get_html($article_url) or $this->returnError('Could not request Futura-Sciences: '.$article_url, 500);
+ $contents = $article->find('div.content', 0)->innertext;
+ $author = trim(str_replace(', Futura-Sciences', '', $article->find('span.author', 0)->plaintext));
+ if (empty($author))
+ $author = StripCDATA($element->find('author', 0)->plaintext);
+
+ foreach (array(
+ '
');
+ $contents = StripWithDelimiters($contents, '
');
+ $contents = StripWithDelimiters($contents, 'fs:definition="', '"');
+ $contents = StripWithDelimiters($contents, 'fs:xt:clicktype="', '"');
+ $contents = StripWithDelimiters($contents, 'fs:xt:clickname="', '"');
+
+ $item = new \Item();
+ $item->author = $author;
+ $item->uri = $article_url;
+ $item->title = StripCDATA($element->find('title', 0)->innertext);
+ $item->thumbnailUri = StripCDATA($element->find('enclosure', 0)->url);
+ $item->timestamp = strtotime(StripCDATA($element->find('pubDate', 0)->plaintext));
+ $item->content = trim($contents);
+ $this->items[] = $item;
+ $limit++;
+ }
+ }
+
+ }
+
+ public function getName() {
+ return 'Futura-Sciences Bridge';
+ }
+
+ public function getURI() {
+ return 'http://www.futura-sciences.com/';
+ }
+
+ public function getCacheDuration() {
+ return 3600;
+ }
+}
diff --git a/bridges/T411Bridge.php b/bridges/T411Bridge.php
index 54904cc..92f3c76 100644
--- a/bridges/T411Bridge.php
+++ b/bridges/T411Bridge.php
@@ -5,7 +5,7 @@ class T411Bridge extends BridgeAbstract {
$this->maintainer = "ORelio";
$this->name = "T411";
- $this->uri = "https://t411.in/";
+ $this->uri = $this->getURI();
$this->description = "Returns the 5 newest torrents with specified search terms
Use url part after '?' mark when using their search engine";
$this->update = "2016-02-06";
@@ -34,8 +34,8 @@ class T411Bridge extends BridgeAbstract {
$this->returnError('You must specify a search criteria', 400);
}
- //Retrieve torrent listing as truncated rss, which does not contain torrent description
- $url = 'http://www.t411.in/torrents/search/?'.$param['search'].'&order=added&type=desc';
+ //Retrieve torrent listing from search results, which does not contain torrent description
+ $url = $this->getURI().'torrents/search/?'.$param['search'].'&order=added&type=desc';
$html = file_get_html($url) or $this->returnError('Could not request t411: '.$url, 500);
$results = $html->find('table.results', 0);
if (is_null($results))
@@ -52,7 +52,7 @@ class T411Bridge extends BridgeAbstract {
usleep(500000); //So we need to wait (500ms)
//Retrieve data from RSS entry
- $item_uri = 'http://'.ExtractFromDelimiters($element->outertext, 'getURI().'torrents/details/?id='.ExtractFromDelimiters($element->find('a.nfo', 0)->outertext, '?id=', '"');
$item_title = ExtractFromDelimiters($element->outertext, '" title="', '"');
$item_date = strtotime($element->find('dd', 0)->plaintext);
@@ -64,7 +64,7 @@ class T411Bridge extends BridgeAbstract {
$item_author = $item_html->find('a.profile', 0)->innertext;
//Retrieve image for thumbnail or generic logo fallback
- $item_image = 'http://www.t411.in/themes/blue/images/logo.png';
+ $item_image = $this->getURI().'themes/blue/images/logo.png';
foreach ($item_desc->find('img') as $img) {
if (strpos($img->src, 'prez') === false) {
$item_image = $img->src;
@@ -92,7 +92,7 @@ class T411Bridge extends BridgeAbstract {
}
public function getURI() {
- return 'https://t411.in';
+ return 'https://t411.ch/';
}
public function getCacheDuration() {
diff --git a/bridges/ZoneTelechargementBridge.php b/bridges/ZoneTelechargementBridge.php
new file mode 100644
index 0000000..0f5b2dd
--- /dev/null
+++ b/bridges/ZoneTelechargementBridge.php
@@ -0,0 +1,58 @@
+maintainer = 'ORelio';
+ $this->name = $this->getName();
+ $this->uri = $this->getURI();
+ $this->description = 'RSS proxy returning the newest releases.
You may specify a category found in RSS URLs, else main feed is selected.';
+ $this->update = "2016-03-16";
+
+ $this->parameters[] =
+ '[
+ {
+ "name" : "Category",
+ "identifier" : "category"
+ }
+ ]';
+ }
+
+ public function collectData(array $param) {
+
+ function StripCDATA($string) {
+ $string = str_replace('', '', $string);
+ return $string;
+ }
+
+ $category = '/';
+ if (!empty($param['category']))
+ $category = '/'.$param['category'].'/';
+
+ $url = $this->getURI().$category.'rss.xml';
+ $html = file_get_html($url) or $this->returnError('Could not request Zone Telechargement: '.$url, 500);
+
+ foreach($html->find('item') as $element) {
+ $item = new \Item();
+ $item->title = $element->find('title', 0)->plaintext;
+ $item->uri = str_replace('http://', 'https://', $element->find('guid', 0)->plaintext);
+ $item->timestamp = strtotime($element->find('pubDate', 0)->plaintext);
+ $item->content = StripCDATA($element->find('description', 0)->innertext);
+ $this->items[] = $item;
+ $limit++;
+ }
+ }
+
+ public function getName() {
+ return 'Zone Telechargement Bridge';
+ }
+
+ public function getURI() {
+ return 'https://www.zone-telechargement.com/';
+ }
+
+ public function getCacheDuration() {
+ return 3600;
+ }
+}