Получение обновляемую ссылку для последующей закачки
Всех приветствую.
Прошу не пинать, если кому-то покажется задача слишком легкой.
Хочу реализовать батник (именно батник, т.к. дальше имеется код в батнике для дальнейшей работы) для скачивания последней версии прошивки (которая еженедельно обновляется) для своего телефона.
Код получился такой
Код:
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
Бинарники используемые (awk, grep, sed, wget)
Спасибо
|
Попробуйте через цикл... команда for может обрабатывать результат выполнения другой команды.
|
for не может. for /f может.
|
Цитата:
Цитата Iska
for не может. for /f может. »
|
вот с for я не смог подружиться никак :(
можете помочь?!
|
Цитата:
Цитата Iska
for не может. for /f может. »
|
Разве команда for с ключом /f каким-то загадочным образом перестает быть командой for? )) конструкция for /f сама по себе тоже ничего не сделает, тогда следует, как минимум, и про кавычки уточнить...
|
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%
|
Цитата:
Цитата Busla
в чём сакральный смысл совместного использования grep и finfstr ? »
|
Лучше спросить в чем сакральный смысл использования всего этого привнесенного "зоопарка":
Цитата:
Цитата daradan
Бинарники используемые (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'
|
Цитата:
Цитата Busla
а в чём сакральный смысл совместного использования 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
|
Цитата:
Цитата daradan
rem // у меня вышло для отсеивания 101 и 6 »
|
ну-ну :)
Цитата:
Цитата daradan
получаю
set url=~101,-6 »
|
это потому что line не инициализирована, т.е. curl не отработал
|
Вложений: 1
Цитата:
Цитата Busla
это потому что 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%
Спасибо большое
|
Доброго времени суток!
Помогите получить средством командной строки и wget со странички загрузки меняющуюся ссылку на скачивание крайней версии PicPick. https://picpick.app/ru/download/
|
Цитата:
Цитата sov44
меняющуюся ссылку на скачивание крайней версии PicPick. »
|
Что-то типа такого:
Код:
((iwr https://picpick.app/ru/download/free/).links|?{$_.href -match 'picpick_inst.exe'}).href[1] | Write-Output
|
NickM, благодарю, работает на ps! Но мне-бы код на cmd, чтобы в дальнейшем использовать ссылку для скачивания и сборки sfx моим конструктором.
|
Ссылка находится в строке с количеством символов более 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%
|
Можно попробовать одним сценарием обойтись (подсмотрел на форуме), но вызывать *.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")
|
Время: 17:31.
© OSzone.net 2001-