после того, как мы создали простой класс для работе с сервисом vkontakte api, неплохо бы заиметь небольшой пример, дабы в общих чертах понять принцип взаимодействия с крупнейшей отечественной соц-сетью. в принципе, предыдущая статья содержит небольшой пример. но, что называется, для закрепления материала, предлагаю чуть более сложный пример. это будет простейшая реализация поиска текстов песен.
итак, непосредственно в самом api нет метода поиска текстов песен, поэтому основная сложность заключается именно в двухфазном запросе: сначала получаем описания аудиозаписей (метод audio.search). если в записи содержится элемент lyrics_id (а в рассматриваемом случае он содержится, т. к. при формировании запроса задаётся параметр lyrics), вторым запросом к методу audio.getLyrics можно вытащить текст.
дабы не томить долго, привожу листинг скрипта, который получился довольно простым:
<?php
header('Content-Type:text/html;charset=utf-8');
// если форма
if (isset($_GET['q'])) {
// подключение класса для работы с API VKontakte
include_once 'cvk_api.php';
// массив с параметрами для запроса методов API
$params = array();
// http://vkontakte.ru/developers.php?oid=-1&p=audio.search
$params['q'] = $_GET['q'];
$params['lyrics'] = 1; // только со словами
$params['sort'] = 1; // сортировать по длительности
$params['count'] = 1; // кол-во возвращаемых записей
$params['format'] = 'JSON'; // формат ответа
$params['test_mode']= 1; // тестовый режим
// вызов метода поиска мелодий
$arr = cvk_api::get('audio.search', $params);
if (FALSE === $arr) {
$error = cvk_api::$error;
} else if (empty($arr['response'][1]['lyrics_id'])) {
$error = 'ничего не найдено';
} else {
$lyrics_id = $arr['response'][1]['lyrics_id'];
// получить текст песни
$params = array();
// http://vkontakte.ru/developers.php?oid=-1&p=audio.getLyrics
$params['lyrics_id'] = $lyrics_id; // id текста песни
$params['format'] = 'JSON';
$params['test_mode'] = 1;
$arr = cvk_api::get('audio.getLyrics', $params);
if ( ! empty($arr['response']['text']) ) {
$lyrics = $arr['response']['text'];
} else {
$error = 'текст не получен';
}
}
}
if (empty($_GET['q'])) $_GET['q'] = 'арда ради звезд';
else $_GET['q'] = htmlspecialchars($_GET['q']);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Поиск mp3</title>
</head>
<body>
<form action="" method="get">
<p>Что искать:
<input type="text" name="q" maxlength="60" size="60" value="<?php
echo $_GET['q']; ?>"> <input type="submit" value="Искать"></p>
<?php if (isset($error)): ?>
<p><em>Ошибка: <?php echo $error; ?></em></p>
<?php else:
if (isset($lyrics)) echo '<div>' . nl2br($lyrics) . '</div>';
endif; ?>
</form>
</body>
</html>
из минусов нужно отметить следующие особенности:
- не всегда по запросу будет находиться именно то, что нужно. данный аспект обусловлен, прежде всего, системой сортировки самого сервиса. в представленном скрипте используется лишь первый полученный результат;
- получаемые тексты порой содержат всякий хлам. за это ответственны пользователи, загружающие песни;
- отсутствие проверок на время последнего доступа к серверу в контакте. в случае более 3 запросов в секунду сервер начнёт возвращать ошибку, пока не выйдет время таймаута. т. е. для довольно посещаемых проектов скрипт не подойдёт.
может возникнуть вопрос: а что же за проект можно построить на базе данного скрипта? например, это может быть самонаполняемая система текстов песен. для этого при запросе можно получать не 1, а 20 записей (параметр $params[‘count’]). далее в таблицу записываются идентификаторы текстов. после чего для каждого идентификатора происходит получение текста песни (с этим может справится отдельный скрипт, который будет запускаться по крону ежеминутно и обрабатывать по 10-20 записей). после этого пользователям предлагается просмотр и оценка лирики (отрицательные оценки постепенно «топят» некачественные тексты, а положительные, соответственно, делают с точностью до наоборот).
в любом случае, разработчикам api нужно сказать огромное спасибо. им удалось создать, пожалуй, одну из простейший систем взаимодействия. поэтому советую в обязательном порядке ознакомиться со всеми методами.
удачи
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
пытаюсь реализовать всё в точности так же, юзаю ваш класс, но у меня не выходит, приложение выдает Incorrect signature: iframe\/flash authorization
можете подсказать как у вас получилось реализовать такое ?
что же, всё меняется, и api тоже подвержен этому процессу
после выхода api версии 3.0 работать приложения должны новым способом. всё, что было создано ранее, остаётся и продолжить работать. в частности, по моему старому приложению запросы проходят на раз. но уже при создании нового нельзя получить секрет; по крайней мере, это исходя из того, что помню (а помню, что секрет раза в 2 короче указанного параметра «Защищенный ключ»).
попробуйте посмотреть в сторону сюда, возможно, натолкнёт на мысль, в какую сторону копать