diff --git a/Game.php b/Game.php index f121ab2..94f9dc8 100644 --- a/Game.php +++ b/Game.php @@ -7,6 +7,11 @@ class Game { public $description; public $date; public $image; + public $platform; + public $url_online; + public $url_download; + public $url_discussion; + public $url_download_description; public function print() { $converter = new HtmlConverter(); if (STYLE === 'RUS') { diff --git a/Source/Anivisual.php b/Source/Anivisual.php index 817e318..471cd98 100644 --- a/Source/Anivisual.php +++ b/Source/Anivisual.php @@ -40,7 +40,7 @@ class Anivisual extends Source { if ($date < $this->period) continue; $game = new Game; $link = $gameBlock->find('.novel-ttl a')[0]; - $game->title = $link->innerHtml; + $game->title = htmlspecialchars_decode($link->innerHtml); $game->url = 'http://anivisual.net'.$link->getAttribute('href'); $game->description = $gameBlock->find('span')->first()->text; @@ -75,7 +75,7 @@ class Anivisual extends Source { $game->date = $date; unset($date); } catch (\Exception $e) {} - $game->title = $gameBlock->find('h1.logo')->text; + $game->title = htmlspecialchars_decode($gameBlock->find('h1.logo')->text); // $game->description = $this->dom->find('#content > section > span')->text; return $game; } diff --git a/Wikipage.php b/Wikipage.php new file mode 100644 index 0000000..c6fc820 --- /dev/null +++ b/Wikipage.php @@ -0,0 +1,126 @@ +game = $game; + + if (!$config['DUMMY']) { + // Log in to a wiki + $api = new MediawikiApi( $config['WIKI'] ); + $api->login( new ApiUser( $config['WIKIUSER'], $config['WIKIPASSWORD'] ) ); + $services = new MediawikiFactory( $api ); + $this->api = $api; + $this->services = $services; + $this->fileUploader = $services->newFileUploader(); + } + } + public function create() { + global $config; + + $this->makeContent(); + + $exists = $this->exists($this->game->title); + if (!$config['DUMMY'] && !$exists) { + if (!empty($this->game->image)) { + $filename = filename($this->game->image); + if ($this->services->newPageGetter()->getFromTitle($filename)) { + $image = file_get_contents($this->game->image); + file_put_contents($image, $filename); + $this->fileUploader->upload($filename, $filename); + unlink($filename); + } + } + $newContent = new Content( $this->content ); + $title = new Title($this->game->title); + $identifier = new PageIdentifier($title); + $revision = new Revision($newContent, $identifier); + $services->newRevisionSaver()->save($revision); + return true; + } else { + if ($exists) { + echo "Страница игры уже существует. Автосоздание невозможно.\n"; + echo $this->content; + return false; + } + if ($config['DUMMY']) { + echo "Черновой режим. Автосоздание невозможно.\n"; + } + echo $this->content; + return true; + } + } + protected function makeContent() { + $this->content = '{{game info'; + + $this->txtadd('title', ' |название='.$this->game->title.'"'); + if (is_array($this->game->author) && count($this->game->author) === 1) { + $this->game->author = trim($this->game->author[0]); + } + + if (is_array($this->game->author) && count($this->game->author) > 0) { + $this->content .= PHP_EOL.' |автор='; + $i = 0; + $l = count($this->game->author); + foreach ($this->game->author as $author_name) { + $this->content .= '[[Автор::'.$author_name.']]'; + $i++; + if ($i < $l) { + $this->content .= '; '; + } + } + } else { + $this->txtadd('author', ' |автор=[[Автор::'.$this->game->author.']]'); + } + $this->txtadd('date', ' |вышла='.$this->game->date); + $this->txtadd('platform', ' |платформа='.$this->game->platform); + $this->txtadd('image', ' |обложка='.filename($this->game->image)); + + $this->content .= "\n}}\n"; + + $this->txtadd('description', "#{@game.description}"); + if (!empty($this->game->url_download) || !empty($this->game->url_online)) { + $this->content .= "\n== Версии =="; + } + $this->txtadd('url_online', "\n* [#{@game.url_online} #{@game.url_online_description}]"); + if (!empty($this->game->url_download) && !empty($this->game->url_download_description)) { + $this->content .= "\n* [$this->game->url_download $this->game->url_download_description]"; + } + if (!empty($this->game->url_discussion) || !empty($this->game->url)) { + $this->content .= "\n== Ссылки =="; + } + $this->txtadd('url_discussion', '* ['.$this->game->url_discussion.' Обсуждение игры]'); + $this->txtadd('url', '* ['.$this->game->url.' Страница игры]'); + } + + protected function txtadd($param, $text) { + if (!empty($this->game->$param)) { + $this->content .= PHP_EOL.trim($text); + } + } + + /** + * Checks if the page exists. + * + * @param string $pagename + * @return boolean + */ + protected function exists($pagename) { + return !empty($this->services->newPageGetter()->getFromTitle($pagename)); + } +} diff --git a/wiki.php b/wiki.php index bacbe3d..60888d4 100755 --- a/wiki.php +++ b/wiki.php @@ -3,6 +3,7 @@ require "vendor/autoload.php"; require "Game.php"; require "Source.php"; +require "Wikipage.php"; $config = parse_ini_file("./config.ini"); $loader = new \Aura\Autoload\Loader; $loader->register(); @@ -15,9 +16,6 @@ if (!isset($argv[1])) { $url = strtolower($argv[1]); $game = new Game; -function wikipage($game) { - var_dump($game); -} function check($classname) { global $game; global $url; @@ -27,7 +25,8 @@ function check($classname) { if ($cl->checkPage($url)) { $game = $cl->page($url); if ($game) { - wikipage($game); + $page = new Wikipage($game); + $page->create(); } } }