http2cli 15.10.17
$$$
До Н.Г.
ВЕРСИЯ ДЛЯ СЛАБОВИДЯЩИХ

http2cli 15.10.17

Опубликовано: 17-10-2015 23:38 Автор: MBTY Теги: HTML, Мои разработки
Обновление!
Добавлено несколько вариантов переформатирования текста.
В ходе решения очередной задачи потребовался инструмент, который выводил бы в консоль html-код страницы по URL.
Задача была следующей: создать скрипт, который бы находил в сети самый свежий релиз Media Player Classic Home Cinema.
Самые свежие "nightly" билды лежат тут: https://nightly.mpc-hc.org, нужно скачать MPC-HC.*.*.*.*.x86.exe (на момент написания статьи MPC-HC.1.7.9.181.x86.exe)
Так как wget не умеет нормально качать файлы со страницы по маске (через адовые костыли), то нужно предварительно прочесть html-код, чтобы "выловить" ссылку на наш файл
Недавно я выкладывал 2 консольных костыля, одним из которых был OPI - узкоспециализированный парсер страниц. Теперь он получил дополнительный функционал, несколько настроек, стал более универсальным, а так как от исходного кода OPI осталась только пара строк, то название тоже сменилось: http2cli
Как он работает:
Вводим в консоли http2cli https://nightly.mpc-hc.org|find "x86.exe" и получаем...такую дичь:
CMD: dzzb.ru <!--[if gt IE 9]><!--><html class="no-js browser" lang="en"><!--<![endif]--><head><meta charset="utf-8"><title>MPC-HC Nightly Builds</title><meta name="description" content="MPC-HC Nightly Builds"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="shortcut icon" href="/_h5ai/client/images/favicon/favicon-16-32.ico"><link rel="apple-touch-icon-precomposed" type="image/png" href="/_h5ai/client/images/favicon/favicon-152.png"><link rel="stylesheet" href="/_h5ai/client/css/styles.css"><script src="/_h5ai/client/js/scripts.js" data-module="main"></script></head><body><div id="fallback-hints"><span class="noJsMsg">Works best with JavaScript enabled!</span><span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span><span class="backlink"><a href="http://larsjung.de/h5ai/" target="_blank" title="h5ai 0.27.0 В· a modern HTTP web server index">powered by h5ai</a></span></div><div id="fallback"><table><tr><th class='fb-i'></th><th class='fb-n'><span>Name</span></th><th class='fb-d'><span>Last modified</span></th><th class='fb-s'><span>Size</span></th></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/folder.png' alt='folder'/></td><td class='fb-n'><a href='/mpc-hc_apps/'>mpc-hc_apps</a></td><td class='fb-d'>2011-05-07 12:12</td><td class='fb-s'></td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/folder.png' alt='folder'/></td><td class='fb-n'><a href='/old/'>old</a></td><td class='fb-d'>2015-10-04 22:14</td><td class='fb-s'></td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/Info.md'>Info.md</a></td><td class='fb-d'>2015-04-09 23:18</td><td class='fb-s'>0 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/log.1.7.9.181.log'>log.1.7.9.181.log</a></td><td class='fb-d'>2015-10-04 22:31</td><td class='fb-s'>293 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC.1.7.9.181.x64.7z'>MPC-HC.1.7.9.181.x64.7z</a></td><td class='fb-d'>2015-10-04 22:16</td><td class='fb-s'>12453 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC.1.7.9.181.x64.exe'>MPC-HC.1.7.9.181.x64.exe</a></td><td class='fb-d'>2015-10-04 22:19</td><td class='fb-s'>13401 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC.1.7.9.181.x64.pdb.7z'>MPC-HC.1.7.9.181.x64.pdb.7z</a></td><td class='fb-d'>2015-10-04 22:22</td><td class='fb-s'>17732 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC.1.7.9.181.x86.7z'>MPC-HC.1.7.9.181.x86.7z</a></td><td class='fb-d'>2015-10-04 22:25</td><td class='fb-s'>11584 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC.1.7.9.181.x86.exe'>MPC-HC.1.7.9.181.x86.exe</a></td><td class='fb-d'>2015-10-04 22:27</td><td class='fb-s'>12530 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC.1.7.9.181.x86.pdb.7z'>MPC-HC.1.7.9.181.x86.pdb.7z</a></td><td class='fb-d'>2015-10-04 22:30</td><td class='fb-s'>17006 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC_standalone_filters.1.7.9.181.x64.7z'>MPC-HC_standalone_filters.1.7.9.181.x64.7z</a></td><td class='fb-d'>2015-10-04 22:23</td><td class='fb-s'>1616 KB</td></tr><tr><td class='fb-i'><img src='/_h5ai/client/images/fallback/file.png' alt='file'/></td><td class='fb-n'><a href='/MPC-HC_standalone_filters.1.7.9.181.x86.7z'>MPC-HC_standalone_filters.1.7.9.181.x86.7z</a></td><td class='fb-d'>2015-10-04 22:31</td><td class='fb-s'>1454 KB</td></tr></table></div></body></html>
Дело в том, что именно на этом сайте исходный код страницы записан в одну строку (для экономии нескольких байт). А find находит строку, в которой было совпадение. Получается, что весь наш сайт будет отображен, потому что во всём нём есть совпадение. Хорошо бы, если между html тегами был разрыв строки.
Это есть первая, помимо основной, функция нашего приложения. Если ввести http2cli https://nightly.mpc-hc.org 1, то между html-тегами будет создаваться разрыв. Если ввести 0 или ничего не вводить, то код никак не будет переоформляться: был изначально код с разрывами - получим их и так, не было - не получим.
Теперь страница будет выглядеть не одной строкой, а вот так:
cmd: dzzb.ru <!DOCTYPE html> <!--[if lt IE 10]> <html class="no-js no-browser" lang="en"> <![endif]--> <!--[if gt IE 9]> <!--> <html class="no-js browser" lang="en"> <!--<![endif]--> <head> <meta charset="utf-8"> <title>MPC-HC Nightly Builds</title> <meta name="description" content="MPC-HC Nightly Builds"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="shortcut icon" href="/_h5ai/client/images/favicon/favicon-16-32.ico"> <link rel="apple-touch-icon-precomposed" type="image/png" href="/_h5ai/client/images/favicon/favicon-152.png"> <link rel="stylesheet" href="/_h5ai/client/css/styles.css"> <script src="/_h5ai/client/js/scripts.js" data-module="main"> </script> </head> <body> <div id="fallback-hints"> <span class="noJsMsg">Works best with JavaScript enabled!</span> <span class="noBrowserMsg">Works best in <a href="http://browsehappy.com">modern browsers</a>!</span> <span class="backlink"> <a href="http://larsjung.de/h5ai/" target="_blank" title="h5ai 0.27.0 В· a modern HTTP web server index">powered by h5ai</a> </span> </div> <div id="fallback"> <table> <tr> <th class='fb-i'> </th> <th class='fb-n'> <span>Name</span> </th> <th class='fb-d'> <span>Last modified</span> </th> <th class='fb-s'> <span>Size</span> </th> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/folder.png' alt='folder'/> </td> <td class='fb-n'> <a href='/mpc-hc_apps/'>mpc-hc_apps</a> </td> <td class='fb-d'>2011-05-07 12:12</td> <td class='fb-s'> </td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/folder.png' alt='folder'/> </td> <td class='fb-n'> <a href='/old/'>old</a> </td> <td class='fb-d'>2015-10-04 22:14</td> <td class='fb-s'> </td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/Info.md'>Info.md</a> </td> <td class='fb-d'>2015-04-09 23:18</td> <td class='fb-s'>0 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/log.1.7.9.181.log'>log.1.7.9.181.log</a> </td> <td class='fb-d'>2015-10-04 22:31</td> <td class='fb-s'>293 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC.1.7.9.181.x64.7z'>MPC-HC.1.7.9.181.x64.7z</a> </td> <td class='fb-d'>2015-10-04 22:16</td> <td class='fb-s'>12453 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC.1.7.9.181.x64.exe'>MPC-HC.1.7.9.181.x64.exe</a> </td> <td class='fb-d'>2015-10-04 22:19</td> <td class='fb-s'>13401 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC.1.7.9.181.x64.pdb.7z'>MPC-HC.1.7.9.181.x64.pdb.7z</a> </td> <td class='fb-d'>2015-10-04 22:22</td> <td class='fb-s'>17732 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC.1.7.9.181.x86.7z'>MPC-HC.1.7.9.181.x86.7z</a> </td> <td class='fb-d'>2015-10-04 22:25</td> <td class='fb-s'>11584 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC.1.7.9.181.x86.exe'>MPC-HC.1.7.9.181.x86.exe</a> </td> <td class='fb-d'>2015-10-04 22:27</td> <td class='fb-s'>12530 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC.1.7.9.181.x86.pdb.7z'>MPC-HC.1.7.9.181.x86.pdb.7z</a> </td> <td class='fb-d'>2015-10-04 22:30</td> <td class='fb-s'>17006 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC_standalone_filters.1.7.9.181.x64.7z'>MPC-HC_standalone_filters.1.7.9.181.x64.7z</a> </td> <td class='fb-d'>2015-10-04 22:23</td> <td class='fb-s'>1616 KB</td> </tr> <tr> <td class='fb-i'> <img src='/_h5ai/client/images/fallback/file.png' alt='file'/> </td> <td class='fb-n'> <a href='/MPC-HC_standalone_filters.1.7.9.181.x86.7z'>MPC-HC_standalone_filters.1.7.9.181.x86.7z</a> </td> <td class='fb-d'>2015-10-04 22:31</td> <td class='fb-s'>1454 KB</td> </tr> </table> </div> </body> </html>
Вводим http2cli https://nightly.mpc-hc.org 1|find "x86.exe" и получаем: CMD: dzzb.ru <a href='/MPC-HC.1.7.9.181.x86.exe'>MPC-HC.1.7.9.181.x86.exe</a> Для x64 версии всё по той же схеме: вводим http2cli https://nightly.mpc-hc.org 1|find "x64.exe" и получаем:CMD: dzzb.ru <a href='/MPC-HC.1.7.9.181.x64.exe'>MPC-HC.1.7.9.181.x64.exe</a> Дальше уже обрезать лишнее и оставить только "/MPC-HC.1.7.9.181.x86.exe" - дело техники:
for /F "tokens=2 delims='" %%i in ('http2cli https://nightly.mpc-hc.org 1^|find "x86.exe"') do wget --no-check-certificate "https://nightly.mpc-hc.org%%i"
и у нас в руках самый свежий билд плеера.
Увы, но find не умеет искать то, что находится в двойных кавычках: Если ссылка лежит не в 'https://nightly.mpc-hc.org/MPC-HC.1.7.9.181.x86.exe', а "https://nightly.mpc-hc.org/MPC-HC.1.7.9.181.x86.exe", то простой правкой скрипта на for /F "tokens=2 delims="" %%i in ... не отделаешься. Нужны опять же костыли. В сети куча тематик и на русских и на английских ресурсах как обойти то, что команда for не работает с этим " разделителем.
Чтобы не нагромождались скрипты, http2cli заимел еще два параметра:
http2cli http://www.ya.ru 2 приведет к замене " на +++, но не будет в вмешиваться в разрывы строк.
http2cli http://www.ya.ru 3 приведет к замене " на +++ и создаст разрывы строк между html-тегами.
Кавычка заменена, скрипт for /F "tokens=2 delims=+++" %%i in ... - работает прекрасно.
Если сильно захотеть, то можно сделать, что-то вроде монитора изменения страницы без необходимости в запущенном браузере.
Примерно такой код будет мониторить любую страницу и сообщать, если на ней найдены изменения
@echo off
cls
for %%I in (old.html) do set OldFileSize=%%~zI
http2cli.exe "http://google.ru" > new.html
for %%I in (new.html) do set NewFileSize=%%~zI
if "%OldFileSize%"=="%NewFileSize%" goto bad

