Browse Source

Mise à jour du bridge pour WorldOfTanks (#527)

* Mise à jour de l'un de mes bridges fétiches
Nicolas Delsaux 6 years ago
parent
commit
e60b5ab193
1 changed files with 22 additions and 42 deletions
  1. 22 42
      bridges/WorldOfTanksBridge.php

+ 22 - 42
bridges/WorldOfTanksBridge.php

@@ -1,16 +1,12 @@
 <?php
-class WorldOfTanksBridge extends BridgeAbstract {
+class WorldOfTanksBridge extends FeedExpander {
 
-	const MAINTAINER = 'mitsukarenai';
+	const MAINTAINER = 'Riduidel';
 	const NAME = 'World of Tanks';
 	const URI = 'http://worldoftanks.eu/';
 	const DESCRIPTION = 'News about the tank slaughter game.';
 
 	const PARAMETERS = array( array(
-		'category' => array(
-			// TODO: should be a list
-			'name' => 'nom de la catégorie'
-		),
 		'lang' => array(
 			'name' => 'Langue',
 			'type' => 'list',
@@ -26,47 +22,31 @@ class WorldOfTanksBridge extends BridgeAbstract {
 		)
 	));
 
-	private $title = '';
-
-	public function getURI(){
-		if(!is_null($this->getInput('lang'))) {
-			$lang = $this->getInput('lang');
-			$uri = self::URI . $lang . '/news/';
-			if(!empty($this->getInput('category'))) {
-				$uri .= 'pc-browser/' . $this->getInput('category') . '/';
-			}
-			return $uri;
-		}
-
-		return parent::getURI();
+	public function collectData() {
+		$this->collectExpandableDatas(sprintf('https://worldoftanks.eu/%s/rss/news/', $this->getInput('lang')));
 	}
 
-	public function getName(){
-		return $this->title ?: parent::getName();
+	protected function parseItem($newsItem){
+		$item = parent::parseItem($newsItem);
+		$item['content'] = $this->loadFullArticle($item['uri']);
+		return $item;
 	}
 
-	public function collectData(){
-		$html = getSimpleHTMLDOM($this->getURI())
-			or returnServerError('Could not request ' . $this->getURI());
-		debugMessage("loaded HTML from " . $this->getURI());
-		// customize name
-		$this->title = $html->find('title', 0)->innertext;
-		foreach($html->find('.b-imgblock_ico') as $infoLink) {
-			$this->parseLine($infoLink);
+	/**
+	 * Loads the full article and returns the contents
+	 * @param $uri The article URI
+	 * @return The article content
+	 */
+	private function loadFullArticle($uri){
+		$html = getSimpleHTMLDOMCached($uri);
+
+		$content = $html->find('article', 0);
+
+		// Remove the scripts, please
+		foreach($content->find('script') as $script) {
+			$script->outertext = '';
 		}
-	}
 
-	private function parseLine($infoLink){
-		$item = array();
-		$item['uri'] = self::URI . $infoLink->href;
-		// now load that uri from cache
-		debugMessage('loading page ' . $item['uri']);
-		$articlePage = getSimpleHTMLDOMCached($item['uri']);
-		$content = $articlePage->find('.l-content', 0);
-		defaultLinkTo($content, self::URI);
-		$item['title'] = $content->find('h1', 0)->innertext;
-		$item['content'] = $content->find('.b-content', 0)->innertext;
-		$item['timestamp'] = $content->find('.b-statistic_time', 0)->getAttribute("data-timestamp");
-		$this->items[] = $item;
+		return $content->innertext;
 	}
 }