| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Работа с сетью > Desktop клиент для Контакта |
| Автор: Atum 23.11.2010, 12:39 | ||||||||
| Пытаюсь разобраться с API контакта и как с ним работать из java . Но знаний и информации по этой теме недостаточно . что хочется получить ?! есть задача - авторизоваться пользователем и дать доступ своему приложению .... После авторизации получать сообщения пользователя ... иметь возможность из добавлять , удалять и восстанавливать. что есть ... и какие проблемы возникли ... первое - это вход в контакт ... в описании API предлагают создать Браузер для авторизации если брать простой JEditorPane и ставить ему setPage(url); то он некорректно отображает содержимое . и непонятно как он будет работать и как ждать от него ответ ... Я хочу пойти по другому пути ... пока у меня не будет клиентского GUI ... все операции ходу делать из когда и консоли ... для начала взял за основу ... HttpClient от apache 1. Авторизация
получаем в response страницу авторизации ... вопрос как автоматически заполнить поля адреса и пароля и нажать на кнопку вход? 2. Авторизация Desktop приложения как описано в API для создания приложения надо получить id приложения , и дать ему доступ к сообщениям - выставить маску 4096 т.е. мое приложение должно авторизоваться по следующему URL http://vkontakte.ru/login.php? app=11111&layout=popup&type=browser&settings=4096 у меня есть ID моего приложения: 11111 , есть Защищенный ключ. Вызываю точно такой же код но с новой ссылкой - получаю в ответ страницу с требованием ввести логин пароль и кнопкой разрешить приложению доступ к моей информации...
в вопрос все тот же как теперь ввести логин пароль и отправить данные и разрешить доступ. в Описании сказано что в ответ я должен буду получить
вот с этого Момента я уже ничего не понимаю что делать ...
Какие параметры необходимо передавать при запросе? подпись запроса создается сервером или руками? sig = md5(midname1=value1name2=value2secret) Самые для меня важные вопросы как вызывать функции messages.get messages.send – посылает сообщение. messages.delete – удаляет сообщение. messages.restore – восстанавливает только что удаленное сообщение. Какой библиотекой пользоваться (Хочется примера и код) Все кто можем помощь чем либо - буду очень признателен. |
| Автор: Atum 24.11.2010, 17:13 | ||||||
Хорошо , я уточняю ... пытаюсь заполнить поля таким образом ....
но чего то явно не хватает ?... и к примеру как нажать на кнопку разрешить? что мы должны получить в ответ ?! - пишут что ссылку с редиректом ... и параметрами сессии как их вытащить? и пользоваться... Очень хочется увидеть ПРИМЕР ! хотя бы два запроса - один на авторизацию - второй на получение сообщений чтобы понять как это организовать . |
| Автор: Hidrag 24.11.2010, 17:25 |
| Делается это так, ставится снифер, например http://www.httpwatch.com/. Заходишь на сайт, и смотришь в снифире какие данные к каким полям формы отправляются, соответственно прописываешь их в апликухе. Далее смотришь что возвращается (куки там, идентификатор сессии, еще что-нибудь) и прописываешь их у себя. По сути программа имитирует пользователя, отправляет запросы - получает ответы, если заполнишь правильно все http header'ы то для сайта это будет выглядеть как пользователь с указанного в хедерах браузера. |
| Автор: Hidrag 24.11.2010, 17:45 |
| а вот тут примеры: http://forum.vingrad.ru/forum/topic-208331/anchor-entry1493331/0.html |
| Автор: LSD 24.11.2010, 18:10 |
| Hidrag, все верно описал, для случая когда ты пытаешься имитировать пользователя. Ну разве что кроме того, что возможно еще потребуется UserAgent поставить. Но ты вроде писал, что пытаешься использовать API контакта, а там уже все может быть по другому. Надо смотреть документацию. |
| Автор: Atum 25.11.2010, 12:01 |
| смотрю документацию и ничего не могу понять ... потому что опыта работы с сетью и браузерами практически нет (совсем нет). Поэтому и хочется увидеть один пример - с двумя запросами - авторизацией - получением ответа ... анализом ответа ... и посылкой следующего запроса ... итд... странно что тема социальных сетей очень популярная .... но вот красивых и прозрачных примеров нигде нет... ибо те люди которые в этом хорошо разбираются понимают это все очень хорошо, и им такие документы ненужны... а что делать таким кто только начинает разбираться в премудростях работы сетей ?! |
| Автор: LSD 25.11.2010, 12:04 |
| Может стоит начать с ответа на вопрос какой из двух вариантов работы с вконтегом ты выбрал? |
| Автор: Atum 25.11.2010, 12:45 |
| смотрю документацию и ничего не могу понять ... потому что опыта работы с сетью и браузерами практически нет (совсем нет). Поэтому и хочется увидеть один пример - с двумя запросами - авторизацией - получением ответа ... анализом ответа ... и посылкой следующего запроса ... итд... странно что тема социальных сетей очень популярная .... но вот красивых и прозрачных примеров нигде нет... ибо те люди которые в этом хорошо разбираются понимают это все очень хорошо, и им такие документы ненужны... а что делать таким кто только начинает разбираться в премудростях работы сетей ?! Добавлено через 51 секунду Думаю я определился - будет POST. |
| Автор: LSD 25.11.2010, 13:56 |
| Еще раз: ты будешь имитировать пользователя или использовать API вконтега для внешних приложений (в этом случае не помешала бы ссылка на документацию)? |
| Автор: Atum 25.11.2010, 15:42 |
| Хочу использовать API вот линк http://vkontakte.ru/developers.php?id=-1_21239305&s=1 |
| Автор: COVD 28.11.2010, 18:26 | ||
Atum, а зачем? Мне вообще удивительно, что они предоставляют такое API. Все эти сети живут с рекламы, очевидно, которую они добавляют в свой интерфейс. Предоставление возможности использования другого интерфейса, неконтролируемого владельцем сети, снижает, по идее, их доходы. Кроме того, расширяет возможности нелегитимного использования сети. Рассылка спама, например. |
| Автор: Atum 29.11.2010, 11:29 | ||
занимаюсь самообразованием. |
| Автор: LSD 29.11.2010, 19:20 | ||||
1. Авторизуешься:
http://hc.apache.org/httpclient-3.x/redirects.html 2. Из locationHeader получаешь значение параметра session и распарсиваешь его как JSON. 3. Формируешь необходимые параметры. Они перечислены в Какие параметры необходимо передавать при запросе? и плюс параметры необходимые для вызываемого метода (в примере это были uids и fields. И засовываешь их в SortedMap, затем вычисляешь sig
После чего можешь посылать POST или GET на http://api.vkontakte.ru/api.php с этими параметрами. |
| Автор: Atum 3.12.2010, 19:13 | ||||||||||||
| LSD, огромное спасибо за пример . Первая трудность с которой пришлось столкнуться - locationHeader null
Делаю первый запрос с помощью GET как описано в api но не получаю никаких параметров
как я понимаю тут должно быть три основных шага ... первый пусть будет по get и два по пост : Первый авторизация нашего приложения :
в ответе мы должны получить app_hash параметр второе отправить POST запрос на страницу http://login.vk.com/ после чего получить новое значение app_hash (авторизация пользователя его маил и логин )
отправить POST запрос на страницу vkontakte.ru/login.php, где мы уже будем получать данные сессии путем парсинга.
где expire – Время истечения сессии в формате UNIX mid – ID пользователя в ВКонтакте secret – Специально сгенерированный секрет сессии sid – Идентификатор сессии |
| Автор: LSD 7.12.2010, 19:22 |
| Для начала надо разобраться, почему ты не получаешь редирект на login_success.html. 1. Проверь какой код возвращает executeMethod() он должен быть 3ХХ 2. Попробуй получить редирект от какого нибудь сокращателя ссылок. |
| Автор: Halavshik 9.12.2010, 01:58 |
| Народ, можно просьбу, как для идиота объясните по шагам как все это реализовать начиная со слов открываем новый проект в eclipse |
| Автор: LSD 9.12.2010, 17:09 | ||
Для того чтобы он был не null надо надо отключить переход по редиректам:
|
| Автор: SaloS 27.1.2011, 12:08 | ||
| Привет, у меня также проблема с десктоп клиентом (хоть и на .NET). Я все получил, но при попытке отправить запрос к апи всегда выдается ответ Invalid signature. Я уже все перепроверил. Я смотрю флешевского клиента, на котором все работает стянул параметры, подставил, все совпадает. А с десктопа ни в какую. Прикол в том, что если не посылать sid такой же ответ. Проверил через снифер, сид отправляется. Если у кого-то работает авторизация, можете проверить, что я не так делаю. mid = 3943076 secret = e4d924d097 сигнатура считается для строки 3943076api_id=1890159fields=uid,first_name,last_name,nickname,sex,bdate,photo,photo_medium,photo_bigmethod=getProfilestest_mode=1uids=3943076v=3.0e4d924d097 Ответ с сервера
Что я неправильно делаю я не пойму. Остается только возможность что я неправильно получаю secret и sid. Но как это проверить. Вроде сверялся, все правильно. Добавлено через 5 минут и 40 секунд Оказалось, надо было создать именно desktop приложение. Если использовать флеш - оно не хотело |
| Автор: kkorsakoff 31.1.2011, 15:55 | ||||
| У меня получалось так: sid не шлю, sig шлю, mid не вставляю в подпись. Начинаю сразу с api_id. MD5 беру от строки
Запрос выполняю такой
|
| Автор: gektor333 2.2.2011, 01:11 |
| Сталкнулся с проблемой из этой области: Использую httpClient для парсинга страниц с целью поиска интересующей информации. Сайты, с которыми предстоит работать предоставляют сервис аналогично www.sciencedirect.com. На запрос каждой страницы генерируется мд5, который передается в качестве параметра запроса. Есть ли какая-то возможность програмно послать запрос на сервер для генерации мд5 нужной страницы? Думал, что можно запустить паука, который с главной страницы начнет ползти по всем ссылкам и записывать их в локальную базу данных... Как в таких случаях обработку проводят? |
| Автор: Atum 14.2.2012, 16:19 | ||
| За этот год все немного изменилось ! поэтому кто интересуется как создать клиента который бы постил новости на ленту группы отвечаю : (я использовал apache HttpClient и org.scribe) Самое ценное - это получение Code - функция которая работает в несколько этапов и ее нужно корректировать в зависимости от количества редиректов которые создает контакт (если приложение не установлено - то в первый вызов надо добавить в код согласие на то что приложение получит права на доступ к вашим данным) стандартная цепочка редиректов такая : (после того как ввели https://api.vkontakte.ru/oauth/authorize) Request URL:https://login.vk.com/?act=login&soft=1 Request URL:http://oauth.vkontakte.ru/oauth/authorize Request URL:https://oauth.vkontakte.ru/grant_access http://api.vkontakte.ru/blank.html#code=12a242bbf6de2285ce В данном примере проблема с капчей не решается.
|