/** * ЦСКА */ public function actionCskanews() { $cska = Yii::$app->params['cska']; $bot = new BotApi($cska['token']); $host = 'https://www.sports.ru'; $dom = Html::load($cska['html']); $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { if ($div->getAttribute('class') == 'news') { $links = $div->getElementsByTagName('a'); foreach ($links as $link) { if ($link->getAttribute('class') == 'short-text') { $url = Url::findOne(['channel' => 'cska', 'url' => $host . $link->getAttribute('href')]); if ($url === null) { $message = $link->nodeValue . "\n" . $host . $link->getAttribute('href'); try { $bot->sendMessage($cska['chat_id'], $message); } catch (Exception $e) { echo $e->getMessage() . "\n"; } $url = new Url(['channel' => 'cska', 'url' => $host . $link->getAttribute('href')]); $url->save(); } } } } } }
/** * Возвращает количество оставшихся трансферов */ public function getTransfers() { $dom = Html::load($this->url); $tables = $dom->getElementsByTagName('table'); foreach ($tables as $table) { if ($table->getAttribute('class') == 'profile-table') { $trs = $table->getElementsByTagName('tr'); foreach ($trs as $tr) { if ($tr->getElementsByTagName('th')->item(0)->nodeValue == 'Трансферы в туре') { $transfers = $tr->getElementsByTagName('td')->item(0)->nodeValue; } } } } return isset($transfers) ? $transfers : 0; }
/** * Обновление дедлайнов турнира */ public function actionDeadlines() { $tournaments = Tournament::find()->all(); $month = ['января' => 1, 'февраля' => 2, 'марта' => 3, 'апреля' => 4, 'мая' => 5, 'июня' => 6, 'июля' => 7, 'августа' => 8, 'сентября' => 9, 'октября' => 10, 'ноября' => 11, 'декабря' => 12]; foreach ($tournaments as $tournament) { $team = Team::findOne(['tournament_id' => $tournament->id]); if ($team !== null) { $dom = Html::load($team->url); $tables = $dom->getElementsByTagName('table'); foreach ($tables as $table) { if ($table->getAttribute('class') == 'profile-table') { $trs = $table->getElementsByTagName('tr'); foreach ($trs as $tr) { if ($tr->getElementsByTagName('th')->item(0)->nodeValue == 'Дедлайн') { $deadline = $tr->getElementsByTagName('td')->item(0)->nodeValue; $deadline = str_replace(['|', ':'], ' ', $deadline); $deadline = explode(' ', $deadline); if (count($deadline) == 4) { $year = date('Y'); $time = mktime($deadline[2], $deadline[3], 0, $month[$deadline[1]], $deadline[0], $year); $now = time(); if ($time < $now) { $year++; $time = mktime($deadline[2], $deadline[3], 0, $month[$deadline[1]], $deadline[0], $year); } $deadline = date('Y-m-d H:i:s', $time); } } elseif ($tr->getElementsByTagName('th')->item(0)->nodeValue == 'Трансферы в туре') { $transfers = $tr->getElementsByTagName('td')->item(0)->nodeValue; } } } } if ($tournament->deadline != $deadline) { $tournament->deadline = $deadline; if (isset($transfers)) { $tournament->checked = false; $tournament->transfers = $transfers; } else { $tournament->checked = true; } $tournament->save(); } } } }
/** * Обновляет список команд пользователя */ public function updateTeams() { if (!empty($this->profile_url)) { // Запоминаем старые команды $oldTeams = []; foreach ($this->teams as $team) { $oldTeams[] = $team->url; } // Получаем список новых команд $dom = Html::load($this->profile_url . 'fantasy/'); $divs = $dom->getElementsByTagName('div'); $host = 'https://www.sports.ru'; foreach ($divs as $div) { if ($div->getAttribute('class') == 'item user-league') { $links = $div->getElementsByTagName('a'); $tournamentUrl = $host . $links->item(1)->getAttribute('href'); if (preg_match('/.*\\/fantasy\\/football\\/.*/', $tournamentUrl)) { // Проверяем турнир к которому относится команда $tournament = Tournament::findOne(['url' => $tournamentUrl]); if ($tournament === null) { $tournament = new Tournament(['url' => $tournamentUrl, 'name' => $links->item(1)->nodeValue]); $tournament->save(); } // Добавляем команду $teamUrl = $host . $links->item(0)->getAttribute('href'); $teamUrl = str_replace('/football/team/', '/football/team/points/', $teamUrl); $team = Team::findOne(['url' => $teamUrl]); if ($team === null) { $team = new Team(['user_id' => $this->id, 'url' => $teamUrl, 'name' => $links->item(0)->nodeValue, 'tournament_id' => $tournament->id]); $team->save(); } else { $index = array_search($teamUrl, $oldTeams); array_splice($oldTeams, $index, 1); } } } } // Удаляем старые команды foreach ($oldTeams as $url) { $team = Team::findOne(['url' => $url]); if ($team !== null) { $team->delete(); } } } }