58 lines
1.9 KiB
PHP
58 lines
1.9 KiB
PHP
<?php
|
|
namespace Source;
|
|
|
|
use \Game;
|
|
|
|
class Questbook extends Source {
|
|
public $title = "Библиотека книг-игр";
|
|
protected function parse() {
|
|
$string = $this->get_text('https://quest-book.ru/directory/rss/');
|
|
$service = new \Sabre\Xml\Service();
|
|
$service->elementMap = [
|
|
'{}item' => function(\Sabre\Xml\Reader $reader) {
|
|
return \Sabre\Xml\Deserializer\keyValue($reader, '');
|
|
},
|
|
'{}channel' => function(\Sabre\Xml\Reader $reader) {
|
|
return \Sabre\Xml\Deserializer\repeatingElements($reader, '{}item');
|
|
},
|
|
];
|
|
try {
|
|
$games = $service->parse($string)[0]['value'];
|
|
} catch (\Sabre\Xml\LibXMLException $e) {
|
|
echo $e->getMessage();
|
|
echo $e->getTraceAsString();
|
|
return "";
|
|
}
|
|
unset($string);
|
|
foreach ($games as $gameBlock) {
|
|
$date = strtotime($gameBlock['pubDate']);
|
|
if ($date < $this->period) continue;
|
|
$game = new Game;
|
|
$game->title = trim($gameBlock['title']);
|
|
$game->url = trim($gameBlock['link']);
|
|
$game->description = trim($gameBlock['description']);
|
|
$this->output .= $game->print();
|
|
}
|
|
}
|
|
public function checkPage($url) {
|
|
return (strpos($url,'https://quest-book.ru/directory/') !== FALSE);
|
|
}
|
|
public function page($url) {
|
|
$game = new Game;
|
|
$game->url = $url;
|
|
$game->title = $this->dom->filter('h2 a b')->first()->text();
|
|
$game->description = $this->dom->filter('div.col-md-8.col-sm-12 > div > div')->reduce(function($node) {
|
|
if ($node->attr('style') === 'padding:5px;margin:2px;text-align:justify')
|
|
return true;
|
|
return false;
|
|
})->text();
|
|
$game->description = trim($game->description);
|
|
$game->author = $this->dom->filter('div.col-md-8.col-sm-12 em span')->reduce(function($node) {
|
|
if ($node->attr('itemprop') === 'author')
|
|
return true;
|
|
return false;
|
|
})->text();
|
|
return $game;
|
|
}
|
|
}
|