TurburatoR

 
<<< Назад

Просмотр youtube на Яндекс Станции через telegram модуль в MajorDomo

Так как штатный просмотр Youtube на Яндекс.Станции работает криво - нет входа в аккаунт, да и поиск работает кое-как, решил прикрутить костыли.
Работа костыля заключается в передаче ссылки на ролик на Станцию со смартфона через telegram модуль в MajorDomo.

  1. Создаем в модуле telegram событие типа "текстовое сообщение" (см. скрины)
  2. Вставляем код в событие
  3. в коде вставляем свои логин и пароль от сервисов Яндекса.
  4. Со смартфона (или любым способом) отправляем ссылку на ролик своему боту в mjdm - удобнее всего через меню "поделиться"
  5. Смотрим ролик на Станции
$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. На Андроидах в Яндекс бете вроде добавили отправку из ютуба на станцию, но у меня эпл, и когда там заработает - неизвестно.

Обсуждение (15) (6)

Новокузнецк, Россия

На форуме: TurburatoR

Веб-сайт:
http://lite14.ru