Работать с API ВКонтакте доводилось многим из нас, и каждый может сказать: работать с ним напрямую неудобно. Разумеется, было написано множество библиотек, предоставляющих удобный интерфейс работы с ним. Их можно и даже нужно использовать для облегчения работы и ускорения разработки. Сегодня tproger представляет подборку библиотек, набравших на GitHub больше всего звездочек и форков, для почти всех самых популярных ныне языков.
Java
Недавно Вконтакте выпустили официальный SDK для работы с API средствами Java. Страница проекта на GitHub содержит множество примеров, вот один из них, для публикации фотографии на странице пользователя:
InTouch — кроссплатформенная библиотека для С#, которая весьма активно развивается. На момент публикации заявлена полная совместимость с версией 5.57 VK API. Вот пример работы с библиотекой:
var clientId = 12345; // API client Id
var clientSecret = "super_secret"; // API client secret
var client = new InTouch(clientId, clientSecret);
// Authorization works only in Windows (and WinPhone) Store Apps
// otherwise you'll need to set received "access_token" manually
// using SetSessionData method.
await client.Authorize();
// Gets a list of a user's friends.
var friends = await client.Friends.Get();
if (friends.IsError == false)
{
ShowFriendsList(friends.Data.Items.Where(friend => friend.Online));
}
client.Dispose();
Или даже короче:
using (var client = new InTouch(12345, "super_secret"))
{
await client.Authorize();
var friends = await client.Friends.Get();
// ...
}
Node.js
Node-vkapi — современная библиотека для JavaScript, основанная на промисах. Она доступна так же в npm:
npm install node-vkapi --only=prod --save
Вот пример кода, который публикует текст на стену пользователя с помощью node-vkapi:
VK API Lib — небольшая библиотека для работы API, написанная на чистом C++. Из зависимостей требуется только Curl. Библиотека предоставляет базовый класс VK::Client с методами авторизации и выполнения запросов к API.
На основе его вы можете создавать свои классы для работы с разделами. В примере приведен класс VK::Messages. Базовый пример использования:
В настоящее время библиотека достаточно активно развивается, однако до этого в её разработке был перерыв примерно на год. Всегда хочется использовать актуальные инструменты, поэтому стоит упомянуть и другую библиотеку для Python. Вот как выглядит загрузка фотографии на сервер с её помощью (комментарии сохранены):
import vk_api
def main():
""" Пример: загрузка фото """
login, password = 'python@vk.com', 'mypassword'
vk_session = vk_api.VkApi(login, password)
try:
vk_session.authorization()
except vk_api.AuthorizationError as error_msg:
print(error_msg)
return
"""
В VkUpload реализованы методы загрузки файлов в ВК.
(Не все, если что-то понадобится - могу дописать)
"""
upload = vk_api.VkUpload(vk_session)
photo = upload.photo( # Подставьте свои данные
'D:/downloads/tube.jpg',
album_id=200851098,
group_id=74030368
)
vk_photo_url = 'https://vk.com/photo{}_{}'.format(
photo[0]['owner_id'], photo[0]['id']
)
print(photo, '\nLink: ', vk_photo_url)
if __name__ == '__main__':
main()
PHP
Библиотека на PHP, использующая, по словам автора, «сахалинские технологии», чтобы облегчить труд разработчика. Написана в ООП-стиле. Одна из самых крутых ее фич — генерация на основе запроса на PHP готового кода для специального метода ВК execute.
vkontakte_api — ruby-адаптер для ВКонтакте API. Он позволяет вызывать методы API, загружать файлы на сервера ВКонтакте, а также поддерживает все 3 доступных способа авторизации (при этом позволяя использовать стороннее решение).
Работать с ним можно, например, так:
# создаем клиент
@vk = VkontakteApi::Client.new
# и вызываем методы API
@vk.users.get(uid: 1)
# в ruby принято использовать snake_case в названиях методов,
# поэтому likes.getList становится likes.get_list
@vk.likes.get_list
# также названия методов, которые возвращают '1' или '0',
# заканчиваются на '?', а возвращаемые значения приводятся
# к true или false
@vk.is_app_user? # => false
# если ВКонтакте ожидает получить параметр в виде списка,
# разделенного запятыми, то его можно передать массивом
users = @vk.users.get(uids: [1, 2, 3])
# большинство методов возвращает структуры Hashie::Mash
# и массивы из них
users.first.uid # => 1
users.first.first_name # => "Павел"
users.first.last_name # => "Дуров"
# если метод, возвращающий массив, вызывается с блоком,
# то блок будет выполнен для каждого элемента,
# и метод вернет обработанный массив
fields = [:first_name, :last_name, :screen_name]
@vk.friends.get(uid: 2, fields: fields) do |friend|
"#{friend.first_name} '#{friend.screen_name}' #{friend.last_name}"
end
# => ["Павел 'durov' Дуров"]
Perl
Простенькая, полностью асинхронная библиотека AnyEvent::VK, выполняющая все запросы по https. По сути является клиентом. Автор рекомендует использовать Async::Chain для комбинирования вложенных колбеков.
use AnyEvent;
use AnyEvent::VK;
use Data::Dumper;
my $vk = AnyEvent::VK->new(
app_id => 'Your APP ID',
email => 'Email/Mobile of user',
password => 'User Password',
scope => 'Application permissions',
);
# or
my $vk = AnyEvent::VK->new(
app_id => 'Your APP ID',
email => 'Email/Mobile of user',
password => 'User Password',
scope => 'Application permissions',
token => 'Your access_token',
expires => 'Token expires timestamp',
user_id => 'user_id',
);
my $cv = AE::cv; $cv->begin;
$vk->auth(sub {
my $success = shift;
if ($success) {
my ($token, $expires_in, $user_id) = @_;
$vk->request('users.get', {
user_ids => '1',
fields => 'bdate,sex,city,verified',
}, sub {
my $response = shift;
if ($response) {
my $meta = shift;
say Dumper($response);
} else {
my $meta = shift;
warn 'Request failed';
say Dumper($meta);
}
$cv->end;
});
} else {
my ($stage, $headers, $body, $cookie) = @_;
warn 'Auth failed';
say Dumper(@_);
}
$cv->end;
});
$cv->recv;
Для мобильной разработки
Android (Java)
Еще одна официальная библиотека, на этот раз — для Android. Написана на Java и позволяет сильно упростить работу с API ВКонтакте из этого языка.
Пример отправки запроса:
request.executeWithListener(new VKRequestListener() {
@Override
public void onComplete(VKResponse response) {
//Do complete stuff
}
@Override
public void onError(VKError error) {
//Do error stuff
}
@Override
public void onProgress(VKRequest.VKProgressType progressType,
long bytesLoaded,
long bytesTotal)
{
//I don't really believe in progress
}
@Override
public void attemptFailed(VKRequest request, int attemptNumber, int totalAttempts) {
//More luck next time
}
});
Windows Phone (C#)
Последняя в этом списке официальная разработка: написанная на C# базовая библиотека для разработки на WP, похожая по функциональности на свои аналоги под Android и iOS.
Отправка запроса на список друзей:
private void GetUserInfoButton_Click(object sender, RoutedEventArgs e)
{
VKRequest.Dispatch<List<VKUser>>(
new VKRequestParameters(
"users.get",
"fields", "photo_200, city, country"),
(res) =>
{
if (res.ResultCode == VKResultCode.Succeeded)
{
VKExecute.ExecuteOnUIThread(() =>
{
var user = res.Data[0];
userImage.Source = new BitmapImage(new Uri(user.photo_200, UriKind.Absolute));
userInfo.Text = user.first_name + " " + user.last_name;
});
}
});
}
iOS (Objective C)
Официальная библиотека от ВКонтакте, предназначенная для написания приложений под iOS. Написана на Objective-C.
На Github есть библиотека и для этого языка — vkrs. Она не слишком активно развивается, но это уже хоть что-то. Вот так она выглядит в деле:
extern crate vkrs;
use std::{env, io};
use vkrs::*;
fn main() {
let api = api::Client::new();
let oauth = api.auth(
env::var("VK_APP_ID").unwrap(),
env::var("VK_APP_SECRET").unwrap());
let auth_uri = oauth.auth_uri(auth::Permission::Audio).unwrap();
// Or if you want to get permissions for specific request:
// let auth_uri = oauth.auth_uri_for::<audio::Search>();
println!("Go to {} and enter code below...", auth_uri);
let inp = io::stdin();
let code = {
let mut buf = String::new();
inp.read_line(&mut buf).unwrap();
buf
};
// You may want to save this token for future use to avoid asking user
// to authorize the app on each run.
let token = oauth.request_token(code.trim()).unwrap();
// The access token is JSON serializable with serde, so you can do it this way:
// File::create(TOKEN_FILE).ok().map(|mut f| serde_json::to_writer(&mut f, &token).ok()).unwrap();
//
// And then you can load it again:
// let token: auth::AccessToken = File::open(TOKEN_FILE).ok().and_then(|mut f| serde_json::from_reader(&mut f).ok()).unwrap();
let songs = api.get(Some(&token),
audio::Search::new()
.q("Poets Of The Fall")
.performer_only(true)
.count(200))
.unwrap();
for song in &songs.items {
println!("{:?}", song);
}
}
Golang
Как ни странно, была написана обёртка для VK API и на языке Go. Так же, как и остальные, она доступна на Github. Hello World на ней выглядит так:
package main
import (
"github.com/urShadow/go-vk-api"
"log"
"strconv"
)
func main() {
api := vk.New("ru")
// set http proxy
//api.Proxy = "localhost:8080"
err := api.Init("TOKEN")
if err != nil {
log.Fatalln(err)
}
api.OnNewMessage(func(msg *vk.LPMessage) {
if msg.Flags&vk.FlagMessageOutBox == 0 {
if msg.Text == "/hello" {
api.Messages.Send(vk.RequestParams{
"peer_id": strconv.FormatInt(msg.FromID, 10),
"message": "Hello!",
"forward_messages": strconv.FormatInt(msg.ID, 10),
})
}
}
})
api.RunLongPoll()
}
Если для какого-либо языка вы знаете более актуальную или функциональную библиотеку — пишите в комментарии, мы обязательно обновим статью.
Энтузиасты сравнили производительность Python 3.13 с Python 3.12, выявив ускорение до 61% в асинхронных задачах на AMD Ryzen 7000 и 51% в SSL-запросах на Intel Core 13-го поколения
По данным отчета «Octoverse 2024», Python обошел JavaScript и занял первое место среди языков программирования на GitHub благодаря своей универсальности и широкому применению в анализе данных, веб-разработке и искусственном интеллекте
Сегодня хочу поговорить про Django. Django — замечательный фреймворк. А еще крайне популярный, его часто осваивают новички и используют в своих проектах. На самом деле у Django есть и несколько минусов, а точнее нюансов, на которые важно обращать внимание и о которых важно знать, приступая к разработке.