61

Re: moonwalk

михаил пишет:

Для удобства введите ключи:
(--group=alph--quality=low--quality=medium--quality=high--hwaccel=auto).

Указание всех вариантов ключа --quality бесполезно. Будет отработан только первый попавшейся в списке. В данном случае --quality=low.
Нужно указывать --quality=low либо --quality=medium либо --quality=high.

Sony Bravia KDL-32CX523

62 (2017.05.26 01:58:11 отредактировано михаил)

Re: moonwalk

Спосибо, но здесь все очевидно.(low-низкое и т.д.).И выбор зависит от пользователя,а то что я прописал-это на выбор как вариант.

"Хорошо написанная программа — это программа, написанная 2 раза" :-X

63

Re: moonwalk

привет друг, смотрел на твой код на https://gist.github.com/WendyH/3092dc75 … /revisions
видел что много правок сделал
но я блин вообще не силен C+
можешь не много подправить код на php который в теме
заранее спасибо
а то я два битых часа сижу не могу понять что им надо в пост запросе отправить

64

Re: moonwalk

заголовки вроде верные, в пост запросе новый параметр добавился, но и его я получил и отправлял, но все попытки без результатны

65 (2017.06.15 23:19:45 отредактировано WendyH)

Re: moonwalk

butkusp пишет:

заголовки вроде верные, в пост запросе новый параметр добавился, но и его я получил и отправлял, но все попытки без результаты

В общем случае, посмотреть какие заголовки отправляются на самом деле, можно в браузере в инструментах разработчика.

+ открыть спойлер

https://hms.lostcut.net/img/help/moonwalk_session_watch.png

Если ваш скрипт ну никак не хочет работать, то запросы вашего скрипта и браузера с сайта, всё-таки, отличаются.

Для большей наглядности, удобно использовать инструмент Charles.
Чтобы все запросы браузера проходили через него.
Также, если вы проверяете свой скрипт на PHP у себя локально на машине (например, с Денвер или Wampserver), то вам нужно в скрипте указать загрузку через локальный прокси.

Если в PHP скрипте используете отправку запросов с помощью file_get_contents, то вам нужно сделать что-то типа:

    $options = array();
    $options['http'] = array('method' => $method ,
                             'protocol_version' => 1.1,
                             'proxy'  => 'tcp://localhost:8888',
                             'request_fulluri' => true,
                             'header' => $headers,
                             'content'=> $data   );
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);

Обратите внимание на 'proxy'  => 'tcp://localhost:8888'.
Если используете curl, то что-то типа такого:

...
              CURLOPT_PROXY => "127.0.0.1:8888"
...

Чтобы пахэпэ-скрипт тоже делал запросы через наш локальный прокси.
Тогда мы там с лёгкостью увидим отличия, запросов наших от работающих. Дело может быть и в http заголовках, может быть в неправильных значениях.
Тут трудно судить. Обычно, ошибки в какой-нибудь мелочи, которую сразу и не видно.
Основное последнее их изменение в том, что они в html запрятали явное название переменных в код javascript.

<script type="text/javascript">
  setTimeout(function() {
    window['d5' + '20efc8' + 'c8106' + '22' + '859' + 'd307f2d8f' + 'e8' + '52a']['c90b4ca500a12b91' + 'e2b54b2d4a1e4fb7'] = 'cc5610c93' + 'fa23befc2d' + '244a76500ee6c';
  }, 350);
</script>

В моём скрипте просто выдёргиваются значения первой и второй группировки по регулярке:

"window\\[[^\\]]+\\]\\[(.*?)\\]\\s*=\\s*(.*?);"

Для PHP это будет:

preg_match('/window\[[^\]]+\]\[(.*?)\]\s*=\s*(.*?);/', $html, $matches);
$sVar = str_replace(["+", " ", "'"], "", $matches[1]); // Убираем все кавычки, плюсы, пробелы
$sVal = str_replace(["+", " ", "'"], "", $matches[2]);
$sPost .= "&$sVar=$sVal";

Т.е. в такой строке кода, выдираем значение между вторых квадратных скобок (имя значения) и значение после знака равно.
window['d5' + '20efc8' + 'c8106' + '22' + '859' + 'd307f2d8f' + 'e8' + '52a']['c90b4ca500a12b91' + 'e2b54b2d4a1e4fb7'] = 'cc5610c93' + 'fa23befc2d' + '244a76500ee6c';

Типа того.

Если говорить о чём-то более конкретном, давайте свой скрипт, посмотрим что с ним не так.

Sony Bravia KDL-32CX523

66

Re: moonwalk

