Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получение обновляемую ссылку для последующей закачки (http://forum.oszone.net/showthread.php?t=337509)

daradan 01-11-2018 12:35 2838871

Получение обновляемую ссылку для последующей закачки
 
Всех приветствую.
Прошу не пинать, если кому-то покажется задача слишком легкой.
Хочу реализовать батник (именно батник, т.к. дальше имеется код в батнике для дальнейшей работы) для скачивания последней версии прошивки (которая еженедельно обновляется) для своего телефона.
Код получился такой
Код:

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)
Спасибо

Amunrah 01-11-2018 15:00 2838910

Попробуйте через цикл... команда for может обрабатывать результат выполнения другой команды.

Iska 01-11-2018 18:26 2838956

for не может. for /f может.

daradan 01-11-2018 18:45 2838962

Цитата:

Цитата Iska
for не может. for /f может. »

вот с for я не смог подружиться никак :(
можете помочь?!

Amunrah 01-11-2018 19:13 2838975

Цитата:

Цитата Iska
for не может. for /f может. »

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

Busla 01-11-2018 22:53 2839023

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 2839049

Цитата:

Цитата 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'


daradan 02-11-2018 08:55 2839052

Цитата:

Цитата 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


Busla 02-11-2018 10:47 2839071

Цитата:

Цитата daradan
rem // у меня вышло для отсеивания 101 и 6»

ну-ну :)

Цитата:

Цитата daradan
получаю
set url=~101,-6 »

это потому что line не инициализирована, т.е. curl не отработал

daradan 02-11-2018 11:07 2839073

Вложений: 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%

Спасибо большое

sov44 17-03-2024 15:16 3025491

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

NickM 17-03-2024 17:36 3025494

Цитата:

Цитата sov44
меняющуюся ссылку на скачивание крайней версии PicPick. »

Что-то типа такого:
Код:

((iwr https://picpick.app/ru/download/free/).links|?{$_.href -match 'picpick_inst.exe'}).href[1] | Write-Output

sov44 17-03-2024 18:33 3025497

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

NickM 18-03-2024 10:44 3025516

Цитата:

Цитата sov44
Но мне-бы код на 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 3025533

Можно попробовать одним сценарием обойтись (подсмотрел на форуме), но вызывать *.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")



Время: 12:37.

Время: 12:37.
© OSzone.net 2001-