Step 1. Add the JitPack repository to your build file
Add it in your root settings.gradle at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
Add it in your settings.gradle.kts at the end of repositories:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Add to pom.xml
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Add it in your build.sbt at the end of resolvers:
resolvers += "jitpack" at "https://jitpack.io"
Add it in your project.clj at the end of repositories:
:repositories [["jitpack" "https://jitpack.io"]]
Step 2. Add the dependency
dependencies {
implementation 'com.github.anton3:kotlin-vk-api:0.14.0'
}
dependencies {
implementation("com.github.anton3:kotlin-vk-api:0.14.0")
}
<dependency>
<groupId>com.github.anton3</groupId>
<artifactId>kotlin-vk-api</artifactId>
<version>0.14.0</version>
</dependency>
libraryDependencies += "com.github.anton3" % "kotlin-vk-api" % "0.14.0"
:dependencies [[com.github.anton3/kotlin-vk-api "0.14.0"]]
API ВКонтакте сгенерированное на основе схемы с исправленными ошибками c поддержкой корутин.
На текущий момент поддерживается версия VK API 5.131. Её нужно указывать в настройках LongPoll и Callback группы.
Gradle:
repositories {
jcenter()
maven(url = "https://jitpack.io")
}
dependencies {
implementation("com.github.Anton3:kotlin-vk-api:0.13.1")
}
Для начала, создайте один на всё приложение VkClientFactory
:
val apacheClient: CloseableHttpAsyncClient = defaultHttpAsyncClient()
val clientFactory: VkClientFactory = apacheClientFactory()
Создайте клиент ВК нужного типа:
val client: GroupClient = clientFactory.group(GroupToken(accessToken))
Используйте этот клиент для выполнения всех запросов, подпадающих под один и тот же лимит запросов ВК:
val wallpost: WallpostFull = client(WallGet(domain = "departureMsk"))
В конце программы стоит всё закрыть:
clientFactory.closeAndJoin()
apacheClient.close()
Замечание. Клиент учитывает ограничения ВК на запросы к API и объединяет несколько запросов в один через Execute, когда это возможно. Тип клиента зависит от прав на выполнение методов. Выполнение метода на клиенте с несовместимым токеном порождает ошибку на этапе компиляции.
При выполнении могут выбрасываться различные исключения — наследники
IOException
:
VkApiException
IOException
JsonProcessingException
IOException
Где-то на высоком уровне их следует перехватывать и обрабатывать:
while (true) {
try {
// Receive commands, make requests
} catch (e: VkApiException) {
log.warn("Request failed with code: ${e.vkError.errorCode}", e)
} catch (e: IOException) {
log.warn("Connection error: ", e)
}
}
Чтобы «проглотить» ошибки при выполнении какого-то метода, можно
воспользоваться swallow
:
val response: WallpostFull? = swallow { client(WallGet(domain = "departureMsk")) }
println(response)
Можно запросто написать расширение для VkClient<R>
, обрабатывающее ошибки
нужным вам образом:
suspend inline fun <R : MethodRequirement, T : Any> VkClient<R>.call(
method: VkMethod<T, R>
): T? = swallow { this(method) }
Примеры использования можно найти в:
// build.gradle.kts
implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.13.0")
В вашей папке resources
должен быть файл log4j2.xml
,
вот пример.
val method = VkMethod<MyResponse, MyRequirement>("wall.get", jacksonTypeRef())
method.unsafeParam("my_first_param", "foo")
method.unsafeParam("my_second_param", "bar")
val response: MyResponse = client(method)
Библиотека разбита на следующие модули:
vk-api-generator
— генератор кода запросов и ответов из JSON-схемыvk-api-core
— основная часть библиотеки, не зависящая от конкретных методов,
предоставляемых ВКvk-api-generated
— сгенерированные методы и ответы ВКvk-api-methods
— обёртка над vk-api-generated
. Исправляет сериализацию
некоторых сгенерированных классов, а также предоставляет удобный интерфейс для
таких методов, как Callback API, LongPoll API, Uploadvk-api-ktor
— привязка к Ktorvk-api-apache
— привязка к Apache AsyncHttpClient
vk-api-simple
— включает все модули и предоставляет apacheClientFactory
Т.к. оригинальная схема написана неряшливо, каких-то планов по ее поддержке не озвучено, то в проекте она хранится в следующем виде:
Основная часть библиотеки работает хорошо - уж точно намного лучше, чем
официальная либа. Расширенная поддержка методов в vk-api-methods
недоработана.
Никаких гарантий по стабильности интерфейса библиотеки на текущий момент не даётся, поэтому обязательно указывайте точную версию.
Разработка ведётся в ветке develop
. После прогона нескольких тестов,
новый функционал отправляется в master
.
Для любых ошибок или предложений заводите Issue, будем разбираться. Если есть желание заняться реализацией, то:
jitpack.io
kotlin-vk-api
develop
ветку feature-...
vk-api-base
, vk-api-core
, executors
Дополнения принимаются или в виде новых небольших патчей для JSON-схемы, или
в виде доработки vk-api-generator
.
Расширенная поддержка методов vk-api-methods
находится на ранней стадии
разработки. Многое отсутствует. Любая помощь принимается.