WendyH
спасибо за помощь, я конечно твоим методом не пользовался решил сам по эксперементирвать, вроде как удалось
не много по другому я получаю массив с их ссылками, что ускоряет процесс самого парсинга
а так все же спасибо что откликнулись
еще узнал что moonwalk теперь еще и отдает ссылки в mp4 формате

67

Re: moonwalk

butkusp пишет:

еще узнал что moonwalk теперь еще и отдает ссылки в mp4 формате

Осторожно, не всегда. Все форматы, в том числе и манифесты f4m (HDS формат) тоже на некоторых видео не срабатывает. Т.е. ссылка есть, а по ней потока нет. Я так понял у них это ещё в режиме отладки.

Sony Bravia KDL-32CX523

68

Re: moonwalk

butkusp пишет:

... решил сам по эксперементирвать, вроде как удалось
не много по другому я получаю массив с их ссылками, ...

Можешь поделиться тем, что у тебя получилось? Очень интересно взглянуть)

69

Re: moonwalk

что то снова сменилось скриптом на php c етой темы не могу даже получить содержание страницы с фильмом  :(

70

Re: moonwalk

вот такой вот скрипт добавили в код плеера, который вас и редиректит


<script type="text/javascript">
    var current_location = window.location.href;
    var parent_location = 'parent_location_init';

    try {
      parent_location = window.parent.location.href;
    } catch(exception) {}

    if (current_location == parent_location) {
      window.location.href = '/video/blocked';
    }
  </script>

71

Re: moonwalk

:(  а обойти можно

72

Re: moonwalk

врать не буду, не знаю, толком еще не смотрел

73

Re: moonwalk

побороться с редиректом оказалось не так уж и сложно
но вот вывести ссылки чет у меня не выходит
что бы не редиректило просто после

$page = LoadPage($url, "GET", $headers);

вставить

$page = str_ireplace("window.location.href = '/video/blocked';", "", $page);

74 (2017.06.15 21:34:08 отредактировано bond)

Re: moonwalk

теперь как я понял там по другому ссылка отдается идет пост запрос на

http://moonwalk.cc/manifests/video/eb3ecae82420d110/all

с параметрами

content_type=movie&mw_key=1ffd4aa558cc51f5a9fc6888e7bc5cb4&mw_pid=65&p_domain_id=53973&ad_attr=0&c90b4ca500a12b91e2b54b2d4a1e4fb7=cc5610c93fa23befc2d244a76500ee6c

пока не получилось сделать может не прав

75

Re: moonwalk

да так
у меня заработало
до этого тоже не пахало
пока на другом серваке не проверил
раньше на латвийском все висело
на рушке пашет
http://sciencee.multiki-online24.ru/seach.php

76

Re: moonwalk

у меня не пашет не пойму в чем дело та сильно и не разбираюсь в php не подельшься как вы сделали

77 (2017.06.15 23:02:44 отредактировано butkusp)

Re: moonwalk

так может тебя забанили просто напросто
я же написал что на латвийском серваке отказывался работать данный парсер

http://moonwalk.cc/manifests/video/eb3ecae82420d110/all

вот эта ссылка должна постоянно меняться

78

Re: moonwalk

по ходу где то ошибка не вижу видать где

79

Re: moonwalk

посмотрите что не так

+ открыть спойлер
<?php
ini_set("log_errors", 1); ini_set("error_log", $_SERVER['SCRIPT_FILENAME'].".log"); ini_set('error_reporting', E_ALL); ini_set("display_errors", 1);

// Получение ссылки на видео c moonwalk в переданных параметрах, а также тип получаемого потока.
$url     = isset($_REQUEST['url'    ]) ? $_REQUEST['url' ] : ""    ; // moonwalk.cc iframe url
$type    = isset($_REQUEST['type'   ]) ? $_REQUEST['type'] : "m3u8"; // tyle of link (f4m, m3u8, dash)
$urlonly = isset($_REQUEST['urlonly']); // Флаг, сигнализирующий отдавать ссылку на плейлист, а не само его содержимое
$attacha = isset($_REQUEST['at'     ]); // Флаг, сигнализирующий отдавать плейлист как прикреплённый файл с расширением

if (!$url) die("No moonwalk iframe url in the parameters.");

$cookies = array();

// Установка HTTP заголовков
$headers = "Accept-Encoding: gzip, deflate\r\n" .
           "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n" .
           "Referer: " . $url . "\r\n" .
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36\r\n" .
           "Upgrade-Insecure-Requests: 1";


// Загружаем страницу iframe c moonwalk

$page = LoadPage($url,"GET",$headers);

$page = str_ireplace("window.location.href = '/video/blocked';", "", $page);
// Добавляем HTTP заголовки для POST запроса
$headers .= "X-Requested-With: XMLHttpRequest\r\n" .
            "Origin: http://moonwalk.cc\r\n";

// Поиск дополнительных HTTP заголовков, которые нужно установить
if ($data = GetRegexValue($page, "#ajaxSetup\([^)]+headers:(.*?)}#is"))
    {
    $count = preg_match_all('#["\']([\w-_]+)["\']\s*:\s*["\'](\w+)["\']#', $data, $m);
    print_r($count);
    for ($i=0; $i < $count; $i++) $headers .= $m[1][$i] . ": " . $m[2][$i] . "\r\n";
}
//print_r($headers);
// Получаем со страницы значения нужных параметров
$post = GetRegexValue($page, "#window\\[[^]]+]\\s*=\\s*\\{(.*?)\\}#is");
$post = str_replace(["\r","\n"," ","'"], '', $post); // Убираем перносы строк, пробелы, кавычки
$post = str_replace(':', '=', $post); // Заменяем все : на =
$post = str_replace(',', '&', $post); // Заменяем знак разделения параметров c ',' на '&'
$post = str_replace('condition_detected?1=', '', $post); // Убираем лишнее
// Поиск и замена переменных на их значения в POST запросе
preg_match_all("#=(\w+)#", $post, $m);
foreach($m[1] as $var) {
    $val = GetRegexValue($page, "#$var\s*=\s*[\"']([^\"']+)#");
    if ($val) $post = str_replace("=$var", "=$val", $post);
}

// Поиск дополнительных параметров для POST запроса, которые нужно установить
/*$name = GetRegexValue($page, "#/new_session.*?(\w+)\s*?=\s*?\{#is");
//print_r($name);
preg_match_all("#".$name."\.(\w+)\s*=#", $page, $m);
foreach($m[1] as $var) {
    $val = GetRegexValue($page, "#$var\s*=\s*[\"']([^\"']+)#");
    $post .= "&$var=$val";
    print_r($post);
}*/
$count = preg_match_all("#post_method\.(\w+)\s*=\s*'(.*?)'#", $page, $m);

for ($i=0; $i < $count; $i++) { 
    $var = $m[1][$i];
    $val = $m[2][$i];
    $post .= "&$var=$val";
}

$coun = preg_match_all("#\['(\w+)'\]\s*=\s*'(.*?)'(.*)#", $page, $m1);

for ($i=0; $i < $coun; $i++) { 
    $var = $m1[1][$i];
    $val = $m1[2][$i];
    $post .= "&$var=$val";
}

preg_match("#window\\[[^\\]]+\\]\\[(.*?)\\]\\s*=\\s*(.*?);#", $page, $matches);
$var = str_replace(["+", " ", "'"], "", $matches[1]); // Убираем все кавычки, плюсы, пробелы
$val = str_replace(["+", " ", "'"], "", $matches[2]);
$post .= "&$var=$val";
// Теперь в $post - строка необходимых параметров в формате для POST запроса

preg_match("#\'(/manifests/.*?)\'#", $page, $film); //берем из страницы манифест


$data = LoadPage('http://moonwalk.cc'.$film[1], "POST", $headers, $post);

if ($type=="json") die($data);

// Делаем из полученных json данных ассоциативный массив PHP
$answerObject = json_decode($data, TRUE);

// Получаем значение ссылки нужного типа потока (по-умолчанию: m3u8)
$link = "";
if (isset($answerObject["mans"])) $link = $answerObject["mans"]["manifest_".$type];

// Если ссылка с таким типом есть, получаем содержимое плейлиста/манифеста
if ($link) {
    if ($urlonly) 
        $data = $link;
    else {
//        if      ($type=="m3u8") header("Content-Type: application/vnd.apple.mpegurl");
//        else if ($type=="f4m" ) header("Content-Type: application/xml");
        $data = LoadPage($link, "GET", $headers);
        if ($attacha) {
            header("Content-Length: ".strlen($data));
            header("Content-Disposition: attachment; filename=play.$type");
        }
    }
} 

// Отдаём полученное
//echo $data;

///////////////////////////////////////////////////////////////////////////////
// Получение страницы с указанными методом и заголовками
function LoadPage($url, $method, $headers, $data='') {
    global $cookies;

    // Если есть кукисы - добавляем их значения в HTTP заголовки
    $coo = "";
    foreach($cookies as $key => $val) $coo .= $key."=".urlencode($val)."; ";
    if ($coo) $headers .= "Cookie: $coo\r\n";

    $options = array();
    $options['http'] = array('method' => $method ,
                             'header' => $headers,
                             'content'=> $data);
    $context = stream_context_create($options);
    $page    = file_get_contents($url, false, $context);
    // Перебираем HTTP заголовки ответа, чтобы установить кукис
    foreach($http_response_header as $c => $h) {
        if (stristr($h, 'content-encoding') and stristr($h, 'gzip')) {
            $page = gzdecode($page);
        } else if (preg_match('#^Set-Cookie:\s*([^;]+)#', $h, $matches)) {
            parse_str($matches[1], $tmp);
            $cookies += $tmp;
        }
    }
    return $page;
}

////////////////////////////////////////////////////////////////////
// Функция получения значения по указанному регулярному выражению
function GetRegexValue($text, $pattern, $group=1) {
    if (preg_match($pattern, $text, $matches))
      return $matches[$group];
    return "";
}

80

Re: moonwalk

bond, у вас заголовки поломаны. Каждый HTTP заголовок должен кончатся символами \r\n
А в скрипте стоит просто "Upgrade-Insecure-Requests: 1". А потом ниже к этому добавляются другие.
Вообще уберите этот header - "Upgrade-Insecure-Requests", он не нужен. Он только для браузеров, а вы загружаете скриптом.
Так же из-за этого операция

$page = str_ireplace("window.location.href = '/video/blocked';", "", $page);

абсолютно не нужна. Только если вы хотите весь html код браузеру отдать. Но смысл то этого скрипта выцарапать ссылки, поэтому никакой html код (и тем более JavaScript код) не исполняется. Вы же просто на PHP загружаете данные и работаете с ними.

Ну и самое главное.
У вас закомментирована самая важная строчка:

// Отдаём полученное
//echo $data;

Без неё ничего, никакие результаты не увидеть. )

P.S.: Вот сообщении, чуть выше, я уже писал, что отладку скрипта на PHP удобно делать локально. Перенаправить запросы через локальный прокси, в котором легко увидеть HTTP заголовки и передаваемые параметры запроса. Там наглядно видно, что отправляется и что получает в ответ. И легко сравнить с запросами на сайте.

Sony Bravia KDL-32CX523
Спасибо сказали: bond1

81

Re: moonwalk

у меня код практически такой же
в логах есть ошибки?
и раскоментируй //echo $data;
а то ты так ничего и не увидешь

Спасибо сказали: bond1

82 (2017.06.16 00:09:11 отредактировано butkusp)

Re: moonwalk

согласен с WendyH строка не нужна, редирект у меня спабатывал так как я на экран выводил код плеера
сейчас проверил и без нее все работает


Еще спросить хотел у тебя WendyH
возможно ли прикрутить прокси к данному скрипту-парсеру?
Даже не так, возможно ли прикрутить прокси с авторизацией по логину и паролю?

83

Re: moonwalk

butkusp пишет:

Еще спросить хотел у тебя WendyH
возможно ли прикрутить прокси к данному скрипту-парсеру?

В предыдущем сообщении в постскриптуме же.

Sony Bravia KDL-32CX523
Спасибо сказали: butkusp1

84 (2017.06.18 14:50:13 отредактировано butkusp)

Re: moonwalk

Скрипт срабатывает раз через раз
не все видео работают
или возможно из за частых запросов

85

Re: moonwalk

я уже писал такая же ситуация в основном фильмы 2017 года

86

Re: moonwalk

но ведь запросто один и тот же, что на фильмы за 2016 год что за 17

87

Re: moonwalk

бывает перегружаешь скрипт неколько раз потом ловит работающую ссылку

88

Re: moonwalk

bond пишет:

бывает перегружаешь скрипт неколько раз потом ловит работающую ссылку

у меня так же бывает, время некоторое переждешь и скрипт срабатывает

89

Re: moonwalk

Привет, ребят.

Как можно проиграть *.m3u8 на стороне клиента не передавая сам файл.
Сделать что то типо ретрансляции ? И если это так. То как это реализовать на php?

90

Re: moonwalk

bond пишет:

теперь как я понял там по другому ссылка отдается идет пост запрос на

http://moonwalk.cc/manifests/video/eb3ecae82420d110/all

с параметрами

content_type=movie&mw_key=1ffd4aa558cc51f5a9fc6888e7bc5cb4&mw_pid=65&p_domain_id=53973&ad_attr=0&c90b4ca500a12b91e2b54b2d4a1e4fb7=cc5610c93fa23befc2d244a76500ee6c

пока не получилось сделать может не прав

я все равно не понимаю, то есть достаточно сделать post с параметрами?
но как бы не пытался ответ

"error_code": 100

правда делал через онлайн (web-sniffer и прочее)