. */ namespace App\Sources; use \App\Models\Game; use \App\Models\Platform; use \App\Models\Language; use \App\Models\Author; use \App\Source; use Log; class Instead extends Source { public $title = "INSTEAD репозиторий"; public $keyword = 'instead'; protected $baseUrl = 'http://instead-games.ru/'; protected $platform; protected $language_model; public function parse() { $this->language_model = Language::findByCode('ru'); $this->platform = Platform::findByName('INSTEAD'); $this->insteadfeed("http://instead-games.ru/"); $this->insteadfeed("http://instead-games.ru/index.php?approved=0"); } protected function insteadfeed($url) { $text = $this->get_text($url); $this->loadStr($text); unset($text); $this->dom->filter('.game')->each(function($gameBlock) { $url = $this->baseUrl.trim($gameBlock->filter('h2:first-child a:first-child')->first()->attr('href')); $this->page($url); }); } public function checkPage($url) { return (strpos($url,'http://instead-games.ru/game.php') !== FALSE); } public function page($url) { $text = $this->get_text($url); $this->loadStr($text); unset($text); $game = new Game; $game->url = $url; $text = trim($this->dom->filter('#panel')->text()); preg_match('/Дата: ([0-9]{4}\.[01][0-9]\.[0-3][0-9]) /', $text, $matches); $game->release_date = \DateTime::createFromFormat('Y.m.d', $matches[1]); preg_match('/Автор: (.+) Дата/', $text, $matches); $author = trim($matches[1]); $game->title = trim($this->dom->filter('h2')->first()->text()); $game = $this->findGame($game); $game->description = trim($this->dom->filter('.gamedsc')->first()->html()); if($this->dom->filter('#instead-em')->first()) { $game->url_play_online = $this->baseUrl.$this->dom->filter('#instead-em')->attr('href'); $game->url_online_description = 'Играть онлайн'; } $game->url_download = $this->baseUrl.ltrim($this->dom->selectLink('Скачать')->first()->attr('href'), '/'); $link = $this->dom->selectLink('Обсудить')->first(); if ($link->count() > 0) { $game->url_discussion = $link->attr('href'); } $image = $this->dom->filter('#screenshots a')->first(); if ($image->count() > 0) { $game->image_url = $this->baseUrl.$image->attr('href'); } $game->save(); if (!empty($author)) { $author_model = Author::findByName($author); if (empty($author_model)) { $author_model = new Author(); $author_model->name = $author; $author_model->save(); } if (!$game->authors()->where('name', $author)->exists()) { $game->authors()->sync([$author_model->id]); } } $game->languages()->sync([$this->language_model->id]); $game->platforms()->sync([$this->platform->id]); } }