Войти

Показать полную графическую версию : [решено] Получение обновляемую ссылку для последующей закачки


daradan
01-11-2018, 12:35
Всех приветствую.
Прошу не пинать, если кому-то покажется задача слишком легкой.
Хочу реализовать батник (именно батник, т.к. дальше имеется код в батнике для дальнейшей работы) для скачивания последней версии прошивки (которая еженедельно обновляется) для своего телефона.
Код получился такойrem // скачиваю целую страницу, где находятся 2 разные ссылки повторяющие дважды и сохраняю именем HM5Plus
wget -O HM5Plus http://www.miui.com/download-340.html

rem // отсеиваю ненужные тексты и получаю заветную ссылку
type HM5Plus | findstr "miui_HM5Plus_8" | grep "download_btn" | awk -F"\"" "{ print $6}"В итоге получаю необходимую ссылкуhttp://bigota.d.miui.com/8.10.25/miui_HM5Plus_8.10.25_55b500ece7_7.1.zipно дальше не пойму как его записать в переменную, чтобы в дальнейшем подставить в wget
Бинарники (http://rgho.st/6p9CQKxpq) используемые (awk, grep, sed, wget)
Спасибо

Amunrah
01-11-2018, 15:00
Попробуйте через цикл... команда for может обрабатывать результат выполнения другой команды.

Iska
01-11-2018, 18:26
for не может. for /f может.

daradan
01-11-2018, 18:45
for не может. for /f может. »вот с for я не смог подружиться никак :(
можете помочь?!

Amunrah
01-11-2018, 19:13
for не может. for /f может. »
Разве команда for с ключом /f каким-то загадочным образом перестает быть командой for? )) конструкция for /f сама по себе тоже ничего не сделает, тогда следует, как минимум, и про кавычки уточнить...

Busla
01-11-2018, 22:53
daradan, а в чём сакральный смысл совместного использования grep и finfstr ?

curl http://www.miui.com/download-340.html | findstr /R download_btn.*miui_HM5Plus_8 | set /P line=
set url=%line:~105,-3%

YuS_2
02-11-2018, 07:51
в чём сакральный смысл совместного использования grep и finfstr ? »
Лучше спросить в чем сакральный смысл использования всего этого привнесенного "зоопарка":
Бинарники используемые (awk, grep, sed, wget) »
если есть встроенные средства:
powershell
$url = ((iwr http://www.miui.com/download-340.html).links|?{
$_.class -eq 'download_btn' -and $_.href -match 'miui_HM5Plus_8'
}).href
iwr $url -out $url.split('/')[-1]
## или даже фоновую закачку запустить start-bitstransfer, которая будет работать и после обрывов, перезагрузок и пр.:
# start-bitstransfer $url $url.split('/')[-1] -asynch -disp 'firmware'

daradan
02-11-2018, 08:55
а в чём сакральный смысл совместного использования grep и finfstr ? »в том, что методом тыка у меня так получилось :sorry:
Пробуюcurl -x http://proxy:port http://www.miui.com/download-340.html | findstr /R download_btn.*miui_HM5Plus_8 | set /P line=
set url=%line:~101,-6%
rem // у меня вышло для отсеивания 101 и 6
echo %url%получаюcurl -x http://proxy:port
http://www.miui.com/download-340.html | findstr /R download_btn.*miui_HM5Plus_8 | set /P line=
set url=~101,-6
echo ~101,-6
~101,-6

Busla
02-11-2018, 10:47
rem // у меня вышло для отсеивания 101 и 6»
ну-ну :)

получаю
set url=~101,-6 »
это потому что line не инициализирована, т.е. curl не отработал

daradan
02-11-2018, 11:07
это потому что line не инициализирована, т.е. curl не отработал »Вроде отрабатывает, для теста сохраняю выданное значение в текстовый файл 2.txt>curl -x http://proxy:port http://www.miui.com/download-340.html | findstr /R download_btn.*miui_HM5Plus_8 > 2.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 23296 0 23296 0 0 19877 0 --:--:-- 0:00:01 --:--:-- 19877

