- Language: [RU] , [EN]
-
Простое использование.
-
Встроенный обработчик лонгпула.
-
Встроенный парсинг лонгпула.
-
Встроенный парсинг сообщений.
-
Проект основан на org.json.
Ниже будет пример. паст scr/tests/SimpleUseAPI.java
-
Скачиваем latest JAR (Скоро выложу в maven)
-
Инициализируем:
final vkApi api = new vkApi("TOKEN");
-
Выбераем тип:
- Если токен группы, можно ничего не делать
- Если токен пользывателя:
api.setAccountType(vkApi.USER);
-
Вызываем любой метод по шаблону:
String param = api.method("VK_API.METHOD", "PARAM1=some&PARAM2=some&PARAM3=some")
-
Важно!:
param
- это уже полеresponse
- Всё обращение к апи приходит в формате
String
. Сделано для совместимости.
-
Фаст-методы (самые используемые методы):
api.messagesSend(PEER_ID, MESSAGE)
- messages.sendapi.getGroupId()
- groups.getById, полеid
. Работает только с групповым токеном.api.getLongPollServer()
- {messages}/{groups}.getLongPollServer. Имеется доп. поле -URLFix
, его обрабатывать не следует.
-
-
Понять что вы самый крутой разраб, и скачать мою библиотеку ;)
import santaspeen.vk.api.vkApi;
import santaspeen.vk.api.exceptions.VkApiError;
public class SimpleUseAPI {
private static final vkApi api = new vkApi("TOKEN");
public static void main(String[] args) throws VkApiError {
api.setAccountType(VkAPIAccountTypes.USER); // (!) Если токен юсера
String unixTime = api.method("utils.getServerTime");
System.out.println(unixTime.get("long"));
}
}
- Начиная с 0.9.1:
- Можно использовать интерфейс
@onVkMessage(text = null, startsWith = false, returnLongPoll = false, onlyBy = {})
- Сообщения сравниваются:
- Сообщение.toLowerCase();
- Если параметр
startsWith
true -text.startsWith(command)
. Если нет -command.equals(text)
.
- Можно использовать интерфейс
import santaspeen.vk.api.features.VkAPIAccountTypes;
import santaspeen.vk.api.exceptions.VkApiError;
import santaspeen.vk.api.VkApi;
public class Main { // Your main class
public static final VkApi api = new VkApi("TOKEN");
public static void main(String[] args) throws VkApiError {
api.setAccountType(VkAPIAccountTypes.GROUP); // (!) Если токен группы, не обязательно.
api.bindCommands(new messages());
Thread thread = api.startWithThread();
System.out.println(thread.getName());
System.out.println("This code be print");
api.start();
System.out.println("This code not be print");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
import org.json.JSONObject;
import santaspeen.vk.api.features.onVkMessage;
import santaspeen.vk.api.parsers.parseMessage;
import santaspeen.vk.api.exceptions.VkApiError;
import santaspeen.vk.api.VkApi;
public class messages{ // Your class with messages
@onVkMessage(text = "hi", startsWith = true, returnLongPoll = true)
public void newMessage(parseMessage msg, VkApi api, JSONObject longPoll) throws VkApiError {
System.out.println("Текст: "+msg.text+"\nОт: @id"+msg.fromId+"\nВ: "+msg.peerId);
System.out.println(longPoll);
if (api.userId != msg.fromId)
api.messagesSend(msg.peerId, "hi");
}
@onVkMessage(text = "java")
public void newMessage(parseMessage msg, VkApi api) throws VkApiError {
System.out.println("Текст: "+msg.text+"\nОт: @id"+msg.fromId+"\nВ: "+msg.peerId);
api.messagesSend(msg.peerId, "Yes, I'm on Java");
}
}
Ниже будет пример. паст scr/tests/LongPollAPI.java
- Все ивенты приходят в классе
org.json.JSONObject
- Следуем по схеме выше.
- Получаем лонгпул:
- Если нужно получить 1 ивент используйте:
JSONObject event = api.oneLongPollEvent(WAIT);
- Для получения ивентов по схеме:
- Получите настройки лонгпул сервер:
api.getLongPollServer();
, нужно для инициализации настроек, передавать параметр никуда не нужно. - Создаём цикл:
while (true){ JSONObject longPoll = api.listenLongPoll(25); System.out.println(longPoll); }
- Получите настройки лонгпул сервер:
- Если нужно получить 1 ивент используйте:
- Итого у нас получилось:
import org.json.JSONObject;
import santaspeen.vk.api.exceptions.VkApiError;
import santaspeen.vk.api.vkApi;
public class LongPollAPI {
private static final vkApi api = new vkApi("TOKEN");
public static void main(String[] args) {
api.getLongPollServer();
long lastTs = 0;
while (true){
JSONObject longPoll = api.listenLongPoll(25);
System.out.println(longPoll);
}
}
}
Ниже будет пример. паст scr/tests/LongPollAPIAndParse.java
Прочитав и запустив предыдущую часть, вы, наверное, выключили, пожалев консоль. Я помогу её уберечь от таких рейдов.
- Прочитать предыдущую часть.
- Создать парсер:
parseLongPoll parse = api.parse( longPoll );
- Мы уже имеем поля:
failed
,ts
,type
,updates
- Если токен групповой:
eventId
,groupId
,lastGroupUpdate
,groupObject
,groupMessage
. Не указанные поля будут всегда null. - Если токен страницы:
pts
,lastUserUpdate
,userObject
,userMessage
. Не указанные поля будут всегда null.
- Мы уже имеем поля:
- Смотря в документацию, можем сразу сделать обработку failed:
if (parse.failed > 0) api.getLongPollServer();
- Теперь можно убрать бесконечный лонгпул из консоли, я это делаю с помощью ts:
if (lastTs != parse.ts) { lastTs = parse.ts; // Ваш код.. }
- Заворачиваем:
JSONObject longPoll = api.listenLongPoll(25); parseLongPoll parse = api.parse( longPoll ); if (lastTs != parse.ts) { lastTs = parse.ts; if (parse.failed > 0) api.getLongPollServer(); // Ваш код.. }
- На этом всё, вы наверное, уже, успели подумать, а нееет, ещё есть парсинг сообщений. (Group LongPoll version >= 5.107)
-
Парсинг сообщений очень прост, используя, уже созданный
parseLongPoll parse
, берём из него методmessage()
, т.е.parse.message()
.- Поля метода:
date
,important
,fromId
,groupAttachments
,userAttachments
,isHidden
,fwdMessages
,id
,text
,randomId
,out
,peerId
,conversationMessageId
- Поля метода:
-
Рекомендую
parse.message()
обернуть вif (parse.isMessage())
.
-
- Иии в итоге? У нас готовый чат-бот
import org.json.JSONObject;
import santaspeen.vk.api.exceptions.VkApiError;
import santaspeen.vk.api.parsers.parseLongPoll;
import santaspeen.vk.api.vkApi;
public class LongPollAPIAndParse {
private static final vkApi api = new vkApi("TOKEN");
public static void main(String[] args) throws VkApiError {
api.setAccountType(vkApi.GROUP); // (!) Если токен группы, не обязательно.
api.getLongPollServer();
long lastTs = 0;
while (true){
JSONObject longPoll = api.listenLongPoll(25);
parseLongPoll parse = api.parse(longPoll);
if (lastTs != parse.ts) {
lastTs = parse.ts;
if (parse.failed > 0)
api.getLongPollServer();
if (parse.isMessage()) {
String text = parse.message().text;
long peerId = parse.message().peerId;
long fromId = parse.message().fromId;
String message = "Текст: "+text+"\nОт: @id"+fromId;
System.out.println(message);
api.messagesSend(peerId, message);
}
}
}
}
}