1 (изменено: bordland, 2014-02-06 20:47:54)

Тема: WSH (JS, VBS): URLDecode и передача ссылки в менеджер загрузки

Пересмотрел множество онлайн скриптов URLdecode на Javascript и VBS, выбрал тот, который выдаёт нужную ссылку, без крякозябр и иероглифов во внешний менеджер загрузки (Reget Deluxe), но не хватает знаний заставить скрипт работать локально:

<?xml version="1.0" ?>

<package>
    <job>   
        <script type="text/javascript" script language="JavaScript">
        <![CDATA[
        URL="http://r4---sn-uxv-30oe.googlevideo.com/videoplayback?source=youtube&mv=m&sver=3&expire=1391714655&mt=1391688043&itag=18&id=40440785c85dc96d&upn=SPUeeN1UxFw&sparams=id%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&fexp=941262%2C901441%2C936910%2C936913&ratebypass=yes&ipbits=0&key=yt5&ip=78.63.218.138&ms=au&signature=4A809CF6A3764860596D90085A884617B31EFA1A.AF306D36B57A8260350F502F05D4C750FD14196C&title=%D1%8D%D1%82%D0%BE+%D0%BF%D1%80%D1%8F%D0%BC+%D0%BF%D0%BE+%D1%82%D0%B5%D0%BB%D0%B5%D0%BA%D1%83+%D1%83%D1%82%D1%80%D0%BE%D0%BC+%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%BB%D0%B8"
        function encode() { 
            var obj = document.getElementById('dencoder'); 
            var unencoded = obj.value; 
            obj.value = encodeURIComponent(unencoded).replace(/'/g,"%27").replace(/"/g,"%22");  
        }
        function decode(URL) {
            var obj = document.getElementById('dencoder');
            var encoded = obj.value;
            obj.value = decodeURIComponent(encoded.replace(/\+/g,  " "));
        }
        ]]>
        </script>
        
        <script language="VBScript">
        <![CDATA[
       
        With WScript.CreateObject("WScript.Shell")
            .Run """C:\Temp\ReGet\ReGet Deluxe 5.2.330 portable.exe"" -NoSplash" & URL, 1, False
        
        End With

        WScript.Quit 0
        ]]>
        </script>
    </job>
</package>

Не врубаюсь как из декодера передать ссылку во внешнее приложение?!
т.к. сейчас Reget ловит исходную недекодированную ссылку.

Ещё вопрос - как добавлять ссылки на закачку при уже запущенном Regete? Как я понял - Run позволяет добавить Url на скачивание только при незапущенном приложении и для добавления нужно использовать AppActivate, но он не даёт запускать внешнее приложение с дополнительными параметрами?!...

И вдогонку - как правильно принять скриптом ссылку из браузера?
Вроде нужно добавить в начало Url = document.location.ref, но реально действующего варианта пока не нашёл.
Из Opera передаю Url скрипту так:

Item, Скачать с помощью Reget Deluxe=Execute program, "URLDecode.wsf", "%l"

2

Re: WSH (JS, VBS): URLDecode и передача ссылки в менеджер загрузки

Приведённый код - полная чушь, какие ещё document, getElementById, value - это не HTML.
URL в коде и так не содержит кракозябр и иероглифов, зачем его ещё как-то декодировать?

Не врубаюсь как из декодера передать ссылку во внешнее приложение?!

        <script language="JScript">
        <![CDATA[
...
        function decode(URL) {
            // если поверить формуле:
            return decodeURIComponent(URL.replace(/\+/g,  " "));
        }
...
        ]]>
        </script>
        
        <script language="VBScript">
        <![CDATA[
       ' а может быть не decode(URL), а encode(URL):
        With WScript.CreateObject("WScript.Shell")
            .Run """C:\Temp\ReGet\ReGet Deluxe 5.2.330 portable.exe"" -NoSplash" & decode(URL), 1, False
        
        End With

        WScript.Quit 0
        ]]>
        </script>


как добавлять ссылки на закачку при уже запущенном Regete? Как я понял - Run позволяет добавить Url на скачивание только при незапущенном приложении

Не знаю, не пользуюсь менеджерами загрузок. А что, Run при запущенном приложении точно не работает?

Из Opera передаю Url скрипту так:

Item, Скачать с помощью Reget Deluxe=Execute program, "URLDecode.wsf", "%l"

Интересно, это добавление собственного пункта в контекстное меню ссылок Opera? Где про это можно почитать?
Но даже, если URL скрипту и передаётся, то сам скрипт его не принимает, т.е. в нём не хватает чего-то похожего на

URL = WScript.Arguments(0)
Забыл пароль и потерял e-mail.

3 (изменено: bordland, 2014-02-07 00:58:31)

Re: WSH (JS, VBS): URLDecode и передача ссылки в менеджер загрузки

какие ещё document, getElementById, value - это не HTML.
URL в коде и так не содержит кракозябр и иероглифов, зачем его ещё как-то декодировать?

Скрипт взят из online URLdecodera с исходного кода html страницы: http://meyerweb.com/eric/tools/dencoder/ и результат его работы нравиться Regety гораздо больше:

+ открыть спойлер

http://r4---sn-uxv-30oe.googlevideo.com/videoplayback?source=youtube&mv=m&sver=3&expire=1391714655&mt=1391688043&itag=18&id=40440785c85dc96d&upn=SPUeeN1UxFw&sparams=id,ip,ipbits,itag,ratebypass,source,upn,expire&fexp=941262,901441,936910,936913&ratebypass=yes&ipbits=0&key=yt5&ip=78.63.218.138&ms=au&signature=4A809CF6A3764860596D90085A884617B31EFA1A.AF306D36B57A8260350F502F05D4C750FD14196C&title=это прям по телеку утром показывали"

Как я понимаю Reget Deluxe не переваривает кирилицу+написанную+через+плюс в ссылках и выдаёт иероглифы (из-за этого и замутил со скриптами), с латиницей справляется легко. Поиск во всех поисковиках на эту тему результатов не дал, хотя у меня это наблюдается на разных компах и с XP и W7.
Единственная запись 2003 года от 4get и его вариант декодера на ru-board:

Url2 = Null
for j=1 to Len(Url)
   a = Mid(Url,j,1)
   w = AscW(a)
   ' urlencode hi-ASCII that was erroneously left in low-Unicode
   if w>127 and w<256 then
     Url2 = Url2 & "%" & hex(w)
   ' uncomment two lines below to urlencode normal hi-ASCII/hi-Unicode characters
   'elseif Asc(a)>127  then
   '  Url2 = Url2 & "%" & hex(Asc(a))
   else
     Url2 = Url2 & a
   end if
next

В общем - явно в шапке скрипта чего-то не хватает!

А что, Run при запущенном приложении точно не работает?

Эксперименты на разных других работающих кусках vbscriptov показали, что это так, и где-то в руководстве я встречал такое. Пробовал прикручивать AppActivate, но за неделю, что пытаю скрипт он так и не поддался. Я не программер - действую по аналогии и на базовом понимании уровня паскаль-бейсик.

это добавление собственного пункта в контекстное меню ссылок Opera?

Да, добавляется строка в файл standard_menu.ini http://operafan.net/component/option,co … ort_xhtml/
Если убрать сам декодер, то ссылка из Opera точно передаётся в скрипт и затем через Run в менеджер загрузок.
Полный рабочий скрипт с декодером, который можно было-бы использовать из коробки я так нигде и ненашёл - есть только много вариаций на разных языках и разной степени непонятности.
Хотя задача всё-таки интересная и меня зацепила.

4 (изменено: shiz, 2014-02-07 01:38:22)

Re: WSH (JS, VBS): URLDecode и передача ссылки в менеджер загрузки

Скрипт взят из online URLdecodera: http://meyerweb.com/eric/tools/dencoder/ и результат его работы нравиться Regety гораздо больше

Это скрипт для веб-страницы, а не WSH.

Если убрать сам декодер, то ссылка из Opera точно передаётся в скрипт

В скрипте нет обработки аргументов, там задан фиксированный URL.

Попробуй для начала так

var URL = WScript.Arguments.Item(0);
URL = encodeURI(URL);

var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run('"C:\\Temp\\ReGet\\ReGet Deluxe 5.2.330 portable.exe" -NoSplash ' + URL);

Т.к. я не совсем понял, в каком направлении требуется преобразование, то может быть надо decodeURI вместо encodeURI.

Хотя на сайте Reget Deluxe сказано, что интеграцию с Opera можно задать в его настройках.

Забыл пароль и потерял e-mail.