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

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!

Вызов серверных методов (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 скрипт
  1. <?
  2. require 'vkapi.class.php';
  3.  
  4. $api_id = 1728947; // id приложения
  5. $secret_key = 'qweRtyuiop12asdFghjk'; // защищенный ключ
  6.  
  7. $VK = new vkapi($api_id, $secret_key);
  8. $resp = $VK->api('getProfiles', array('uids'=>'1,6492'));
  9.  
  10. // выводим полученные данные простым способом
  11. // не вздумайте выводить таким способом десятки пользователей! Так делают плохие кодеры! Этот способ допустим для вывода лишь небольшого количества пользователей.
  12. echo $resp['response'][0]['uid'].'<br />';
  13. echo $resp['response'][0]['first_name'].'<br />';
  14. echo $resp['response'][0]['last_name'].'<br /><br />';
  15. echo $resp['response'][1]['uid'].'<br />';
  16. echo $resp['response'][1]['first_name'].'<br />';
  17. echo $resp['response'][1]['last_name'];
  18.  
  19.  
  20. // выводим данные через цикл
  21. // в большинстве случаев, большое количество данных нужно выводить через цикл, а не вручную написав одинаковый код
  22. $count = sizeOf($resp['response']);
  23. // через цикл for
  24. for ($i=0; $i<$count; $i++) {
  25.     echo $resp['response'][$i]['uid'].' - '.$resp['response'][$i]['first_name'].' '.$resp['response'][$i]['last_name'].'<br />';
  26. }
  27.  
  28. //print_r($resp); // этот код выведет данные в формате json
  29.  
  30. ?>

В методах ВКонтакте API произошли изменения. Вместо метода getProfiles используйте users.get
В коде описаны примеры разного способа обработки полученных данных. В конкретной ситуации нужно использовать разные способы.
Если хотите быть говнокодером, то выберите любой из способов и всегда делайте только им одним.
Хотите быть хорошим программистом, тогда изучите все эти способы самостоятельно, протестируйте скорость работы разных способов http://flapps.ru/forum/topic3191.html

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


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

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

За это сообщение автора Александр поблагодарили - 3:
At1on, Nick Lisogor, ukhov
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение Sasha » 23 фев 2011, 18:24

у меня вот это пишет :
  1. 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

что делать?
Sasha

 
Сообщения: 53
Зарегистрирован: 18 дек 2010, 20:48
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 23 фев 2011, 19:07

Sasha
Хостинг http://vagonchik.com/ ? file_get_contents на хостинге разрешено?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение Sasha » 23 фев 2011, 19:11

щас посмотрю... там про него ничего ненаписано
хостинг ты правильно написал
Sasha

 
Сообщения: 53
Зарегистрирован: 18 дек 2010, 20:48
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

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

Сообщение successfully » 21 апр 2011, 02:12

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

 
Сообщения: 2
Зарегистрирован: 20 апр 2011, 10:53
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение ukhov » 21 апр 2011, 17:17

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

6492
Андрей
Р РѕРіРѕР·РѕРІ
Изображение
Аватара пользователя
ukhov
Модератор
Модератор
 
Сообщения: 1343
Зарегистрирован: 04 янв 2011, 21:19
Откуда: Санкт-Петербург
Благодарил (а): 85 раз.
Поблагодарили: 155 раз.

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

Сообщение Александр » 24 апр 2011, 14:22

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

Если у тебя основной сайт не в UTF, то могут возникнуть проблемы. Но тут уже сам придумывай решения. Использовать разные кодировки это гемор.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение chrust » 11 июн 2011, 17:19

пытаюсь воспользоваться методом secure.withdrawVotes:

  1. $VK = new vkapi($app_id, $api_secret);
  2. $resp = $VK->api('secure.withdrawVotes', array('uid'=>$viewer_id,'votes'=>$votes));


В swf получаю ответ: Error #2044: Необработанный ioError:. text=Error #2032: Ошибка потока. URL: адрес_моего_сервера
Подскажите, пожалуйста, из-за чего это может быть?
chrust

 
Сообщения: 6
Зарегистрирован: 09 июн 2011, 10:32
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 11 июн 2011, 20:24

chrust
ActionScript код какой?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение chrust » 11 июн 2011, 21:14

такой код в ActionScript
  1.         var loader:URLLoader = new URLLoader();
  2.             var request:URLRequest=new URLRequest(ServerPHP.phpURL);
  3.             request.method = URLRequestMethod.GET;
  4.            
  5.             var URLVars:URLVariables = new URLVariables();
  6.             URLVars['method'] = ServerPHP.convertGolosa; // так мой скрипт понимает, что от него требуется
  7.             URLVars['viewerId'] = viewerId;
  8.             URLVars['authKey'] = authKey;
  9.             URLVars['count'] = p_count;
  10.        
  11.             request.data = URLVars;
  12.             loader.load(request);
  13.             loader.addEventListener(Event.COMPLETE, onConvertGolosa);

я покопался немного. для формирования строки запроса с сервера использую APIServerPHPClass, который генерит строку, где сочетание &timestamp заменяется на хtamp, то есть так:
  1. api_id=000000&format=XML&method=secure.withdrawVotes&random=3596×tamp=1307811607&uid=000000&v=3.0&votes=100&sig=78f710f386518c10567ff6c145b5d0c0

вследствие чего от API контакта приходит ответ incorrect timestamp. может, в этом все дело? пробовал вручную слепить строку запроса из массива с параметрами:
  1.        foreach ($pice as $p) {
  2.             $tmp=$tmp.$p."&";
  3.         }

но результат тот же.
chrust

 
Сообщения: 6
Зарегистрирован: 09 июн 2011, 10:32
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Уроки по использованию ВКонтакте API



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron