Skip to content

Commit 26d033e

Browse files
author
Daniel Neto
committed
Implement YouTube cookie management and enhance logging in Encoder and Streamer classes
1 parent 9978c96 commit 26d033e

File tree

13 files changed

+276
-58
lines changed

13 files changed

+276
-58
lines changed

objects/Encoder.php

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ public function save()
198198
_error_log("Encoder::save id=(" . $this->getId() . ") title=(" . $this->getTitle() . ") streamers_id={$this->streamers_id} status_obs={$this->status_obs} ");
199199
$id = parent::save();
200200
$this->id = $id;
201-
_error_log("Encoder::save id=(" . $this->getId() . ")". ' <=>' . json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)));
201+
_error_log("Encoder::save id=(" . $this->getId() . ")" . ' <=>' . json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)));
202202
return $id;
203203
}
204204

@@ -1868,29 +1868,29 @@ public static function sendFile($file, $return_vars, $format, Encoder $encoder =
18681868
self::setStreamerLog($encoder->getId(), __FUNCTION__, Encoder::LOG_TYPE_INFO);
18691869
$obj = self::sendToStreamer($target, $postFields, $return_vars, $encoder);
18701870
$obj->videoFileSize = humanFileSize(filesize($file));
1871-
_error_log("AVideo-Streamer sendFile sendToStreamer done: " . json_encode($obj) );
1871+
_error_log("AVideo-Streamer sendFile sendToStreamer done: " . json_encode($obj));
18721872
$obj->file = $file;
18731873

18741874
if (isset($u) && $u !== false && $obj->error == false) {
18751875
$u->setStatus(Encoder::STATUS_DONE);
18761876
$u->save();
18771877
} elseif ($obj->error) {
1878-
if(!empty($obj->response) && !empty($obj->response->msg) && !empty($encoder)){
1878+
if (!empty($obj->response) && !empty($obj->response->msg) && !empty($encoder)) {
18791879
$encoder->setStatus(Encoder::STATUS_ERROR);
18801880
$encoder->setStatus_obs($obj->response->msg);
18811881
$savedId = $encoder->save();
1882-
_error_log("AVideo-Streamer sendFile error: ". json_encode($obj->response->msg) . ' savedId=' . $savedId . ' <=>' . json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)));
1883-
}else{
1884-
_error_log("AVideo-Streamer sendFile error error: " . json_encode($postFields) . ' <=>' . json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)). ' '. json_encode($obj) );
1882+
_error_log("AVideo-Streamer sendFile error: " . json_encode($obj->response->msg) . ' savedId=' . $savedId . ' <=>' . json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)));
1883+
} else {
1884+
_error_log("AVideo-Streamer sendFile error error: " . json_encode($postFields) . ' <=>' . json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)) . ' ' . json_encode($obj));
18851885
}
18861886
}
18871887
return $obj;
18881888
}
18891889

18901890
private static function isUploadLimitMsg($text)
1891-
{
1892-
return stripos($text, 'upload limit reached') !== false;
1893-
}
1891+
{
1892+
return stripos($text, 'upload limit reached') !== false;
1893+
}
18941894

