Устойчивость ссылок
Компания, ведёт дела ни ниве программизЬма, разрабатывает программы (продукты), их обновляет с различными временными периодами.
Каждая такая компания имеет сайт, на котором размещает ссылки для скачивания этих продуктов, или доверяет размещение таких ссылок своего рода огромным интеграторам.
например сайт
http://www.softpedia.com/
каждый день, час обновляется, некий продукт обновился - отдельная страница для этого продукта обновляется, на этой странице обновляется версия, формируется новая ссылка на новый продукт.
вот, на 22.02.18 я выловил на этом сайте интересную для меня программу:
Wise Anti Malware
http://www.softpedia.com/get/Securit...-Malware.shtml
скачаем эту страницу и поглядим, где расположена строка, показывающая версию:
Код:

var spjs_prog_version="1.2.6.68 Beta";
и эта ссылка навечно! навсегда! пока программисты, разрабатывающие сайт
Softpedia не изменят саму структуру сайта.
а оно им надо? думаю, нет.
пойду в рассуждениях дальше. тот же сайт
Softpedia.
каждая программа, рассмотренная на этом сайте, имеет устойчивую и неизменную страницу, на которой расположены устойчивые и неизменные ссылки на программы, версии и протчее ..
еще пример:
Telegram Desktop
http://www.softpedia.com/get/Interne...-Desktop.shtml
строка версии:
Код:

var spjs_prog_version="1.2.14";
эта устойчивость в большинстве случаев распространяется на всё!
можно логически понять, люди, разрабатывающие некий продукт, в меньшей степени заботятся об красоте своего сайта, на котором расположены ссылки для скачивания этого продукта.
конечно, есть вариант некоего ребрендинга, импульса перестройки сайта для красивости и удобства.
такая перестройка сайта ведет к потере размещения ссылок, которые мы выловили.
Парсинг
Парсинг - некий процесс, позволяющий из огромного потока ссылок, сайтов, HTML-страниц выловить интересующую нас информацию.
рассмотрим его поподробнее.
для моего обновлятора (файла
up.bat) парсинг - это двигатель процесса получения дистрибутивов.
после парсинга выделяются прямые ссылки на скачивания или получения версии. а скачать что-то по ссылкам - уже просто и шаблонно.
вернусь к сайту
Softpedia.
Telegram Desktop
страница донора (в терминах )
http://www.softpedia.com/get/Interne...-Desktop.shtml
поисковое выражение:
Код:

var spjs_prog_version=
сам парсинг выглядит так:
начинаю читать (скачивать страницу донора), используя поисковое выражение. чтение идет в файл (он мусорный, по окончании работы обновлятора удалится)
этот файл тоже неизменный:
down.txt
вот команда парсинга:
Код:

("%~dp0..\Scripts\wget.exe" -q -O- "http://www.softpedia.com/get/Internet/Chat/Instant-Messaging/Telegram-Desktop.shtml" | findstr /R /C:"var spjs_prog_version=") >"%~dp0down.txt"
в файле
down.txt строка:
Код:

var spjs_prog_version="1.2.14";
и вообще парсинг в обновляторе сделан в виде блока. есть переменные донора, поисковых выражений.
работа блока парсинга заканчивается созданием переменных (с неизменными именами) в которых будут прямые ссылки на скачивания или строка версии.
файл down.txt содержит отпарсенные строки. в идеале хорошо иметь одну строку. но обычно таких строк много.
например парсим ссылки на дистрибутивы для х86 и х64 версий. ссылки разные, значит и строки будут разные.
конечно, можно сузить поиск и отпарсить отдельно ссылку на х86, включая в поисковые выражения упоминания об х86.
потом еще раз парсить ту же страницу уже с другими поисковыми выражениями.
для меня главный принцып - минимализация использования тернета!
парсинг - скачали страницу из тернета.
обработка результатов поиска, выделение ссылок - тернет не используется
далее проверка необходимости качать нужный файл (сравнение уже существующего у нас в ячейке дистрибутива с находящимся в тернете без непосредственного скачивания) - тернет нужен!
если есть необходимость качать файл - он качается! если есть возможность скачать этот файл ускорителем - он качается ускорителем! тоже использование тернета!
если уже есть прямые ссылки на дистрибутивы, пример Yandex:
https://download.cdn.yandex.net/brow.../ru/Yandex.exe
использование тернета такое:
- проверили необходимость скачивания
- если файл по ссылке (его размер) не равен нашему файлу в ячейке - его скачиваем!
остальные действия по определению версии и протчее - тернет не нужен!
еще пример.
WinRar
страницы, где имеются ссылки на х86 и х64 разные.
http://www.win-rar.com/postdownload.html?&L=4
http://www.win-rar.com/postdownload....&Version=64bit
тут интересно, если эти ссылки открыть в браузере, то он предложит скачать уже готовый дистрибутив (сработал внутренний парсер на офсайте)
но для нас эта такая же страница, на которой есть реальные ссылки на скачивание!
поисковая строка такая:
Код:

winrar-versions
после парсинга получим в файле down.txt такую строку:
Код:

<span><a href="https://www.win-rar.com/fileadmin/winrar-versions/winrar/wrar550ru.exe" class="postdownloadlink">нажмите здесь</a></span>
Обработка результатов парсинга
после парсинга имеем файл
down.txt в котором есть одна или несколько строк.
используем ранее рассмотренный принцЫп устойчивости ссылок.
WinRar
в выше приведенной строке интересующая нас ссылка располагается между первым появлением символа
" и заканчивается вторым появлением символа
"
(открою хитрость, разделитель
" очень опасен для поисковых выражений, он заменяется на
+++ путем использования при парсинге не простой утилиты
wget.exe, а более навороченной
http2cli.exe)
используем сл. команду:
Код:

FOR /F "usebackq tokens=2 delims=+++" %%a in ("%~dp0down.txt") do set "g1=%%a"
в переменной
%g1% будет прямая ссылка на дистрибутив:
https://www.win-rar.com/fileadmin/wi.../wrar550ru.exe
если выйдет новая версия архиватора, то по принцЫпу устойчивости ссылок при всех тех же поисковых выражений и команд у нас в итоге в переменной
%g1% будет прямая ссылка на дистрибутив!
пусть он будет другим, к примеру:
https://www.win-rar.com/fileadmin/wi.../wrar566ru.exe
но ссылка будет всегда!
вернусь к
Telegram Desktop
в файле
down.txt строка:
Код:

var spjs_prog_version="1.2.14";
ищем всё между первым появление символа
= и заканчиваем поиск появлением символа
; всё пишем в переменную версии
%f%
это:
"1.2.14"
далее отрезаем по одному символу вначале и конце.
команды такие:
Код:

FOR /F "usebackq tokens=2 delims==;" %%a in ("%~dp0down.txt") do set f=%%a
set f=%f:~1,-1%
в переменной
%f% будет такая строка:
1.2.14
на 22.03.14 это самая новая версия
Telegram Desktop
сразу покаюсь, я не гуру, который изрекает вечную истину

я так вижу, я так думаю, и я об этом и пою!
возможно, в моих рассуждениях, делах и теориях много ерунды (рениксы), много неправильных суждений, возможно я неправильно понимаю некие процессы и делаю из этого неправильные выводы.
хм, давай поговорим за это!
приводите примеры, думайте со мной, разбирайтесь лучше меня.
я специально ввел слова ТЕОРИЯ и концепция .. Теория Идеальной Сборки, концепция ячейки.
это не есть ИСТИНА, это есть вИдение некой недостижимой ИСТИНЫ мною.