array( 'name'=>'Type', 'type'=>'list', 'values'=>array( 'Everything'=>'', 'Anime'=>'A', 'Drama'=>'D', 'Tokusatsu'=>'T' ) ) )); private $filter = 'Releases'; public function collectData(){ //Add type filter if provided $typeFilter = array_search( $this->getInput('type'), $this->parameters[$this->queriedContext]['type']['values'] ); //Build date and filters for making requests $thismonth = date('mY').$typeFilter; $lastmonth = date('mY', mktime(0, 0, 0, date('n') - 1, 1, date('Y'))).$typeFilter; //Process each HTML page until having 10 releases $processedOK = 0; foreach (array($thismonth, $lastmonth) as $requestFilter) { //Retrive page contents $url = $this->uri.'history-0-1/'.$requestFilter; $html = $this->getSimpleHTMLDOM($url) or $this->returnServerError('Could not request Anime-Ultime: '.$url); //Relases are sorted by day : process each day individually foreach ($html->find('div.history', 0)->find('h3') as $daySection) { //Retrieve day and build date information $dateString = $daySection->plaintext; $day = intval(substr($dateString, strpos($dateString, ' ') + 1, 2)); $item_date = strtotime(str_pad($day, 2, '0', STR_PAD_LEFT).'-' .substr($requestFilter, 0, 2).'-' .substr($requestFilter, 2, 4)); $release = $daySection->next_sibling()->next_sibling()->first_child(); //

day


<-- useful data in table rows //Process each release of that day, ignoring first table row: contains table headers while (!is_null($release = $release->next_sibling())) { if (count($release->find('td')) > 0) { //Retrieve metadata from table columns $item_link_element = $release->find('td', 0)->find('a', 0); $item_uri = $this->uri.$item_link_element->href; $item_name = html_entity_decode($item_link_element->plaintext); $item_episode = html_entity_decode(str_pad($release->find('td', 1)->plaintext, 2, '0', STR_PAD_LEFT)); $item_fansub = $release->find('td', 2)->plaintext; $item_type = $release->find('td', 4)->plaintext; if (!empty($item_uri)) { //Retrieve description from description page and convert relative image src info absolute image src $html_item = $this->getContents($item_uri) or $this->returnServerError('Could not request Anime-Ultime: '.$item_uri); $item_description = substr( $html_item, strpos($html_item, 'class="principal_contain" align="center">') + 41 ); $item_description = substr($item_description, 0, strpos($item_description, '
') ); $item_description = str_replace( 'src="images', 'src="'.$this->uri.'images', $item_description ); $item_description = str_replace("\r", '', $item_description); $item_description = str_replace("\n", '', $item_description); $item_description = utf8_encode($item_description); //Build and add final item $item = array(); $item['uri'] = $item_uri; $item['title'] = $item_name.' '.$item_type.' '.$item_episode; $item['author'] = $item_fansub; $item['timestamp'] = $item_date; $item['content'] = $item_description; $this->items[] = $item; $processedOK++; //Stop processing once limit is reached if ($processedOK >= 10) return; } } } } } } public function getName() { $typeFilter = array_search( $this->getInput('type'), $this->parameters[$this->queriedContext]['type']['values'] ); return 'Latest '.$typeFilter.' - Anime-Ultime Bridge'; } public function getCacheDuration() { return 3600*3; // 3 hours } }