Помогите с регуляркой preg_match

killoff

CD тихо, и не DVD меня ;)
Команда форума
Модератор
Регистрация
13 Май 2008
Сообщения
2.619
Реакции
1.127
  • Автор темы
  • Модер.
  • #1
Всем привет. В общем проблемка у меня с одной функцией, раньше работала нормально, а с начала года перестала, руки только сейчас до неё добрались чтобы разобраться в чем причина. В общем есть
Код:
function getVKVideoInfo($link, $getFilesizes = false) {
    $html = file_get_contents(urldecode($link));
    preg_match('/(?<=var vars = ).+}/', $html, $matches);
    $json = json_decode(mb_convert_encoding($matches[0], "UTF-8", "CP1251"), true);
    $result['name'] = urldecode($json['md_title']);
    foreach ($json as $key => $value) {
        if (strpos($key, 'url') === 0) {
            preg_match('/^.+videos\/\w+\.(\d{3,4}).(\w{3,5})(?>=?)/', $value, $matches);
            preg_match('/^.+videos\/\w+\.?(\d{3,4})?.(\w{3,5})(?>=?)/', $value, $matches);
            $temp = array('link' => $value, 'quality' => $matches[1], 'format' => $matches[2]);
            if ($getFilesizes) {
                $head = array_change_key_case(get_headers($matches[0], true));
                $temp['size'] =  round($head['content-length'] / 1024 / 1024, 2);
            }
            $result['urls'][] = $temp;
            unset($temp);
        }
    }

    return $result;
}
и в ней перестала работать регулярка прописанная в preg_match.
Код:
var vars = {"uid":"6613833","vid":171245004,"oid":6613833,"host":"http:\/\/cs542408v4.vk.me\/","vtag":"9e0d223a6b","ltag":"l_e0df44be","vkid":171245004,"md_title":"1%2F5454-3","md_author":"%D0%95%D0%B2%D0%B3%D0%B5%D0%BD%D0%B8%D0%B9+%D0%9D%D1%83%D0%B6%D0%BD%D1%8B%D0%B9","author_id":6613833,"author_href":"\/byroot","hd":2,"no_flv":1,"hd_def":0,"dbg_on":0,"t":0,"duration":3852,"thumb":"http:\/\/cs629321.vk.me\/v629321833\/608e\/sT7FGm6n5L0.jpg","hash":"2e90bd964998bb508baa29737b1ebe47","hash2":"3d1e3e17f7bb8778","angle":0.000000,"img_angle":0.000000,"repeat":0,"show_ads_preroll":0,"show_ads_postroll":0,"show_ads_overlay":0,"legal_owner":0,"eid1":0,"slot":0,"g":1,"a":32,"puid34":1,"water_mark":"","can_rotate":1,"c3":"","no_adfox":1,"ads_preview":0,"puid4":0,"puid41":5,"url240":"http:\/\/cs542408v4.vk.me\/7\/u6613833\/videos\/9e0d223a6b.240.mp4?extra=pxJV5c8IPP6-Xe2t4Y6oFnq-NjEk90m7hW7MCKBJfikWSzAPMn_7__MXNZz3LEdCy5h9UhGX6VIBMJkAs3ij3HQOjPs","url360":"http:\/\/cs542408v4.vk.me\/7\/u6613833\/videos\/9e0d223a6b.360.mp4?extra=pxJV5c8IPP6-Xe2t4Y6oFnq-NjEk90m7hW7MCKBJfikWSzAPMn_7__MXNZz3LEdCy5h9UhGX6VIBMJkAs3ij3HQOjPs","url480":"http:\/\/cs542408v4.vk.me\/7\/u6613833\/videos\/9e0d223a6b.480.mp4?extra=pxJV5c8IPP6-Xe2t4Y6oFnq-NjEk90m7hW7MCKBJfikWSzAPMn_7__MXNZz3LEdCy5h9UhGX6VIBMJkAs3ij3HQOjPs","jpg":"http:\/\/cs629321.vk.me\/v629321833\/608d\/3c4O6NbyrUI.jpg","timeline_thumbs":1,"timeline_thumbs_jpg":"http:\/\/cs625618.vk.me\/v625618833\/3e2e7\/LI17LlHfbxQ.jpg,http:\/\/cs629412.vk.me\/v629412833\/b61c\/M4lPcVchkU8.jpg,http:\/\/cs629206.vk.me\/v629206833\/803b\/5F7M2ldhsp0.jpg,http:\/\/cs628026.vk.me\/v628026833\/d07c\/IyEj5LRMlwA.jpg","timeline_thumbs_per_row":10,"timeline_thumbs_per_image":100,"timeline_thumbs_total":385,"timeline_thumb_width":100.000000,"timeline_thumb_height":75,"ip_subm":1,"video_ext":1,"is_yandex":0,"is_vk":0,"is_ext":1,"lang_add":"Добавить к себе","lang_added":"Добавлено к себе","lang_share":"Рассказать друзьям","lang_like":"Мне нравится","lang_subscribe":"Подписаться","lang_subscribed":"Вы подписаны","lang_volume_on":"Включить звук","lang_volume_off":"Убрать звук","lang_volume":"Громкость","lang_hdsd":"Сменить качество","lang_open_popup":"Развернуть","lang_fullscreen":"На весь экран","lang_window":"Свернуть","lang_rotate":"Повернуть","lang_ads_link":"Сайт рекламодателя","lang_ads":"Реклама","lang_ads_skip":"Пропустить рекламу","lang_next":"Следующее видео","lang_next_cancel":"Отменить","lang_replay":"Воспроизвести ещё раз","lang_ads_skip_time":"Пропустить рекламу через {time}","lang_report_problem":"Сообщить о проблеме...","video_play_hd":"Смотреть в высоком качестве","video_stop_loading":"Прервать загрузку","video_player_version":"ВКонтакте видео плеер ","goto_orig_video":"Перейти к видеозаписи","video_get_video_code":"Копировать код видео","video_load_error":"Видеофайл ещё не загрузился или сервер с видеофайлом временно недоступен","video_get_current_url":"Копировать ссылку на кадр"}
На данный момент функция вроди бы с одной стороны работает, а на некоторых ссылка не работает, и вместо $value выдает вообще какие-то левые значения.

