Задача - авторизоваться на сайте, затем скачать страничку и обработать её скриптом на bash.
По началу я думал просто скачать страничку с помощью wget, но не тут-то было.
Мне подсказали, что curl умеет авторизоваться. man curl вывел кучу текста, и я хотя-бы убедился, что такое есть. Далее пошел искать в инет. Там полно примеров, но кажется, что все связано с php.
Тогда как связать скрипт php и bash? Это наводит на мысль, что возможно тот curl, который мне нужен не совсем php.
Ведь могу-ли я (как) использовать те примеры, если все это пройдет через консоль?
В общем прошу помочь навести ясность.
Итог:
1
2
3
4
|
#!/bin/bash
gets=`curl -s --data "[email protected]&pass=пароль" http://login.vk.com/?act=login | egrep -o \([a-z]\|[0-9]\){20\,}`
curl -v --cookie-jar /tmp/vkcookie --data "s=$gets&op=slogin&redirect=1&expire=0&to=0" http://vkontakte.ru/login.php
curl -v --cookie /tmp/vkcookie http://vkontakte.ru/audio.php | grep -o 'http.*mp3' | wget -i - |
Всем большое спасибо.
-
Примеры тут и тут. Даже если так, как прицепить часть скрипта в bash?
-
-
можно и без баша, чем вас php скрипты не устраивают?
-
-
Практически нулевое знание. И не надо подколок, что с башем у меня так-же. :D
Да и вообще - именно на баше хочется сделать.
-
тем, что php предназначем немного для другого.
-
-
„С“ разрабатывался для создания операционных систем, но не прикладного ПО, так что о предназначении можно говорить оч долго... просто здесь что bash, что php нормально подходят
-
Уточните конечную задачу. Что именно надо получит в итоге? Тогда проще будет подсказать инструмент. В одних случаях лучше bash, в других python или Qt/C++.
-
-
Скачать все песни находящиеся на vkont...ru/audio.php
Задумыва так:
*авторизация*
curl исходник -O - | grep -o 'http.*mp3' | wget -i -
Это импровизационный вариант, если что, не смейтесь )
-
-
http://yandex.ru/yandsearch?stype=first&clid=46511&text=curl+%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&lr=39
Это для начала.
Дело в том, что способов авторизации может быть много.
Вам необходимо понять, как именно происходит авторизация в ВКонтакте.
Что именно в момент отправки POST-запроса на сервер ВКонтакте туда отправляется, кроме логина и пароля. Далее вам не составит труда с помощь curl авторизоваться, принять "печеньки" с ВКонтакте и "стать на нём авторизованным".
Вторая часть Марлезонского балета состоит в том, чтобы пропарсить html-код страницы с музыкой и загрузить .mp3 файлы.
Давайте немного уточним-таки задачу?
1. Вам нужно загрузить n-ое количество музыкик себе на компьютер потом, что вам нужна эта музыка и то, откуда она будет загружена -- неважно?
2. Вы хотите научиться писать скрипты на bash/php?
Дело в том, что если вы укажите первый вариант, то есть масса иных, более лояльных способов получить музыку. prostopleer.com, music.yandex.ru и т. д.
Если же у вас стоит цель научиться писать скрипты и написать на их основе что-то полезное человечеству, то тут стоит начать несколько с более простых вещей, нежели авторизация, парсинг, даунлоуадинг.
p. s.: grep -o 'http.*mp3' у вас не сработает. Надо или указать, что вы будете в качестве шаблона использовать регулярное выражение ключиком -E, или же использовать для этого команду egrep (рекомендуется).
p. p. s.: Попробуйте приучить себя никогда не использовать короткий стиль аргументов команд в скриптах, форумах и т. д. Короткий стиль скрипта следует использовать только для одноразовых команд в вашей консоле.
-
-
Я хочу научиться писать скрипты.
Но! Сейчас у меня загорелась именно эта идея, и согласен использовать скрипт, не зная полностью как он работает. Хотя я согласен изучить этот вопрос, и потом сам все сделать под свои нужды. Но хоть с чего начать? Имеено, что-бы быстрее решить именно эту задачу с curl и ВК.
-
принять "печеньки" с ВКонтакте
вспомнилось:
Блин. Купил коммуникатор китайского производства. Руссификация тоже китайского производства... Только после поллитра мы с напарником наконец догадались, что "ясные печенья", это "очистить cookies".
©bash.org.ru
-
Сейчас я могу сохранить исходник к себе, и пропустить его через скрит
wget http://associt.org/index.html -O - | grep '<img class="playimg" onclick="return operate' | grep -o 'http.*mp3' | wget -i -
На хабре видел статьи про вконтакт и curl, авось удастся что-нибудь использовать.
-
-
*скрипт
-
Зачем так сложно?
curl "http://associt.org/index.html" 2> /dev/null | egrep -o 'http:.*mp3' | wget -i -
-
-
Это на случай, если там и другие mp3 будут. Вообще такwget http://associt.org/index.html -O - | grep -o 'http.*mp3' | wget -i -
Иначе я не умею не умел.
-
Забыыл - спасибо за попровки.
-
Вот этого достаточно для авторизации на ВКонтакте:
1
2
3
4
5
6
7
|
<form method="post" action="http://login.vk.com/?act=login">
<input type="text" name="email">
<input type="password" name="pass">
<input type="submit" value=".">
</form>
|
Таким образом вам необходимо передать методом POST поле email значением которого будет ваш логин и поле pass значением которого будет пароль скрипту расположенному по адресу http://login.vk.com/?act=login. Он ответит вам специально сформированной страничкой, которая будет содержать еще одну форму:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=windows-1251' />
</head>
<body onload="try { document.getElementById('l').submit(); } catch(e) { document.getElementsByTagName('form')[0].submit(); }">
<form id='l' method='post' action='http://vkontakte.ru/login.php'>
<input type='hidden' name='s' value='44392dc17f3d7724016daa2ab156e72d0810cb417838ae1708757c17cb8' />
<input type='hidden' name='op' value='slogin' />
<input type='hidden' name='redirect' value='1' />
<input type='hidden' name='expire' value='0' />
<input type='hidden' name='to' value='' />
</form>
</body>
</html>
|
Вам нужно будет её отпарсить, дабы вычленить значение поля "s" (только оно здесь генерируются. Остальные не изменяются) и отправить методом POST скрипту http://vkontakte.ru/login.php. В ответ получите кукисы и страничку с вашим профилем.
Все вышеперечисленное следует делать один раз, только для того, чтобы получить кукисы, а потом куда угодно их подставлять, но можно этого и не делать, а тупо выдернуть их из браузера ;-)
-
-
а можно готовый скрипт на чем-нить, и буду век добрым словом вспоминать, мне кроме заглавной страницы, ничего и не надо
-
Всё, что выше написал @Zend верно и применимо к консольному $ curl.
После того, как у вас будет обычный текстовый файл с cookie-данными внтури, вы можете подставляю Контакту этот файл забирать содержимое html-страниц, парсить их и т. д.
-
-
спасибо, но в HTTP\POST\GET\CURl я совсем дурак, мне бы что бы по полочкам всё разложили, как-то никогда их не понимал =(
-
Если учесть все, что я собрал, получается:
-послать запрос
-отпарсить
-авторизоваться и получить куки
-использую куки, делать что хочется
Все правильно? И все это можно сделать в рамках скрипта на баше..
-
-
Делаем то, что делает браузер только вручную:
1
2
3
|
curl -v --data "[email protected]&pass=my_password" http://login.vk.com/?act=login
|
В выводе находим поля "s", "op", "redirect", "expire", "to" и формируем из них свой запрос ( /tmp/cookie-vk - путь до файла где мы будем хранить cookie):
1
2
3
|
curl -v --cookie-jar /tmp/cookie-vk --data "s=4c262466659b4a25c252112a39021d349a43e811bf2dd2899f15921c&op=slogin&redirect=1&expire=0&to=0" http://vkontakte.ru/login.php
|
Все теперь у нас есть cookie! Идем на страничку со своим профилем (на любую другую) парсим её как хотим:
1
2
3
|
curl -v --cookie /tmp/cookie-vk http://vkontakte.ru/id1233036
|
-
-
Для меня получилось так:
1
2
3
4
|
#!/bin/bash
gets=`curl -s --data "[email protected]&pass=пароль" http://login.vk.com/?act=login | egrep -o \([a-z]\|[0-9]\){20\,}`
curl -v --cookie-jar /tmp/vkcookie --data "s=$gets&op=slogin&redirect=1&expire=0&to=0" http://vkontakte.ru/login.php
curl -v --cookie /tmp/vkcookie http://vkontakte.ru/audio.php | grep -o 'http.*mp3' | wget -i - |
-
-
А не могли бы вы обьяснить регулярное выражение?
а то у меня получилось так:
curl -s --data "[email protected]&pass=pass" http://login.vk.com/?act=login | egrep -o "name='s' value='[a-ze='[a-z0-9]+" | sed -e "s/name='s' value='//" -e "s/'//"
-
-
выделяется слово длиннее 20 символов. ваш вариант более правильный, но и этот работает :)
-
маленькое добавление в скрипт
curl -s "login.vk.com/?act=login&pass=`echo пароль_на_русском_или_любом_другом_языке | iconv -f UTF8 -t CP1251`& [email protected]" -c 33 | egrep -o \([a-z]\|[0-9]\){20\,}
-
у меня только один вопрос. у меня пароль русскими ну не в какую не хочет логинится. с английскими всё нормально. что делать?
-
-
< CAPTAIN-MODE_ON >
использовать пароль с английскими символами
< CAPTAIN-MODE_OFF >
locale покажите
-
-
я же написал с английским работает. не понимаю почему с русским не идёт
LANG=ru_RU.utf8
LANGUAGE=ru_RU:ru:en_GB:en
LC_CTYPE="ru_RU.utf8"
LC_NUMERIC="ru_RU.utf8"
LC_TIME="ru_RU.utf8"
LC_COLLATE="ru_RU.utf8"
LC_MONETARY="ru_RU.utf8"
LC_MESSAGES="ru_RU.utf8"
LC_PAPER="ru_RU.utf8"
LC_NAME="ru_RU.utf8"
LC_ADDRESS="ru_RU.utf8"
LC_TELEPHONE="ru_RU.utf8"
LC_MEASUREMENT="ru_RU.utf8"
LC_IDENTIFICATION="ru_RU.utf8"
LC_ALL=
-
Либо сменить локаль, либо перекодировать пароль в CP-1251 перед тем как его отправить. (сейчас он отправляется в UTF-8. Придется брать на себя работу браузера...)
PS.
В UTF-8 все английские символы кодируются одним байтом, все прочие двумя. Вот поэтому английский вариант пароля работает а кириллический нет.
-
Отличное объяснение, спасибо.
Уходя немного в сторону других ресурсов, как получить аналогичные данные, допустим, с animereactor,ru ? там какая-то странная штука с логином.
Оперовский драгонфлай не видит когда устанавливаются куки, но видит - когда они удаляются (а там их дай бъг 9 штук)
(проблема вся в том, что Flexget не может оттуда утягивать файлы из-за того, что тупое подсовывание кукисов не срабатывает)
-
могу предложить aria2c
Load cookies
Load Mozilla/Firefox(1.x/2.x) and Netscape format:
aria2c --load-cookies=cookies.txt http://host/file
Load Firefox3 format:
aria2c --load-cookies=cookies.sqlite http://host/file
работает также и с куками хрома
правда это частичное решение проблемы, но для того чтобы получить страничку вполне подходит ;)
PS C:\Users\Dagron\aria2-1.10.0-mingw32msvc-build1> .\aria2c.exe --load-cookies="C:\Users\Dagron\AppData\Local\Google\Chrome\User Data\Default\Cookies" http://vkontakte.ru/feed2.php
ну можно еще так)
http://vkontakte.ru/idxxxxxxx
-
я так смотрю балан своего провайдера:
curl -s -c /tmp/onlime.cookies https://my.onlime.ru > /dev/null && curl -s -L -b /tmp/onlime.cookies -c /tmp/onlime.cookies -d "login_credentials[login]=LOGIN&login_credentials[password]=PASSWORD" https://my.onlime.ru/session/login | html2text | awk '/^Договор №:|^Лицевой счёт №:|^Баланс:/ {print}' && rm -rf /tmp/onlime.cookies
-
мечта идиота сбылась, пара строк на bash'е и у меня в треи есть количество новых сообщений контакта
-
-
В коньках может стать интересным дополнением. Можно посмотреть ваш вариант скрипта?
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Черновики (все)
|
|
Избранное (всё)
|
|
|