:good
echo Есть обновления!!
move /y new.html old.html >nul
goto end

:bad
echo Ничего нового...

:end
pause
Если на странице код всегда меняется, как у меня из-за счетчика до Нового Года, то http2cli всегда будет находить "обновления", это нужно учесть :)
Так же пришлось оборудовать этот костыль функцией перевода полученного текста из одной кодировки в другую.
Командная строка у нас по умолчанию в кодировке 866, а потому русский текст на современных страницах (чаще UTF8) будет отображаться так
F4 ╨╜╨░ TXT ╤Д╨░╨╣╨╗╨╡ - ╨╛╨╜ ╨╛╤В╨║╤А╨╛╨╡╤В╤Б╤П ╨▒╨╗╨╛╨║╨╜╨╛╤В╨╛╨╝, F4 ╨╜╨░ *.RTF - ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В╤Б╤П ╨▓╨╕╨╜╨┤╨╛╨▓╤Л╨╝ ╨▓╨╛╤А╨┤╨┐╨░╨┤╨╛╨╝, F4 ╨╜╨░ JPG ╨║╨░╤А╤В╨╕╨╜╨║╨╡ - ╨╛╤В╨║╤А╨╛╨╡╤В╤Б╤П ╨┐╨╡╨╕╨╜╤В╨╛╨╝.
╨Т╤Б╨╡ ╨╜╨░╤Б╤В╤А╨╛╨╣╨║╨╕ ╨▓╨╡╨┤╤Г╤В╤Б╤П ╤З╨╡╤А╨╡╨╖ ini. ╨г╨┤╨╛╨▒╨╜╨╛, ╨║╨╗╨░╤Б╤Б╨╜╨╛, ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╤Б╤П ╨│╨╛╨┤╨░╨╝╨╕. ╨в╤Г╤В ╨▓╨╜╨╡╨╖╨░╨┐╨╜╨╛ ╨┐╨╛╨╜╨░╨┤╨╛╨▒╨╕╨╗╨╛╤Б╤М, ╤З╤В╨╛╨▒╤Л ╤Д╨░
Кодовую страницу нужно указывать общепринятым номером (1251 - Windows Cyrillic, 866 - Dos Cyrillic, 65001 - UTF8 и т.д..), либо не указывать вообще, если перекодировка не требуется.
Команда:
http2cli.exe http://www.dzzb.ru 0 65001 866
выведет в консоль читаемый русский текст.
Наконец выкладываю сообщение, которое выдаст http2cli, если был произведен ее запуск без каких-либо параметров :
CMD: dzzb.ru http2cli 15.10.17 Сайт: http://www.dzzb.ru Автор: MBTY Приложение выводит содержимое URL в консоль. Пример использования: http2cli.exe http://www.google.ru Поддерживается переформатирование html кода из одной строки в развернутый вариант. Пример использования: Превращение однострочного кода в разбитый, путем вставки разрыва между html-тегами и заменой " на +++: http2cli.exe http://www.google.ru 3 Превращение замена " на +++ без создания разрывов строк между html-тегами: http2cli.exe http://www.google.ru 2 Превращение однострочного кода в разбитый, путем вставки разрыва между html-тегами: http2cli.exe http://www.google.ru 1 Сохранение исходно вида кода: http2cli.exe http://www.google.ru 0 Имеется поддержка перекодирования содержимого на лету. Пример использования: http2cli.exe http://www.google.ru [0/1] [исходная кодировка] [конечная кодировка] Кодовая страница указывается номером. 1251 - Windows Cyrillic 866 - Dos Cyrillic 65001 - UTF8 и т.д. Пример использования перекодировки страницы из UTF8 в DOS с сохранением форматирования: http2cli.exe http://www.google.ru 0 65001 866 Пример использования перекодировки страницы из UTF8 в DOS с разбиением кода на строки: http2cli.exe http://www.google.ru 1 65001 866

Скачать


◘▲▼▲◘◘▲▼▲◘◘▲▼▲◘