php audio.search ,не рабочии ссылки

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
shogun
Сообщения: 11
Зарегистрирован: 30 мар 2011, 10:27

php audio.search ,не рабочии ссылки

Сообщение shogun »

Класс:

Код: Выделить всё

<?php  class vkapi {        /**        * @var $api_secret - Секретный код приложения        */    private $api_secret;         /**         * @var $user_id - ID риложения         */    private $app_id;         /**         * @var ID пользователя         */    private $user_id;         /**         * @var $api_url - Адрес API         */    private $api_url = 'http://api.vk.com/api.php';         /**         * @var $format - Формат возращаемых данных         */    private $format;         /**         * @var mixed $test_mode - Тестовый режим приложения         */        private $test_mode = false;         /**         * Конструктор класса         * @param int$user_id         * @param int $app_id         * @param string $api_secret         * @param bool $test_mode         * @param string $format         */    public function __construct($user_id, $app_id, $api_secret, $test_mode = 1, $format = '') {        $this->user_id = $user_id;        $this->app_id = $app_id;        $this->api_secret = $api_secret;        $this->format = ($format == 'json' && function_exists('json_decode')) ? 'json' : 'xml';        if($test_mode) $this->test_mode = 1;    }         /**         * Запрос к vkontakte api         * @param string $method - Метод         * @param array $params - Параметры запроса         * @return object         */    public function query( $method, $params = false ) {        if (!$params) $params = array();        $params['api_id'] = $this->app_id;        $params['v'] = '2.0';        $params['method'] = $method;        $params['timestamp'] = time();        $params['format'] = $this->format;        $params['random'] = rand(0,10000);        $params['test_mode'] = $this->test_mode;        ksort($params);         $sig = $this->user_id;        foreach($params as $k=>$v)        {            $sig .= $k.'='.$v;        }        $sig .= $this->api_secret;         $params['sig'] = md5($sig);         return $this->request( $this->api_url.'?'.$this->params($params) );    }         /**         * Строка параметров запроса         * @param array $params - Параметры         * @return string         */    private function params($params) {        $pice = array();        foreach($params as $k=>$v) {            $pice[] = $k.'='.urlencode($v);        }        return implode('&', $pice);    }         /**         * Выполнение запроса         * @param string $query - Запрос         * @return object         */    private function request($query)    {        if(function_exists('curl_init'))        {            $ch = curl_init($query);            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);            $res = curl_exec($ch);            curl_close($ch);        }        else            $res = file_get_contents($query);         return $this->process($res);    }         /**         * Возрврат данных         * @param string $result - Результат выполнения запроса         * @return object         */    private function process($result){            return $this->format == 'json' ? json_decode($result) : simplexml_load_string($result);        }}?> 
Использую:

Код: Выделить всё

<?require_once( 'class.php' );$id=''; // ид пользователя у кого установлено приложение$idf=''; // ид приложения$key=''; // ключ приложения$api = new vkapi( $id ,$idf, $key,true, 'json'); # Проверяем передана ли строка поиска$query = isset($_GET['query']) ? trim($_GET['query']) : null;# Выводим форму поискаecho '<form action="?" method="get"><input type="text" name="query" value="'. htmlspecialchars($query) .'" /><input type="submit" name="" value="Искать" /></form>'; # Для постраничной навигации, смещение относительно первом аудиозаписи$start = isset($_GET['start']) ? abs( intval( $_GET['start'] ) ) : 0; if(!empty($query)){  $res = $api->query('audio.search', array('q' => $query,'lyrics' => 1, 'count' => 10, 'offset' => $start));  print_r($res);}?
по запросу test
получаю треки:

Код: Выделить всё

stdClass Object(    [response] => Array        (            [0] => 1334            [1] => stdClass Object                (                    [aid] => 83846784                    [owner_id] => 16243474                    [artist] => Fozzy                    [title] => The test                     [duration] => 186                    [url] => http://cs5067.vkontakte.ru/u55310896/audio/8cb540644659.mp3                    [lyrics_id] => 5314907                )             [2] => stdClass Object                (                    [aid] => 91600740                    [owner_id] => 100939120                    [artist] => Dash                    [title] => Test of the Man                     [duration] => 322                    [url] => http://cs4594.vkontakte.ru/u57709196/audio/6f1c0068f938.mp3                    [lyrics_id] => 6915366                ) // и т.д
Но url все ошибка 404.

в чем проблема?
shogun
Сообщения: 11
Зарегистрирован: 30 мар 2011, 10:27

Re: php audio.search ,не рабочии ссылки

Сообщение shogun »

хотя если посмотреть в исходном коду страницы музыку вконтакте, то ссылки одни те же, только окончание другое
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: php audio.search ,не рабочии ссылки

Сообщение Александр »

Метод audio.search работает с сервера?
Ссылка на mp3 файл генерируется в зависимости от ip адреса. У сервера и у тебя они скорее всего разные.
shogun
Сообщения: 11
Зарегистрирован: 30 мар 2011, 10:27

Re: php audio.search ,не рабочии ссылки

Сообщение shogun »

естественно на сервере, на платном хосте.
как может быть ip адрес сервера и у меня одинаковый? только если сервер это мой комп.
бред какой то.
как решить эту проблему?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: php audio.search ,не рабочии ссылки

Сообщение Александр »

shogun писал(а):как может быть ip адрес сервера и у меня одинаковый? только если сервер это мой комп.
именно так быть и может.
shogun
Сообщения: 11
Зарегистрирован: 30 мар 2011, 10:27

Re: php audio.search ,не рабочии ссылки

Сообщение shogun »

значит другие пользователи не смогут пользоваться скриптом который расположен на моем хосте,да?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: php audio.search ,не рабочии ссылки

Сообщение Александр »

shogun
Ты хочешь сделать страницу, на которой можно будет скачивать музыку с вконтакте с помощью методов апи? Забанят. Способ генерации ссылок по ip создан для того чтобы не делали ссылок на скачку.
MatrosSkin
Сообщения: 1
Зарегистрирован: 06 янв 2012, 12:09

Re: php audio.search ,не рабочии ссылки

Сообщение MatrosSkin »

Открытие пользователям возможности скачивать музыку действительно запрещено.
Но с другой стороны пользователи не смогут также слушать музыку по этим ссылкам (если например делаеш свой плеер). Выходов 2:
1. обращаться к апи и полуычать адреса в яваскрипте, тоесть на стороне клиента. Соответсвенно ссылки будут генериться под каждого пользователя.
2. организовать на сервере чтото тип перевалочной базы:
а) тянуть на сервак файл а потом отдавать клиенту;
б) делать пеернаправление потока с вконтакта клиенту.
Во втором варианте у вас увеличится трафик.

Вот есть вроде неплохой пример на пхп http://turtus.kiev.ua/2011/07/%D1%81%D0 ... D0%BE.html.
Ответить