>type 2.txt
<a onclick="_gaq.push(['_trackEvent', '完整包', 'download','download']);" class="
download_btn" href="http://bigota.d.miui.com/8.10.25/miui_HM5Plus_8.10.25_55b500
ece7_7.1.zip"></a>
Получилось так:
curl -x http://proxy:port http://www.miui.com/download-340.html | findstr /R download_btn.*miui_HM5Plus_8 > 2.txt
Set /p line=<2.txt
set url=%line:~106,-6%
echo %url%либо такwget -e use_proxy=yes -e http_proxy=proxy:port -O HM5Plus http://www.miui.com/download-340.html | findstr /R download_btn.*miui_HM5Plus_8 HM5Plus | Set /p line=
set url=%line:~106,-6%Спасибо большое

sov44
17-03-2024, 15:16
Доброго времени суток!
Помогите получить средством командной строки и wget со странички загрузки меняющуюся ссылку на скачивание крайней версии PicPick. https://picpick.app/ru/download/

NickM
17-03-2024, 17:36
меняющуюся ссылку на скачивание крайней версии PicPick. »
Что-то типа такого:
((iwr https://picpick.app/ru/download/free/).links|?{$_.href -match 'picpick_inst.exe'}).href[1] | Write-Output

sov44
17-03-2024, 18:33
NickM, благодарю, работает на ps! Но мне-бы код на cmd, чтобы в дальнейшем использовать ссылку для скачивания и сборки sfx моим конструктором.

NickM
18-03-2024, 10:44
Но мне-бы код на cmd »
Ссылка находится в строке с количеством символов более 10 тыс., что накладывает ограничение на обработку интерпретатором командной строки.

Возможно, что следует воспользоваться "VBScript"?

Что-то типа такого (функцию можно доработать, где файл передавать в функцию, проверку на валидность URL и прочее), где ищем первое вхождение адреса загрузки и наименование файла, наименование директории версии будет заключаться между этими двумя вхождениями:
On Error Resume Next

Function UrlPath()
Dim file, line, pos1, pos2

With CreateObject("Scripting.FileSystemObject")
Set file = .OpenTextFile("index.html", 1)

Do While file.AtEndOfStream <> True
line = file.ReadLine
If InStr(line, "https://download.picpick.app/") > 0 Then
pos1 = InStr(line, "https://download.picpick.app/")
pos2 = InStr(line, "picpick_inst.exe")
Exit Do
End If
Loop

file.Close
End With
UrlPath = MiD(line, pos1, pos2 - pos1 + len("picpick_inst.exe"))
End Function

WScript.Echo UrlPath


*.cmd может выглядеть так:
@echo off
path_to_wget\wget.exe https://picpick.app/ru/download/free/ -O index.html
for /f %%i in ('cscript //nologo UrlPath.vbs') do set url=%%i
Echo.%url%

NickM
18-03-2024, 17:25
Можно попробовать одним сценарием обойтись (подсмотрел на форуме), но вызывать *.vbs всё же придётся:
@echo off
set "VbsFile=%localappdata%\temp\UrlPath.vbs"
set "HtmlFile=index.html"
more +9 "%~0">"%VbsFile%"
path_to_wget\wget.exe https://picpick.app/ru/download/free/ -O "%localappdata%\temp\%HtmlFile%" >nul 2>&1
for /f %%i in ('cscript //nologo %VbsFile% %HtmlFile%') do set url=%%i
Echo.%url%
exit /b 0

On Error Resume Next

Function UrlPath(HtmlPath)
Dim file, line, pos1, pos2

With CreateObject("Scripting.FileSystemObject")
Set file = .OpenTextFile(HtmlPath, 1)

Do While file.AtEndOfStream <> True
line = file.ReadLine
If InStr(line, "https://download.picpick.app/") > 0 Then
pos1 = InStr(line, "https://download.picpick.app/")
pos2 = InStr(line, "picpick_inst.exe")
Exit Do
End If
Loop

file.Close
End With
UrlPath = MiD(line, pos1, pos2 - pos1 + len("picpick_inst.exe"))
End Function

Set WshShell = CreateObject("Wscript.Shell")
TempPath = WshShell.ExpandEnvironmentStrings("%localappdata%\Temp")
WScript.Echo UrlPath(TempPath + "\index.html")




© OSzone.net 2001-2012