-
JavaScript
Всем привет.
С чего бы начать. Начал я изучать яваскрипт, и как следствие - захотелось писать свои скрипты под чужие сайты, для удобного пользования ими.
Ну начать решил с ВК. Думаю многие сталкивались с тем что хочется скачать музычку оттуда. Долго думал как же встроить скрипт в чужую страничку, и наткнулся на GreaseMonkey хорошие расширения для Огнелиса =)
вобщем написал я свой скрипт, и всё хорошо и работает :) вот только при попытке поделится им с другом, возникла проблема, у него скрипт не пашет.
Дело в том что у меня был установлен плагин VKsaver который форматирует код страницы, конкретного куска:
[HTML]<img class="playimg" onclick="return operate('84267951_60750','http://cs4829.vkontakte.ru/u27542045/audio/572e54596154.mp3',294);" id="imgbutton84267951_60750" nosorthandle="true" src="images/play.gif"/>
<form onsubmit="var p = ge('player'84267951_60750''); if (p && 'none' != p.style.display) AudioObject.hidePlayer('84267951_60750', 0, 1); p = ge('playerWall'84267951_60750''); if (p && 'none' != p.style.display) AudioObject.hidePlayer('84267951_60750', 1, 1);" action="http://audiovkontakte.ru/audio-'84267951_60750'" method="post" target="_blank" style="margin: 0; padding: 0;">
<input type="hidden" name="vhost_id" value="4829" />
<input type="hidden" name="vuser_id" value="27542045" />
<input type="hidden" name="vfile" value="572e54596154" />
<input type="hidden" name="vdur" value="294" />
<input type="hidden" name="artist_name" value="example" />
<input type="hidden" name="song_name" value="kickstarts (bar 9 remix)" />
<input type="hidden" name="plugin_ver" value="2.2.2.0" />
<input type="hidden" name="plugin_hash" value="61326c199a532883785276138b8bb367" />
</form>
[/HTML]
под это было легко написать скрипт =) просто добавить в форму кнопку с ссылкой которую я сам формировал из первых трёх инпутов, и константных частей.
код:
[PHP]// ==UserScript==
// @name AudioSave
// @namespace Gena
// @description Save music in vk
// @include http://vkontakte.ru/audio*
// ==/UserScript==
var stringer=new Array();
for(var i=1;i<document.forms.length;i++)
{
stringer[i-1]='http://cs'+document.forms[i].elements[0].value+'.vkontakte.ru/u'+document.forms[i].elements[1].value + '/audio/'+document.forms[i].elements[2].value +'.mp3';
var Inner = document.createElement('input');
Inner.type = 'button';
Inner.value = 'Save';
Inner.name = 'saver';
Inner.setAttribute('onClick','location.href="'+stringer[i-1]+'"');
document.forms[i].appendChild(Inner);
document.forms[i].elements[8].setAttribute('type', 'hidden');
}
[/PHP]
но, удалив VKsaver, я заметил что форма пропала )
в коде странички вк в нужном фрагменте осталось только
[HTML]<img class="playimg" onclick="return operate('84267951_60750','http://cs4829.vkontakte.ru/u27542045/audio/572e54596154.mp3',294);" id="imgbutton84267951_60750" nosorthandle="true" src="images/play.gif"/>[/HTML]
Так вот суть вопроса в следующем: что нужно делать чтобы получить значения первых трёх импутов?
[B]<input type="hidden" name="vhost_id" value="4829" />
<input type="hidden" name="vuser_id" value="27542045" />
<input type="hidden" name="vfile" value="572e54596154" />[/B]
Не имея их в коде, куда и как за ними нужно отправлять запрос =)
Либо, можно ли перехватить передаваемое значение в onclick="return operate('84267951_60750','http://cs4829.vkontakte.ru/u27542045/audio/572e54596154.mp3',294);" ? тоесть, есть уже готовая ссылка, но она ведь тоже как-то формируется....
Спасибо за помощь :shine:
-
ну почему нету в коде вот же они все:
[url]http://cs[/url][B]4829[/B].vkontakte.ru/u[B]27542045[/B]/audio/[B]572e54596154[/B].mp3',294)
<input type="hidden" name="vhost_id" value="[B]4829[/B]" />
<input type="hidden" name="vuser_id" value="[B]27542045[/B]" />
<input type="hidden" name="vfile" value="[B]572e54596154[/B]" />
Дальше пишем регулярку, разбираем строку, получаем эти параметры, формируем хиден поля.
-
кстати, не понятно, зачем нужно парсить эту строчку, и выдёргивать из неё что либо, если можно просто вырвать 2 операнд функции operate, который является полным путём к файлу, который нужно качать!
-
[QUOTE=CrazySquirrel;15094804]кстати, не понятно, зачем нужно парсить эту строчку, и выдёргивать из неё что либо, если можно просто вырвать 2 операнд функции operate, который является полным путём к файлу, который нужно качать![/QUOTE]
Спасибо )) я же говорю что начинающий ;)
так вот, каким же образом можно вырывать передаваемое значение?
оно же передаётся а не возвращается, или теми же регулярками?
мммм
не знаю, может регулярки не самый лучший вариант. мне же надо знать, в каком теге нашлось совпадение, чтоб под имаджем кнопку влепить.
-
[B]Wertixvost[/B], для себя еще не открыли JQuery? ;)
-
[QUOTE=Fallout;15104004][B]Wertixvost[/B], для себя еще не открыли JQuery? ;)[/QUOTE]
100%.
Взятие таких вещей без jQuery достаточно неудобно.
В любом случае надо найти в коде закономерность. Тут видно что все "песенки" висят на событии onclick для изображений класса playimg (img class="playimg").
Для jQuery всё просто
$('img.playimg').each();
Для чистого JS надо писать функцию getElementByClass, по аналогии c getElementById. В конечном итоге всё равно приходим к регулярке, которая будет брать строку события onclick, и парсить её, в данном случае парсить просто до уписяться split('\',\''), ну и т.д.
-
да :) JQuerry библиотечка хорошая, но я решил попробовать с JS =)
спасибо )
-
хм , кстати идея то до уписятся простая =) как я сам не додумался?! ) просто так же как брать массив форм, так же взять все имаджи указанного класса ) а потом разбить строку значения атрибута )
просто по привычке из Си не сразу понял что значение операнда можно стянуть :))