Страница 1 из 10

Вызов серверных методов (APIServerPHPClass)

Добавлено: 05 фев 2011, 15:35
Александр
Вызов серверных методов (APIServerPHPClass)
PHP

В этом уроке показан пример работы с классом APIServerPHPClass. Вы узнаете как обращаться к серверным методам ВКонтакте API с помощью этого класса.

UPDATE 2013 Сейчас большинство методов которые можно вызвать с сервера без авторизации, можно вызвать без дополнительной библиотеки, просто отправив GET или POST запрос. Подробнее http://vk.com/dev/api_requests
Использовать APIServerPHPClass есть смысл при вызове методов secure.*

Это приложение будет получать профиль пользователей методом getProfiles.

Для взаимодействия с серверными методами api, необходим хостинг с поддержкой php и curl.
Проверка поддержки cURL на вашем хостинге.


1. Скачиваем APIServerPHPClass.zip
http://vkontakte.ru/source/APIServerPHPClass.zip
Файл vkapi.class.php нужно скопировать в папку со своим скриптом.

2. Создаём php скрипт

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

<?require 'vkapi.class.php'; $api_id = 1728947; // id приложения$secret_key = 'qweRtyuiop12asdFghjk'; // защищенный ключ $VK = new vkapi($api_id, $secret_key);$resp = $VK->api('getProfiles', array('uids'=>'1,6492')); // выводим полученные данные простым способом// не вздумайте выводить таким способом десятки пользователей! Так делают плохие кодеры! Этот способ допустим для вывода лишь небольшого количества пользователей.echo $resp['response'][0]['uid'].'<br />';echo $resp['response'][0]['first_name'].'<br />';echo $resp['response'][0]['last_name'].'<br /><br />';echo $resp['response'][1]['uid'].'<br />';echo $resp['response'][1]['first_name'].'<br />';echo $resp['response'][1]['last_name'];  // выводим данные через цикл// в большинстве случаев, большое количество данных нужно выводить через цикл, а не вручную написав одинаковый код$count = sizeOf($resp['response']);// через цикл forfor ($i=0; $i<$count; $i++) {    echo $resp['response'][$i]['uid'].' - '.$resp['response'][$i]['first_name'].' '.$resp['response'][$i]['last_name'].'<br />';} //print_r($resp); // этот код выведет данные в формате json ?>
В методах ВКонтакте API произошли изменения. Вместо метода getProfiles используйте users.get
В коде описаны примеры разного способа обработки полученных данных. В конкретной ситуации нужно использовать разные способы.
Если хотите быть говнокодером, то выберите любой из способов и всегда делайте только им одним.
Хотите быть хорошим программистом, тогда изучите все эти способы самостоятельно, протестируйте скорость работы разных способов http://flapps.ru/forum/topic3191.html

3. Загружаем на сервер и тестируем
На странице должны появиться данные о пользователях с id 1 и 6492.


Другие серверные методы ВКонтакте API используются аналогично.
После получения данных, делайте их вывод (если не знаете что можете получить) и обрабатывайте.

ВАЖНО! Не все методы можно выполнять с сервера! Работают все secure.* методы и некоторые другие клиентские методы, например getProfiles.

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 23 фев 2011, 18:24
Sasha
у меня вот это пишет :

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

Warning: file_get_contents(http://api.vk.com/api.php?api_id=2180076&format=json&method=getProfiles&random=1755&timestamp=1298473307&uids=82181093&v=3.0&sig=806766e2f2f7b5372613882d553a462a) [function.file-get-contents]: failed to open stream: Connection refused in /www/rxfly.net/v/b/vb2008/home/site/VK/vkapi.class.php on line 40
что делать?

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 23 фев 2011, 19:07
Александр
Sasha
Хостинг http://vagonchik.com/ ? file_get_contents на хостинге разрешено?

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 23 фев 2011, 19:11
Sasha
щас посмотрю... там про него ничего ненаписано
хостинг ты правильно написал

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 21 апр 2011, 02:12
successfully
file_get_contents - запрещено на выбранном (беспл) мною хостинге. Есть возможность обойти этот запрет? Пытался через .htaccess - сервер ругается.

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 21 апр 2011, 17:17
ukhov
кодировка не та
пишет
1
Павел
Дуров

6492
Андрей
Р РѕРіРѕР·РѕРІ

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 24 апр 2011, 14:22
Александр
ukhov
Кодировка файла должна быть UTF-8 без BOM.
Если твой сервер по умолчанию анстроен на другую кодировку, то напиши в .htaccess

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

AddDefaultCharset utf-8
Если у тебя основной сайт не в UTF, то могут возникнуть проблемы. Но тут уже сам придумывай решения. Использовать разные кодировки это гемор.

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 11 июн 2011, 17:19
chrust
пытаюсь воспользоваться методом secure.withdrawVotes:

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

$VK = new vkapi($app_id, $api_secret);$resp = $VK->api('secure.withdrawVotes', array('uid'=>$viewer_id,'votes'=>$votes));
В swf получаю ответ: Error #2044: Необработанный ioError:. text=Error #2032: Ошибка потока. URL: адрес_моего_сервера
Подскажите, пожалуйста, из-за чего это может быть?

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 11 июн 2011, 20:24
Александр
chrust
ActionScript код какой?

Re: Вызов серверных методов (APIServerPHPClass)

Добавлено: 11 июн 2011, 21:14
chrust
такой код в ActionScript

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

        var loader:URLLoader = new URLLoader();            var request:URLRequest=new URLRequest(ServerPHP.phpURL);            request.method = URLRequestMethod.GET;                        var URLVars:URLVariables = new URLVariables();            URLVars['method'] = ServerPHP.convertGolosa; // так мой скрипт понимает, что от него требуется            URLVars['viewerId'] = viewerId;            URLVars['authKey'] = authKey;            URLVars['count'] = p_count;                    request.data = URLVars;            loader.load(request);            loader.addEventListener(Event.COMPLETE, onConvertGolosa);
я покопался немного. для формирования строки запроса с сервера использую APIServerPHPClass, который генерит строку, где сочетание &timestamp заменяется на хtamp, то есть так:

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

api_id=000000&format=XML&method=secure.withdrawVotes&random=3596×tamp=1307811607&uid=000000&v=3.0&votes=100&sig=78f710f386518c10567ff6c145b5d0c0
вследствие чего от API контакта приходит ответ incorrect timestamp. может, в этом все дело? пробовал вручную слепить строку запроса из массива с параметрами:

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

        foreach ($pice as $p) {            $tmp=$tmp.$p."&";        }
но результат тот же.