curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, ['tuto-csrf' => $csrf_token, 'login' => urlencode($cli->arguments->get('user')), 'pwd' => urlencode($cli->arguments->get('password')), 'submit_login' => 'se+connecter']); curl_setopt($curl, CURLOPT_HTTPHEADER, $browser_headers); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); $result_login = curl_exec($curl); curl_close($curl); if (false !== strpos($result_login, 'Il y a eu des erreurs lors de la validation')) { $cli->inline('[')->red()->inline('FAIL')->white()->out(']'); $cli->red()->out('Please verify the email and the password!'); clean_and_die(); } $cli->inline('[ ')->green()->inline('OK')->white()->out(' ]'); // Tutorials $video_links = []; $cli->blue()->out('Downloading ' . count($input_ids) . ' tutorials'); foreach ($input_ids as $input_id) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://fr.tuto.com/compte/achats/video/' . $input_id . '/player/'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_COOKIESESSION, true); curl_setopt($curl, CURLOPT_COOKIEJAR, OUTPUT_DIR . 'tmp_cookies.txt'); curl_setopt($curl, CURLOPT_COOKIEFILE, OUTPUT_DIR . 'tmp_cookies.txt'); curl_setopt($curl, CURLOPT_HTTPHEADER, $browser_headers); $tutorial_page = curl_exec($curl); curl_close($curl); $tutorial_title = preg_replace('/.+span class="title-22">([^<]+)<\\/span>.+/s', '$1', $tutorial_page); $tutorial_title_sanitized = preg_replace('/.+\\/([^,]+),' . $input_id . '\\.html.+/s', '$1', $tutorial_page); $tutorial_playlist = json_decode(preg_replace('/.+var playlists = ([^;]+);.+/s', '$1', $tutorial_page)); preg_match_all('/data-hash="([^"]+)" data-slug="([^"]*)">/U', $tutorial_page, $chapters_preg); if (0 === count($chapters_preg[0])) {