Найти тему
Виктор Шугаров

VBScript: Работа с сайтом VK.com [Часть 04. Анализ сохранённого файла, вырезаем нужные кусочки].

"Разрежьте мою жену на две по 20 лет" - попросил клоун у фокусника на представлении.

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

Но сразу надо вспомнить разницу между строкой файла и строковой переменной, иначе запутаемся при обработке потока информации. Строка в файле (текстовом, конечно) обычно заканчивается переводом строки, но если сказать точнее, то завершается либо шестнадцатиричным кодом "0A" или двумя кодами "0A 0D". А вот уже строковой переменной всё равно какие символы с их шеснадцатиричными представлениями присутствуют. Грубо говоря, может быть несколько строк в переменной, есть просто какое-то количество данных.

В нашем текстовом файле, если посмотреть внимательно, в качестве разделителя строк используется "0A". Но давайте на всякий случай примем, что могут быть оба символа. Напомню, что их можно в VBScript записать в том числе как Chr(10)=="0a" и Chr(13)=="0d".

Пока пишется скрипт мы нам нужен код (кусочек скрипта) по сохранению в файл скаченной страницы, но его можно убрать в конечном варианте, так как страничка будет хранится в переменной g=.ResonseText
И да, мы немного меняем код программы, эту строку добавим после строки .Send
  • g = Replace(g,Chr(13),"") 'убираем все упоминания возврата каретки
  • g = Split(g,Chr(10)) 'в массив по переводу строки
  • g = Filter(g,"hls")
  • g = Join(g,w)

Для упрощения дальнейшего анализа вырезанного текста, сохраним его в файл и новые строки кода будем добавлять перед этой строкой:

  • CreateObject("Scripting.FileSystemObject").CreateTextFile(u&".txt",True).Write(g).Close
Этот файл нужен будет только при создании скрипта, в конечной версии просто уберём эту строку. У меня получилась четверть от начального размера - это всё равно многовато наверное.
Можно уже убрать модуль с сохранением в файл всей страницы, если нам что-то не надо, вот такая получилась строгая "цензура". :-)
Хотя можно просто пока в начале строк поставить символ ' и если вдруг что-то понадобиться в первоначальном коде страницы, просто вернём как было.

Вот далее что делать - это как кто захочет, возможно есть способы проще, но мы не будем искать лёгких путей. Есть такой термин "JSON", а это подскажет что можно или надо сделать.

Мы же просто создадим массив, а в качестве разделителя элементов в текстовой переменной пусть будет последовательность запятая-двойная_кавычка.

  • g = Split(g,","&h)
  • g = Join(g,w) 'для записи в файл надо массив "слить" в текст

Открываем файл "video-146954363_456239568.txt", смотрим, читаем, анализируем...

Обращаем внимание на строку --> jpg":"https:\/\/sun9-43.userapi.com\/c856520\/v856520584\/370bd\/7Ar0C7FYZ18.jpg"

Обращаем внимание на строку --> md_title":"Коллекция Джунджи Ито \/ Ito Junji Collection [12 из 12]"

Обращаем внимание на строку --> mvData":{"title":"Коллекция Джунджи Ито \/ Ito Junji Collection [12 из 12]"

Обращаем внимание на строку --> desc":"Донат: https:\/\/www.donationalerts.com\/r\/animestreams<br>(Лучший подарок админу и его друзьям)"

Обращаем внимание на строку --> hls_raw":"+EXTM3U\n+EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2224128,RESOLUTION=1280x720\nhttps:\/\/pvv4.vkuservideo.net.........

Текст может немного отличаться внутри, но нас интересует начало строк, становится понятно, что в текст массив после разрезания мы поместили без кавычки в начале, отрезали-то запятая+кавычка, значит надо вернуть символ. Вносим корректировку, вот как эти строки должны выглядеть:

g = Split(g,","&h)

  • g = Join(g,w&h) 'для записи в файл надо массив "слить" в текст, в h символ кавычки

Мы теперь уже готовы перейти к новому этапу - можно убрать "мусор" и оставить только некоторые строки, на которые обратили внимание ранее.

Опять же скажу, что наверное есть лучший способ по такой "обработке" файла, сделаем как получается.

Давайте пока остановимся и посмотрим какой получился скрипт:

  • 'https://zen.yandex.ru/id/5e6e13e66be9d72182b9ebf5
  • On Error Resume Next
  • w = vbCrLf
  • h = Chr(34)
  • t = "Host"
  • d = "vk.com"
  • h1 = "User-Agent"
  • h2 = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0"
  • url = "https://vk.com/video-146954363_456239568?list=e28287d47241c04b6b"
  • url = Split(InputBox("Введите адрес видео","Enter URL",url),"?")(0)
  • u = Split(url,"/")(3)
  • With CreateObject("Msxml2.XMLHttp.6.0")
  • .Open "GET", url&"?", False
  • .SetRequestHeader t, d
  • .SetRequestHeader h1, h2
  • .Send
  • .Open "GET", url&"?", False
  • .SetRequestHeader t, d
  • .SetRequestHeader h1, h2
  • .Send
  • g = .ResponseText
  • End With
  • g = Replace(g,Chr(13),"")
  • g = Split(g,Chr(10))
  • g = Filter(g,"hls")
  • g = Join(g,w)
  • g = Split(g,","&h)
  • g = Join(g,w&h)
  • CreateObject("Scripting.FileSystemObject").CreateTextFile(u&".txt",True).Write(g).Close
  • MsgBox ": The End. :":Wscript.Quit