. */ namespace App; use Illuminate\Support\Facades\Cache; use \GuzzleHttp\Client as GuzzleClient; use Log; class Downloader { /** * @var GuzzleClient */ protected $client; public $cookies = ''; public function get_text($url, $post = []): string { if (empty($this->client)) { $this->client = new GuzzleClient([ 'timeout' => 30, ]); } if (env('APP_DEBUG') && Cache::has($url)) { return Cache::get($url); } try { if ($post === []) { $response = $this->client->request('GET', $url, [ 'cookies' => $this->cookies, ]); } else { $response = $this->client->request('POST', $url, [ 'form_params' => $post, 'cookies' => $this->cookies, ]); } } catch (\Exception $e) { Log::warning($e->getMessage()); return ''; } $resp = (string) $response->getBody(); Cache::put($url, $resp); return $resp; } public function download($url, $outFile) { $options = array( CURLOPT_FILE => fopen($outFile, 'w'), CURLOPT_TIMEOUT => 28800, // set this to 8 hours so we dont timeout on big files CURLOPT_URL => $url ); $ch = curl_init(); curl_setopt_array($ch, $options); curl_exec($ch); curl_close($ch); } public function setCookies($cookies): void { $this->cookies = $cookies; } public function get_json($url) { if (empty($this->client)) { $this->client = new GuzzleClient([ 'timeout' => 30, ]); } $response = $this->client->request('GET', $url, [ 'cookies' => $this->cookies, ]); $text = (string) $response->getBody(); return json_decode($text); } /** * @param string $dateString * @return \DateTime|false */ public function convertDate($dateString) { $months = [ 'янв.' => 'Jan', 'янв' => 'Jan', 'февр.' => 'Feb', 'февр' => 'Feb', 'фев' => 'Feb', 'мар.' => 'Mar', 'мар' => 'Mar', 'апр.' => 'Apr', 'апр' => 'Apr', 'мая' => 'May', 'май' => 'May', 'июн.' => 'Jun', 'июн' => 'Jun', 'июня' => 'Jun', 'июнь' => 'Jun', 'Junя' => 'Jun', 'июль' => 'Jul', 'июл.' => 'Jul', 'июля' => 'Jul', 'Julя' => 'Jul', 'июл' => 'Jul', 'авг.' => 'Aug', 'авг' => 'Aug', 'сент.' => 'Sep', 'сент' => 'Sep', 'сен.' => 'Sep', 'сен' => 'Sep', 'окт.' => 'Oct', 'окт' => 'Oct', 'ноябр.' => 'Nov', 'нояб.' => 'Nov', 'нояб' => 'Nov', 'ноя.' => 'Nov', 'ноя' => 'Nov', 'нов.' => 'Nov', 'нов' => 'Nov', 'дек.' => 'Dec', 'дек' => 'Dec', ]; foreach ($months as $ru => $en) { $dateString = str_replace($ru, $en, $dateString); } $retval = new \DateTime($dateString); return $retval; } }