18951895
public static function sendFileChunk($file, $return_vars, $format, $encoder = null, $resolution = "", $try = 0)
18961896
{
@@ -2217,7 +2217,7 @@ public static function sendToStreamer($target, $postFields, $return_vars = false
22172217
$obj = new stdClass();
22182218
$obj->error = false;
22192219
return $obj;
2220-
}else{
2220+
} else {
22212221
_error_log("sendToStreamer it is the spectrum (mp3 to hls) mp4 file will be sent");
22222222
$postFields['forceIndex'] = 1;
22232223
}
@@ -2294,7 +2294,7 @@ public static function sendToStreamer($target, $postFields, $return_vars = false
22942294
}
22952295
$obj->response_raw = curl_exec($curl);
22962296
} catch (\Throwable $th) {
2297-
$obj->msg = $th->getMessage().' URL='.$url;
2297+
$obj->msg = $th->getMessage() . ' URL=' . $url;
22982298
return $obj;
22992299
}
23002300
$obj->response = json_decode($obj->response_raw);
@@ -3054,7 +3054,7 @@ public static function getYouTubeDLCommand($addOauthFromProvider = '', $streamer
30543054
global $global;
30553055
$cacheDir = '/var/www/.cache/';
30563056
if (!is_dir($cacheDir)) {
3057-
@mkdir($cacheDir);
3057+
@mkdir($cacheDir, 0755, true);
30583058
}
30593059

30603060
$ytdl = "youtube-dl ";
@@ -3065,6 +3065,15 @@ public static function getYouTubeDLCommand($addOauthFromProvider = '', $streamer
30653065
} elseif (file_exists("/usr/local/bin/youtube-dl")) {
30663066
$ytdl = "/usr/local/bin/youtube-dl ";
30673067
}
3068+
3069+
// add the youtubeCookie
3070+
$s = new Streamer($streamers_id);
3071+
$cookieFile = $s->getYoutubeCookieFilePath();
3072+
if (!empty($cookieFile) && file_exists($cookieFile)) {
3073+
$cookieFileEscaped = escapeshellarg($cookieFile);
3074+
$ytdl .= " --cookie {$cookieFileEscaped} ";
3075+
}
3076+
30683077
if (!empty($addOauthFromProvider) || !empty($global['usingOauth'])) {
30693078
$accessToken = self::streamerHasOauth($addOauthFromProvider, $streamers_id);
30703079
if (empty($accessToken)) {
@@ -3075,10 +3084,12 @@ public static function getYouTubeDLCommand($addOauthFromProvider = '', $streamer
30753084
$ytdl .= " --add-header \"Authorization: Bearer {$accessToken}\" ";
30763085
}
30773086
}
3087+
30783088
_error_log("getYouTubeDLCommand($addOauthFromProvider, $streamers_id, $forceYoutubeDL)");
30793089
return $ytdl;
30803090
}
30813091

3092+
30823093
public static function setStreamerLog($encoder_queue_id, $msg, $type)
30833094
{
30843095
global $global;

objects/Streamer.php

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ private static function get($user, $siteURL)
2626
$global = [];
2727
}
2828
$sql = "SELECT * FROM " . static::getTableName() . " WHERE user = '{$user}' AND lower(siteURL) = lower('{$siteURL}') LIMIT 1";
29-
//echo $sql;exit;
29+
//echo $sql;exit;
3030
/**
3131
* @var array $global
3232
* @var object $global['mysqli']
@@ -270,7 +270,7 @@ function setPass($pass)
270270
$config = new Configuration();
271271
if (version_compare($config->getVersion(), '4.0') < 0) {
272272
$pass = substr($pass, 0, 45);
273-
}else{
273+
} else {
274274
$pass = substr($pass, 0, 255);
275275
}
276276
$this->pass = $pass;
@@ -319,14 +319,30 @@ function setJson($json)
319319
$this->json = $json;
320320
}
321321

322+
function updateJson($parameter, $value)
323+
{
324+
$jsonString = $this->getJson();
325+
326+
if (empty($jsonString)) {
327+
$json = array();
328+
} else {
329+
$json = json_decode($jsonString, true);
330+
}
331+
$json[$parameter] = $value;
332+
333+
$this->setJson($json);
334+
335+
return $this->save();
336+
}
337+
322338
static function revalidateToken($streamers_id, $provider)
323339
{
324340
$response = array(
325341
'error' => true,
326342
'msg' => '',
327343
'provider' => $provider,
328344
);
329-
345+
330346
if (empty($provider)) {
331347
$response['msg'] = "Provider is empty";
332348
return $response;
@@ -335,18 +351,18 @@ static function revalidateToken($streamers_id, $provider)
335351
$s = new Streamer($streamers_id);
336352
$jsonString = $s->getJson();
337353
if (empty($jsonString)) {
338-
$response['msg'] = "There is no token for this streamers_id = $streamers_id [$provider] ".json_encode(debug_backtrace());
354+
$response['msg'] = "There is no token for this streamers_id = $streamers_id [$provider] " . json_encode(debug_backtrace());
339355
return $response;
340356
} else {
341357
$json = json_decode($jsonString, true);
342358
}
343359
$response['json'] = $json;
344-
if(empty($json[$provider]['json']["restream.ypt.me"]['access_token'])){
360+
if (empty($json[$provider]['json']["restream.ypt.me"]['access_token'])) {
345361
$response['accessToken'] = $json[$provider]['json']["restream.ypt.me"]['accessToken'];
346-
}else{
362+
} else {
347363
$response['accessToken'] = $json[$provider]['json']["restream.ypt.me"]['access_token'];
348364
}
349-
365+
350366
if (empty($response['accessToken'])) {
351367
_error_log(json_encode($json));
352368
$response['msg'] = "revalidateToken($streamers_id, $provider) access_token is empty ";
@@ -378,7 +394,7 @@ static function revalidateToken($streamers_id, $provider)
378394
$response['error'] = empty($response['respJson']) || $response['respJson']['error'];
379395
$response['msg'] = empty($response['respJson']) ? 'Empty response' : $response['respJson']['msg'];
380396
$response['saved'] = false;
381-
if(empty($response['error'] ) && !empty($response['respJson']['new_access_token'])){
397+
if (empty($response['error']) && !empty($response['respJson']['new_access_token'])) {
382398
$json[$provider]['json']["restream.ypt.me"]['accessToken'] = $response['respJson']['new_access_token'];
383399
$json[$provider]['json']["restream.ypt.me"]['expires'] = $response['respJson']['expires'];
384400

@@ -392,14 +408,58 @@ static function revalidateToken($streamers_id, $provider)
392408
return $response;
393409
}
394410

395-
static function getAccessToken($streamers_id, $provider){
411+
static function getAccessToken($streamers_id, $provider)
412+
{
396413
$json = self::revalidateToken($streamers_id, $provider);
397414
//var_dump($json);exit;
398-
if(empty($json['accessToken']["access_token"])){
415+
if (empty($json['accessToken']["access_token"])) {
399416
_error_log(json_encode($json));
400417
return false;
401418
}
402419
return $json['accessToken']["access_token"];
403420
}
421+
422+
function getYoutubeCookieFilePath()
423+
{
424+
$jsonString = $this->getJson();
425+
if (empty($jsonString)) {
426+
return '';
427+
}
428+
429+
$json = json_decode($jsonString, true);
430+
if (empty($json['youtubeCookie'])) {
431+
return '';
432+
}
433+
434+
$cookie = $json['youtubeCookie'];
435+
436+
// Decode if it's a stringified JSON
437+
if (is_string($cookie)) {
438+
$cookie = json_decode($cookie, true);
439+
}
440+
441+
if (!is_array($cookie) || empty($cookie)) {
442+
return '';
443+
}
444+
445+
// Build Netscape-format cookie content
446+
$lines = [];
447+
foreach ($cookie as $item) {
448+
$lines[] = implode("\t", [
449+
$item['domain'] ?? '',
450+
$item['hostOnly'] ? 'FALSE' : 'TRUE',
451+
$item['path'] ?? '/',
452+
$item['secure'] ? 'TRUE' : 'FALSE',
453+
$item['expirationDate'] ?? 0,
454+
$item['name'] ?? '',
455+
$item['value'] ?? '',
456+
]);
457+
}
458+
459+
$cookieFilePath = tempnam(sys_get_temp_dir(), 'ytcookie_');
460+
file_put_contents($cookieFilePath, implode(PHP_EOL, $lines) . PHP_EOL);
461+
462+
return $cookieFilePath;
463+
}
404464
}
405465
}

view/index.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,7 @@ function submitDownloadForm() {
11491149
"webm": $('#inputWebM').is(":checked"),
11501150
"override_status": $('#override_status').val(),
11511151
"videoURL": $('#inputVideoURL').val(),
1152+
"youtubeCookie": $('#youtubeCookie').val(),
11521153
"update_video_id": $('#update_video_id').val(),
11531154
"inputHLS": $('#inputHLS').is(":checked"),
11541155
"inputLow": $('#inputLow').is(":checked"),
@@ -1196,6 +1197,7 @@ function submitDownloadForm() {
11961197
$.ajax({
11971198
url: 'youtubeDl.json?<?php echo getPHPSessionIDURL(); ?>',
11981199
data: {
1200+
"youtubeCookie": $('#youtubeCookie').val(),
11991201
"videoURL": $('#inputVideoURL').val(),
12001202
"audioOnly": $('#inputAudioOnly').is(":checked"),
12011203
"spectrum": $('#inputAudioSpectrum').is(":checked"),
@@ -1251,4 +1253,4 @@ function resetAutocompleteVideosID() {
12511253

12521254
</body>
12531255

1254-
</html>
1256+
</html>

view/index_shareVideos.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
23
<div class="panel panel-default">
34
<div class="panel-heading">
45
<?php
@@ -42,6 +43,7 @@
4243
<span class="glyphicon glyphicon-info-sign"></span> <?php echo __('Share videos from YouTube and a few'); ?> <a href="https://rg3.github.io/youtube-dl/supportedsites.html" target="_blank"><?php echo __('more sites'); ?></a>.
4344
</div>
4445
<form id="downloadForm" onsubmit="">
46+
<input type="hidden" name="youtubeCookie" id="youtubeCookie" value="">
4547
<div class="form-group">
4648
<div class="input-group">
4749
<input type="url" class="form-control" id="inputVideoURL" placeholder="http://..." />
@@ -62,7 +64,7 @@
6264
?>
6365
<div class="form-group">
6466
<div style="display: flex;">
65-
<?php
67+
<?php
6668
echo getCategoriesSelect('download_categories_id');
6769
?>
6870
</div>
@@ -113,7 +115,7 @@
113115
?>
114116
<div class="form-group">
115117
<div style="display: flex;">
116-
<?php
118+
<?php
117119
echo getCategoriesSelect('bulk_categories_id');
118120
?>
119121
</div>

view/index_signin.delete.json.php

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,15 @@
1818
}
1919

2020
$s = new Streamer(Login::getStreamerId());
21-
$jsonString = $s->getJson();
22-
23-
if(empty($jsonString)){
24-
$json = array();
25-
}else{
26-
$json = json_decode($jsonString, true);
27-
}
28-
//var_dump($_REQUEST);exit;
29-
unset($json[$_REQUEST['provider']]);
30-
31-
$s->setJson($json);
32-
33-
$saved = $s->save();
21+
$saved = $s->updateJson($_REQUEST['provider'], null);
22+
$json = $s->getJson();
3423

3524
$response = array(
3625
'error' => empty($saved),
3726
'saved' => $saved,
3827
'msg' => '',
39-
'json'=>$json
28+
'json'=> json_decode($json)
4029
);
4130

4231
echo json_encode($response);
43-
?>
32+
?>

view/index_signin.save.json.php

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,17 @@
1818
}
1919

2020
$s = new Streamer(Login::getStreamerId());
21-
$jsonString = $s->getJson();
2221

23-
if(empty($jsonString)){
24-
$json = array();
25-
}else{
26-
$json = json_decode($jsonString, true);
27-
}
28-
29-
$json[$_REQUEST['provider']] = $_REQUEST;
30-
31-
if(!empty($json[$_REQUEST['provider']]['json']) && is_string($json[$_REQUEST['provider']]['json'])){
32-
$json[$_REQUEST['provider']]['json'] = json_decode($json[$_REQUEST['provider']]['json']);
33-
}
34-
35-
$s->setJson($json);
22+
$saved = $s->updateJson($_REQUEST['provider'], $_REQUEST);
23+
$json = $s->getJson();
3624

37-
$saved = $s->save();
3825

3926
$response = array(
4027
'error' => empty($saved),
4128
'saved' => $saved,
4229
'msg' => '',
43-
'json'=>$json
30+
'json'=> json_decode($json)
4431
);
4532

4633
echo json_encode($response);
47-
?>
34+
?>

0 commit comments

Comments
 (0)