05.12.2010 12:24

RANUXБиблиотека доступа к пользовательским API сайта ВКонтакте.

Не так давно, пару месяцев назад, появилась у меня идея сдирать получать информацию о друзьях с сайта ВКонтакте. Немного разобравшись с api начал искать подходящую либу на питоне. Как оказалось, к сожалению всё что я нашёл, это либы которые реализовывали серверный доступ и я решил написать на коленке свою либу PyVKApi:) Буду рад комментариям) и так поехали.

Скачиваем PyVKApi.
Заходим в наш любимый интерпретатор python и пишем следующие строки:
1
2
3
4
from pyvkapi import  PyVkApi
vkapi = PyVkApi(email='test@test.com', password='dfdfdf', uid='1587648', api_id='2006539')
from pprint import pprint
pprint(vkapi.call(<'method=friends.get','fields=photo_big'>))


Естественно email, password, uid и api_id вы указываете свои.
Про api читаем Описание API функций ВКонтаке и не забудьте поставить: pip install simplejson
На базе PyVKApi я написал программу VK Audio Grabber в качестве примера использования. Скачать можете там же, а инструкцию по установке почитать у меня на сайте httpbots.com
Желаю всем приятного пирсинга парсинга и граббинга :)))


Тэги: api python pyvkapi vkapi vkontakte вконтакте
+ 8 -
Похожие Поделиться

leonike 05.12.2010 12:36 #
тоже писал на питоне для выдергивания ссылок на музыку вконтакте. потом переписал на qt/c++, работать стало гораздо быстрее :)
derfenix 05.12.2010 12:37 #
переписал на qt/c++, работать стало гораздо быстрее

Странно,почему же?.. %)
digiwhite 05.12.2010 14:19 #
:)))
Midler 05.12.2010 21:33 #
Итс э мэджик!
inst 07.12.2010 17:15 #
а писали для себя или в сети можно скачать?
leonike 05.12.2010 13:23 #
Посмотрел VK Audio Grabber. Недостаток - необходимость логиниться и добавлять приложение. Метод audio.get может работать без логина, что не требует лишних телодвижений для начала работы с программой, для этого нужно передавать параметр test_mode равный 1. Не вникал в код, загрузка записи происходит в отдельном потоке?
RANUX 05.12.2010 13:44 #
А где по подробнее можно про test_mode почитать?
leonike 05.12.2010 13:50 #
видимо, убрали из документации, мб скоро и работать не будет, но пока все ок, моя плеер для вконтакта нормально работает. вот код получения списка ссылок на музыку:
void MainWindow::audioSearch()
{
QCursor cursor;
cursor.setShape(Qt::WaitCursor);
QString text = ui->lineEdit->text();
if (text.isEmpty())
return;
int count = m_count;
int mid = 00000000; //тут ваш mid
QString sig_src = QString::number(mid);
QMap<QString, QString> params;
params<"method"> = "audio.search";
params<"v"> = "3.0";
params<"api_id"> = "1961846";
params<"q"> = text;
params<"format"> = "JSON";
params<"count"> = QString::number(count);
params<"test_mode"> = "1";
QStringList keys = params.keys();
keys.sort();
foreach(QString key, keys) {
sig_src = QString("%1%2=%3").arg(sig_src).arg(key).arg(params);
}
QByteArray n_sig_src;
n_sig_src.append(sig_src);
QByteArray sig = QCryptographicHash::hash(n_sig_src, QCryptographicHash::Md5).toHex();
params<"sig"> = sig;
keys = params.keys();
QString url = QString("http://api.vkontakte.ru/api.php?%1=%2").arg(keys.at(0)).arg(params);
for(int i = 1; i < keys.length(); i++) {
url = QString("%1&%2=%3").arg(url).arg(keys.at(i)).arg(params);
}
QNetworkRequest request(url);
m_reply = m_manager->get(request);
cursor.setShape(Qt::ArrowCursor);
}
leonike 05.12.2010 13:55 #
Если не знаете qt, то QMap - словарь, в котором содержатся параметры, которые нужно передать. Все точно также, только не нужен sid, и передаем test_mode. Так как sid не нужен, то и логиниться не надо.
leonike 05.12.2010 14:03 #
вот так набыдлокодил :)
digiwhite 05.12.2010 14:20 #
Прикольно, плюсанул. Только вот то как код оформлен люто не понравилось.
antigluk 05.12.2010 15:30 #
K&R как никак)
wiz 05.12.2010 15:54 #
А своих глаз нету чтоль? Видно же, что нечитабельная портянка...
antigluk 05.12.2010 22:08 #
Как по мне то всё вполне читабельно..
wiz 05.12.2010 15:53 #
После питона с его pep8 любой сишный код "оформлен" как го^W^W не по нраву (=
RANUX 05.12.2010 13:37 #
С недостатками согласен, в следующем релизе можно попробовать учесть.
Я бы с радостью вбил бы данные desktop приложения, но надо чтобы пользователь мог его добавлять к себе на страницу, а это возможно только с разрешения администрации ВКонтакте.
Не вникал в код, загрузка записи происходит в отдельном потоке?

Да, загрузка идёт в отдельном потоке, иначе интерфейс бы не реагировал ))
wiz 05.12.2010 15:58 #
А почему call, а не __call__? Почему params, а не *params?

Или даже **params:

vkapi.call(method="friends.get", fields='photo_big')
wiz 05.12.2010 15:59 #
ой... vkapi(whatever=...)
RANUX 07.12.2010 22:14 #
Всем спасибо за комментарии:) Буду шлифовать и улучшать.