Пятница , 19 Апрель 2024
ДомойПубликацииphp: поиск текста песни с использованием api vkontakte

php: поиск текста песни с использованием api vkontakte

vkontakte api

после того, как мы создали простой класс для работе с сервисом 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 нужно сказать огромное спасибо. им удалось создать, пожалуй, одну из простейший систем взаимодействия. поэтому советую в обязательном порядке ознакомиться со всеми методами.

удачи

Рейтинг: 0

Автор публикации

2 070
не в сети 12 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

2 комментария

  1. пытаюсь реализовать всё в точности так же, юзаю ваш класс, но у меня не выходит, приложение выдает Incorrect signature: iframe\/flash authorization

    можете подсказать как у вас получилось реализовать такое ?

    Рейтинг: 0
    • что же, всё меняется, и api тоже подвержен этому процессу smile
      после выхода api версии 3.0 работать приложения должны новым способом. всё, что было создано ранее, остаётся и продолжить работать. в частности, по моему старому приложению запросы проходят на раз. но уже при создании нового нельзя получить секрет; по крайней мере, это исходя из того, что помню (а помню, что секрет раза в 2 короче указанного параметра «Защищенный ключ»).
      попробуйте посмотреть в сторону сюда, возможно, натолкнёт на мысль, в какую сторону копать smile

      Рейтинг: 0

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять