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

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

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

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

Вызов серверных методов (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.
Sasha
Сообщения: 53
Зарегистрирован: 18 дек 2010, 20:48

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

Сообщение 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
что делать?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

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

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

Sasha
Хостинг http://vagonchik.com/ ? file_get_contents на хостинге разрешено?
Sasha
Сообщения: 53
Зарегистрирован: 18 дек 2010, 20:48

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

Сообщение Sasha »

щас посмотрю... там про него ничего ненаписано
хостинг ты правильно написал
successfully
Сообщения: 2
Зарегистрирован: 20 апр 2011, 10:53

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

Сообщение successfully »

file_get_contents - запрещено на выбранном (беспл) мною хостинге. Есть возможность обойти этот запрет? Пытался через .htaccess - сервер ругается.
Аватара пользователя
ukhov
Модератор
Модератор
Сообщения: 1343
Зарегистрирован: 04 янв 2011, 21:19

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

Сообщение ukhov »

кодировка не та
пишет
1
Павел
Дуров

6492
Андрей
Р РѕРіРѕР·РѕРІ
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

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

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

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

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

AddDefaultCharset utf-8
Если у тебя основной сайт не в UTF, то могут возникнуть проблемы. Но тут уже сам придумывай решения. Использовать разные кодировки это гемор.
chrust
Сообщения: 6
Зарегистрирован: 09 июн 2011, 10:32

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

Сообщение 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: адрес_моего_сервера
Подскажите, пожалуйста, из-за чего это может быть?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

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

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

chrust
ActionScript код какой?
chrust
Сообщения: 6
Зарегистрирован: 09 июн 2011, 10:32

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

Сообщение 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."&";        }
но результат тот же.
Ответить