05.12.2010 12:24
RANUX — Библиотека доступа к пользовательским API сайта ВКонтакте.
Не так давно, пару месяцев назад, появилась у меня идея сдирать получать информацию о друзьях с сайта ВКонтакте. Немного разобравшись с api начал искать подходящую либу на питоне. Как оказалось, к сожалению всё что я нашёл, это либы которые реализовывали серверный доступ и я решил написать на коленке свою либу PyVKApi:) Буду рад комментариям) и так поехали.Скачиваем PyVKApi.
Заходим в наш любимый интерпретатор python и пишем следующие строки:
1 |
from pyvkapi import PyVkApi
|
Естественно email, password, uid и api_id вы указываете свои.
Про api читаем Описание API функций ВКонтаке и не забудьте поставить: pip install simplejson
На базе PyVKApi я написал программу VK Audio Grabber в качестве примера использования. Скачать можете там же, а инструкцию по установке почитать у меня на сайте httpbots.com
Желаю всем приятного пирсинга парсинга и граббинга :)))

+ 1 -
тоже писал на питоне для выдергивания ссылок на музыку вконтакте. потом переписал на qt/c++, работать стало гораздо быстрее :)
переписал на qt/c++, работать стало гораздо быстрее
Странно,почему же?.. %)
Посмотрел VK Audio Grabber. Недостаток - необходимость логиниться и добавлять приложение. Метод audio.get может работать без логина, что не требует лишних телодвижений для начала работы с программой, для этого нужно передавать параметр test_mode равный 1. Не вникал в код, загрузка записи происходит в отдельном потоке?
видимо, убрали из документации, мб скоро и работать не будет, но пока все ок, моя плеер для вконтакта нормально работает. вот код получения списка ссылок на музыку:
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);
}
Если не знаете qt, то QMap - словарь, в котором содержатся параметры, которые нужно передать. Все точно также, только не нужен sid, и передаем test_mode. Так как sid не нужен, то и логиниться не надо.
Прикольно, плюсанул. Только вот то как код оформлен люто не понравилось.
После питона с его pep8 любой сишный код "оформлен" как го^W^W не по нраву (=
С недостатками согласен, в следующем релизе можно попробовать учесть.
Я бы с радостью вбил бы данные desktop приложения, но надо чтобы пользователь мог его добавлять к себе на страницу, а это возможно только с разрешения администрации ВКонтакте.
Да, загрузка идёт в отдельном потоке, иначе интерфейс бы не реагировал ))
Я бы с радостью вбил бы данные desktop приложения, но надо чтобы пользователь мог его добавлять к себе на страницу, а это возможно только с разрешения администрации ВКонтакте.
Не вникал в код, загрузка записи происходит в отдельном потоке?
Да, загрузка идёт в отдельном потоке, иначе интерфейс бы не реагировал ))
А почему call, а не __call__? Почему params, а не *params?
Или даже **params:
vkapi.call(method="friends.get", fields='photo_big')
Или даже **params:
vkapi.call(method="friends.get", fields='photo_big')