Бот для VK на Java

502
14 марта 2017, 13:32

Не совсем сведущ в веб-программировании, поэтому попрошу не принимать близко к сердцу мои, возможно глупые, вопросы :)

В планах написать приложение, которое может работать с личными сообщениями (страницы ВКонтакте, или сообщества), а также с другим функционалом VK API.

На ruSO видел вопросы насчёт авторизации с помощью Java в ВКонтакте, но подробного описания, как с этим работать, я не нашёл. В документации VK есть вся необходимая информация по работе с API, но там в основном JSON-запросы, нужно иметь сервер, который будет принимать и обрабатывать эти запросы, и так далее (https://vk.com/dev/callback_api, https://vk.com/dev/bots_docs)

Но как работать с этим с десктоп-приложения, например, со своего компьютера на Windows, я не понял.

В написании приложения у меня проблем не возникнет, но как работать с VK API и взаимодействовать с ним (отправлять сообщения, или выполнять любые другие действия) я не знаю.

Желательно, чтобы можно было:

  • Хранить токены, чтобы на как можно более длительное время они хранились, и не было необходимости заново логиниться (логиниться через окошко в приложении - встроить веб-страничку не так трудно, но как заставить бота оставаться авторизованным?)
  • Обрабатывать любые запросы, которые отправит VK, а также самому их отправлять (те же сообщения / любое взаимодействие)

Буду рад любым наводкам. Ещё больше буду благодарен, если приведёте пример кода, как авторизовываться и хранить эту авторизацию, как взаимодействовать с API (простейшие примеры).

Answer 1

Для Вашей цели почти наверняка подойдет Java SDK от самих VK. На странице SDK подробная документация (и, в частности, инструкция по получению access-токена пользователя).

Перед тем, как погружаться в работу SDK, лучше прочитать про то, как работает API Вконтакте (это небольшая статья).

Скорее всего, вам нужно именно standalone-приложение. Для них нормально в качестве REDIRECT_URI использовать https://oauth.vk.com/blank.html (это даже обязательно для некоторых методов API).

Чтобы access-токен жил вечно, в scope добавьте значение offline.

С API без SDK взаимодействуют так:

// формируют url запроса
String url = "https://api.vk.com/method/messages.get?count=20&access_token=<access_token>";
URL obj = new URL(url);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
// из документации: параметры могут передаваться как методом GET, так и POST. Если вы будете передавать большие данные (больше 2 килобайт), следует использовать POST. 
connection.setRequestMethod("GET");
// посылаем запрос и сохраняем ответ
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
// выведет json-ответ запроса
System.out.println(response.toString());

(код get-запроса взял отсюда) А далее нужно распарсить полученный json-ответ.

Авторизация — труднее. Там надо открыть окно браузера со сформированным url, задетектить редирект, распарсить access_token в новом url.

Хорошим упражнением будет походить по исходникам Java SDK и разобраться, как реализовано там. Например, исполнение message.get начинается тут.

READ ALSO
Spring 4 mvc загрузка файла используя @ModelAtribute

Spring 4 mvc загрузка файла используя @ModelAtribute

ЗдравствуйтеИзучаю спринг, пытаюсь загрузить фото

414
Два активити одном java-файле

Два активити одном java-файле

Могу ли я так, в одном java-файле два активити прописать? Те надо сделать так, чтобы когда загружался java-файл, он загрузил два активити - один...

208
java.lang.SecurityException: Invalid certificates

java.lang.SecurityException: Invalid certificates

Взял лаунчер из этого репозитория: Launcher Minecraft

270