diff --git a/bridges/MangareaderBridge.php b/bridges/MangareaderBridge.php index 55ba59c..551649e 100644 --- a/bridges/MangareaderBridge.php +++ b/bridges/MangareaderBridge.php @@ -1,5 +1,5 @@ maintainer = "logmanoriginal"; $this->name = "Mangareader Bridge"; $this->uri = "http://www.mangareader.net"; - $this->description = "Returns the latest Manga updates"; - $this->update = "2016-01-10"; - - $this->parameters["Get latest updates"] = '[]'; + $this->description = "Returns the latest updates. Set limits to -1 to disable the limit."; + $this->update = "2016-01-16"; + $this->parameters["Get site updates"] = '[]'; + $this->parameters["Get manga updates"] = ' + [ + { + "name" : "Manga path", + "identifier" : "path", + "type" : "text", + "required" : "true", + "pattern" : "[a-zA-Z0-9-_]*", + "exampleValue" : "bleach, umi-no-kishidan" + }, + { + "name" : "Limit", + "identifier" : "limit", + "type" : "number", + "exampleValue" : "10" + } + ]'; } public function collectData(array $param){ - /* We'll use the DOM parser for this as it makes navigation easier */ - $html = file_get_contents("http://www.mangareader.net/latest"); - $doc = new DomDocument; + $this->request = ''; + + $path = "latest"; + $limit = MANGAREADER_LIMIT; + + if(isset($param['path'])){ + $path = $param['path']; + } + + if(isset($param['limit']) && $param['limit'] !== ""){ + $limit = $param['limit']; + } + + // We'll use the DOM parser for this as it makes navigation easier + $html = file_get_contents("http://www.mangareader.net/" . $path); + if(!$html){ + $this->returnError('Could not receive data for ' . $path . '!', 400); + } + $doc = new DomDocument; @$doc->loadHTML($html); - /* The latest updates are on the frontpage, navigate via XPath */ + // Navigate via XPath $xpath = new DomXPath($doc); - /* Query each item (consists of Manga + chapters) */ - $nodes = $xpath->query("//*[@id='latestchapters']/table//td"); + // Build feed based on the context (site updates or manga updates) + if($path === "latest"){ + + $this->request = 'Latest'; + + // Query each item (consists of Manga + chapters) + $nodes = $xpath->query("//*[@id='latestchapters']/table//td"); - foreach ($nodes as $node){ - /* Query the manga */ - $manga = $xpath->query("a[@class='chapter']", $node)->item(0); - - /* Collect the chapters for each Manga */ - $chapters = $xpath->query("a[@class='chaptersrec']", $node); + foreach ($nodes as $node){ + // Query the manga + $manga = $xpath->query("a[@class='chapter']", $node)->item(0); + + // Collect the chapters for each Manga + $chapters = $xpath->query("a[@class='chaptersrec']", $node); - if (isset($manga) && $chapters->length >= 1){ - $item = new \Item(); - $item->uri = 'http://www.mangareader.net' . htmlspecialchars($manga->getAttribute('href')); - $item->title = htmlspecialchars($manga->nodeValue); - - /* Add each chapter to the feed */ - $item->content = ""; - - foreach ($chapters as $chapter){ - if($item->content <> ""){ - $item->content .= "
"; - } - $item->content .= "" . htmlspecialchars($chapter->nodeValue) . ""; - } - - $this->items[] = $item; - } - } - - /* Return some dummy-data if no content available */ + if (isset($manga) && $chapters->length >= 1){ + $item = new \Item(); + $item->uri = 'http://www.mangareader.net' . htmlspecialchars($manga->getAttribute('href')); + $item->title = htmlspecialchars($manga->nodeValue); + + // Add each chapter to the feed + $item->content = ""; + + foreach ($chapters as $chapter){ + if($item->content <> ""){ + $item->content .= "
"; + } + $item->content .= "" . htmlspecialchars($chapter->nodeValue) . ""; + } + + $this->items[] = $item; + } + } + } else { + + $this->request = $xpath->query(".//*[@id='mangaproperties']//*[@class='aname']")->item(0)->nodeValue; + + $query = "(.//*[@id='listing']//tr)[position() > 1]"; + + if($limit !== -1){ + $query = "(.//*[@id='listing']//tr)[position() > 1][position() <= " . $limit . "]"; + } + + $chapters = $xpath->query($query); + + foreach ($chapters as $chapter){ + $item = new \Item(); + $item->title = $xpath->query("td[1]/a", $chapter)->item(0)->nodeValue; // first column contains anchor with the name + $item->uri = 'http://www.mangareader.net' . $xpath->query("td[1]/a", $chapter)->item(0)->getAttribute('href'); // anchor includes path (with leading '/') + $item->description = substr($xpath->query("td[1]", $chapter)->item(0)->nodeValue, strlen($item->title) + 4); // first column provides " : ", we only want the description + $item->date = $xpath->query("td[2]", $chapter)->item(0)->nodeValue; // second column provides the release date + $item->content = $item->description . "
" . $item->date; + $this->items[] = $item; + } + } + + // Return some dummy-data if no content available if(count($this->items) == 0){ $item = new \Item(); $item->content = "

No updates available

"; @@ -63,7 +122,7 @@ class MangareaderBridge extends BridgeAbstract{ } public function getName(){ - return 'Mangareader Bridge'; + return (!empty($this->request) ? $this->request . ' - ' : '') . 'Mangareader Bridge'; } public function getURI(){ @@ -74,4 +133,4 @@ class MangareaderBridge extends BridgeAbstract{ return 10800; // 3 hours } } -?> +?> \ No newline at end of file