Так как штатный просмотр Youtube на Яндекс.Станции работает криво - нет входа в аккаунт, да и поиск работает кое-как, решил прикрутить костыли.
Работа костыля заключается в передаче ссылки на ролик на Станцию со смартфона через telegram модуль в MajorDomo.
$pos = strripos($text , "youtu");
if ($pos > -1) {
// Причешем ссылки к одному виду, т.к. разные смартфоны и ПК дают разные варианты, а Яндекс понимает один. Если есть еще какие - подсказывайте.
$dataurl=parse_url($text);
if ((($dataurl["host"] == "www.youtube.com") || ($dataurl["host"] == "m.youtube.com") || ($dataurl["host"] == "youtube.com")) && ($dataurl["path"] == "/watch")) {
parse_str($dataurl["query"], $query);
$qurl="https://www.youtube.com/watch?v=".$query["v"];
}
elseif ($dataurl["host"] == "youtu.be") {
$qurl="https://www.youtube.com/watch?v=".substr($dataurl["path"], 1, 12);
}
else {
$this->sendMessageToUser($chat_id, "Это не ссылка на Youtube");
$skip = true;
return;
}
$myCurl = curl_init();
$Ya_login = '**ЛОГИН на Яндекс**';
$Ya_pass = '**Пароль на Яндекс**';
curl_setopt($myCurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($myCurl, CURLOPT_USERAGENT, 'Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4');
curl_setopt($myCurl, CURLOPT_URL, 'https://passport.yandex.ru/');
curl_setopt($myCurl, CURLOPT_POST, false);
curl_exec($myCurl);
curl_setopt($myCurl, CURLOPT_URL, 'https://passport.yandex.ru/passport?mode=auth&retpath=https://yandex.ru');
curl_setopt($myCurl, CURLOPT_POST, true);
curl_setopt($myCurl, CURLOPT_HEADER, false);
curl_setopt($myCurl, CURLOPT_POSTFIELDS, http_build_query(array('login'=>$Ya_login, 'passwd'=>$Ya_pass)));
curl_setopt($myCurl, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
$auth = curl_exec($myCurl);
Debmes("auth ".$auth);
if (strripos($auth , "Found") === false) {
$this->sendMessageToUser($chat_id, "Неверные логин-пароль");
$skip = true;
return;
}
curl_setopt($myCurl, CURLOPT_URL, 'https://frontend.vh.yandex.ru/csrf_token');
curl_setopt($myCurl, CURLOPT_POST, false);
curl_setopt($myCurl, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
$token = curl_exec($myCurl);
curl_setopt($myCurl, CURLOPT_URL, 'https://quasar.yandex.ru/devices_online_stats');
curl_setopt($myCurl, CURLOPT_POST, false);
$device = json_decode(curl_exec($myCurl), true);
$id = $device["items"][0]["id"];
Debmes("device ".implode($device));
curl_setopt($myCurl, CURLOPT_URL, 'https://yandex.ru/video/station');
curl_setopt($myCurl, CURLOPT_POST, true);
curl_setopt($myCurl, CURLOPT_POSTFIELDS, json_encode(array('msg'=>array('provider_item_id'=>$qurl, 'player_id'=>'youtube'), 'device'=>$id), JSON_UNESCAPED_SLASHES));
curl_setopt($myCurl, CURLOPT_HTTPHEADER, array('x-csrf-token:'.$token));
curl_exec($myCurl);
curl_close($myCurl);
}
Некоторые ролики не идут (( по каким-то внутренним яндексовско-ютубовским отношениям. Ну и устройства должны быть в одной подсети.
Наработки взяты отсюда https://habr.com/ru/post/479242/
P.S. На Андроидах в Яндекс бете вроде добавили отправку из ютуба на станцию, но у меня эпл, и когда там заработает - неизвестно.