Кто хорошо знает регулярки - помогите поправить код чтобы работал он нормально.
 
на сколько я помню, там HTML еще есть?

Или нет, тогда json_decode быстрее
PHP:
$json = json_decode(substr($str, 11), true);

UPD: Там есть HTML: Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
  • Автор темы
  • Модер.
  • #3
на сколько я помню, там HTML еще есть?

Или нет, тогда json_decode быстрее
PHP:
$json = json_decode(substr($str, 11), true);
Это вместо
Код:
$json = json_decode(mb_convert_encoding($matches[0], "UTF-8", "CP1251"), true);
или после? А регулярка правильно записана?

Вообще там есть HTML, исходник страницы с массивом Для просмотра ссылки Войди или Зарегистрируйся
 
PHP:
preg_match("#(.*)var vars \=(.*?)(var|window|\<\/script|\;)(.*)#su", $str, $matches);
$matches = mb_convert_encoding($matches[2], "UTF-8", "CP1251");
$json = json_decode(trim($matches, true);

У меня работает, проверил тут: Для просмотра ссылки Войди или Зарегистрируйся
На этом видео: Для просмотра ссылки Войди или Зарегистрируйся
 
  • Автор темы
  • Модер.
  • #5
PHP:
preg_match("#(.*)var vars \=(.*?)(var|window|\<\/script|\;)(.*)#su", $str, $matches);
$matches = mb_convert_encoding($matches[2], "UTF-8", "CP1251");
$json = json_decode(trim($matches, true);

У меня работает, проверил тут: Для просмотра ссылки Войди или Зарегистрируйся
На этом видео: Для просмотра ссылки Войди или Зарегистрируйся
А как там проверить работу? Как этот кусок кода добавить в функцию выше? Пробовал просто как заменить preg_match но выдает ошибку при загрузке страницы
 
В $pattern:
Код:
(.*)var vars \=(.*?)(var|window|\<\/script|\;)(.*)#su

В $subject текст, в котором искать (исходный код страницы видео)

Там проверка одной функции, я проверял preg_match.
 
  • Автор темы
  • Модер.
  • #7
В общем так же перед качеством например *.240,mp4 берет какое то левое значение на некоторых видео, например отсюда Для просмотра ссылки Войди или Зарегистрируйся

с этой регуляркой функция немного не так работает, и для названия (не расширения файла, а для названия ссылки на странице вывода) цепляет не mp4 а FLV и постоянно вместо разного выбора качества идет FLV
 
Последнее редактирование:
В общем так же перед качеством например *.240,mp4 берет какое то левое значение на некоторых видео, например отсюда Для просмотра ссылки Войди или Зарегистрируйся

с этой регуляркой функция немного не так работает, и для названия (не расширения файла, а для названия ссылки на странице вывода) цепляет не mp4 а FLV и постоянно вместо разного выбора качества идет FLV
На этой странице 1 json массив, если его регулярка получает - то всё хорошо.
А дальше дело уже не в регулярке.
 
  • Автор темы
  • Модер.
  • #9
А дальше дело уже не в регулярке.
а чём тогда? Тот код что в первом посте писал получал точно теже данные, и сравнивая ссылку с Savefrom.net на странице где ссылка не работает - имя файла левое, на старые загруженные видео ссылка работает и имя файла совпадает c Savefrom... В чем тогда может быть косяк? :facepalm:

Именно выделенная часть не всегда верно выходит: 459edf7acf.240.mp4
 
Код:
{
"uid":"317204999",
"vid":171444669,
"oid":317204999,
"host":"https:\/\/cs542307.vk.me\/",
"vtag":"06dbabab79",
"ltag":"l_65354b3e",
"vkid":171444669,
"md_title":"1%2F5175",
"md_author":"%D0%93%D0%BB%D0%B5%D0%B1+%D0%A1%D1%82%D1%80%D0%BE%D0%B3%D0%B0%D0%BD%D0%BE%D0%B2",
"author_id":317204999,
"author_href":"\/b9039010326",
"hd":3,
"no_flv":1,
"hd_def":0,
"dbg_on":0,
"t":0,
"duration":5215,
"thumb":"https:\/\/pp.vk.me\/c621616\/v621616999\/3631e\/bAtdot9CHgM.jpg",
"hash":"77f8f042fd393b5b766aa8a6a3dbdae6",
"hash2":"de8b10f2b0efeca4",
"angle":0.000000,
"img_angle":0.000000,
"repeat":0,
"show_ads_preroll":0,
"show_ads_postroll":0,
"show_ads_overlay":0,
"legal_owner":0,
"eid1":0,
"slot":0,
"g":1,
"a":16,
"puid34":0,
"water_mark":"",
"can_rotate":1,
"c3":"",
"no_adfox":1,
"ads_preview":0,
"puid4":0,
"puid41":1,
"url240":"https:\/\/cs542307.vk.me\/7\/u317204999\/videos\/06dbabab79.240.mp4?extra=8Y42QT52QM0gMHzrRFNzJFQlmL2Qrlj7IyzKM61N7efncBM8kzB18X03shlRMBslpbUOixq0PZnoiQRYK7EGAGUQYNn3nxor",
"url360":"https:\/\/cs542307.vk.me\/7\/u317204999\/videos\/06dbabab79.360.mp4?extra=8Y42QT52QM0gMHzrRFNzJFQlmL2Qrlj7IyzKM61N7efncBM8kzB18X03shlRMBslpbUOixq0PZnoiQRYK7EGAGUQYNn3nxor",
"url480":"https:\/\/cs542307.vk.me\/7\/u317204999\/videos\/06dbabab79.480.mp4?extra=8Y42QT52QM0gMHzrRFNzJFQlmL2Qrlj7IyzKM61N7efncBM8kzB18X03shlRMBslpbUOixq0PZnoiQRYK7EGAGUQYNn3nxor",
"url720":"https:\/\/cs542307.vk.me\/7\/u317204999\/videos\/06dbabab79.720.mp4?extra=8Y42QT52QM0gMHzrRFNzJFQlmL2Qrlj7IyzKM61N7efncBM8kzB18X03shlRMBslpbUOixq0PZnoiQRYK7EGAGUQYNn3nxor",
"jpg":"https:\/\/pp.vk.me\/c621616\/v621616999\/3631d\/RCV16S5z0Yg.jpg",
"timeline_thumbs":1,
"timeline_thumbs_jpg":"https:\/\/pp.vk.me\/c624824\/v624824999\/4326c\/GfVLaAqKCoY.jpg,https:\/\/pp.vk.me\/c628123\/v628123999\/1023b\/orQghBnJNgA.jpg,https:\/\/pp.vk.me\/c625525\/v625525999\/3cc68\/1vNGuo-Sc-8.jpg,https:\/\/pp.vk.me\/c628319\/v628319999\/1124c\/8YQMMZU5jRI.jpg,https:\/\/pp.vk.me\/c622221\/v622221999\/3d605\/Uq04nIk9Csg.jpg,https:\/\/pp.vk.me\/c625220\/v625220999\/33b50\/lUQWhwfK4DE.jpg",
"timeline_thumbs_per_row":10,
"timeline_thumbs_per_image":100,
"timeline_thumbs_total":521,
"timeline_thumb_width":100.000000,
"timeline_thumb_height":75,
"ip_subm":1,
"proxy":"psv4",
"https":1,
"video_ext":1,
"is_yandex":0,
"is_vk":0,
"is_ext":1,
"lang_add":"Добавить к себе",
"lang_added":"Добавлено к себе",
"lang_share":"Рассказать друзьям",
"lang_like":"Мне нравится",
"lang_subscribe":"Подписаться",
"lang_subscribed":"Вы подписаны",
"lang_volume_on":"Включить звук",
"lang_volume_off":"Убрать звук",
"lang_volume":"Громкость",
"lang_hdsd":"Сменить качество",
"lang_open_popup":"Развернуть",
"lang_fullscreen":"На весь экран",
"lang_window":"Свернуть",
"lang_rotate":"Повернуть",
"lang_ads_link":"Сайт рекламодателя",
"lang_ads":"Реклама",
"lang_ads_skip":"Пропустить рекламу",
"lang_next":"Следующее видео",
"lang_next_cancel":"Отменить",
"lang_replay":"Воспроизвести ещё раз",
"lang_ads_skip_time":"Пропустить рекламу через {time}",
"lang_report_problem":"Сообщить о проблеме...",
"video_play_hd":"Смотреть в высоком качестве",
"video_stop_loading":"Прервать загрузку",
"video_player_version":"ВКонтакте видео плеер ",
"goto_orig_video":"Перейти к видеозаписи",
"video_get_video_code":"Копировать код видео",
"video_load_error":"Видеофайл ещё не загрузился или сервер с видеофайлом временно недоступен",
"video_get_current_url":"Копировать ссылку на кадр"
}

Тут выбора нет, есть выбор из разрешения видео и всё.

Наверно, savefrom из другого места берет ссылки

Или ВК браузер возможно фильтрует. Старый браузер - FLV. Новый - mp4
 
Назад
Сверху