Получение данных с ВК API на другом сервере wall.get и др.
Добавлено: 28 мар 2011, 14:30
Доброе время суток ))
У меня проблема такого рода: Нужно получить данные со стены пользователя и его статус.
Я опишу свои действия (если что-то я сделал не правильно, прошу подсказать)
Создал тестовое приложение на сайте VK и добавил скрипты php класса + javascript на свой сайт например site.com
php класс вот такой
На сайте авторизуюсь через OPEN API
http://vkontakte.ru/login.php?app=айди приложения&layout=openapi&settings=16383
Передаю settings=16383 - т.е. прав с битовой маской достаточно
При авторизации сохраняются в куку:
expire=1301310750&mid=78351157&secret=b6902f944b&sid=4605ba4c90f8beada3a0b6a82cc035dc08db33c789c5fd7c0271464afc48a1&sig=6ada42f9a197fff4618f107bbd1cf704
Вызывают метод из класса getProfiles и getFriends(т.е. 'friends.get') все нормально и работает
А вот методы 'wall.get' и 'status.get' и прочие не работают пишет Unknown method passed
Почитал мол это не серверные методы и т.д.
После посмотрел тему Авторизация Desktop-приложений
и там (если я правильно понял 'wall.get' и прочее должно работать)
+
посмотрел http://flapps.ru/forum/topic2700.html
но там регулярные выражения (мудрёные для меня) выдают ошибку и у меня так и ничего не вышло. Хотя там авторизация не через OPEN API а http://vkontakte.ru/login.php?app=айди приложеня&layout=popup&type=browser&settings=16383
Есть догадка, что проблема в подписи которую я отсылаю на сервер(что чего-то там не хватает)
Подскажите как схитрить немного и получить данные со стен и статус!!!
У меня проблема такого рода: Нужно получить данные со стены пользователя и его статус.
Я опишу свои действия (если что-то я сделал не правильно, прошу подсказать)
Создал тестовое приложение на сайте VK и добавил скрипты php класса + javascript на свой сайт например site.com
php класс вот такой
Код: Выделить всё
<?class VKapi{ private $api_secret; private $api_id; private $api_idcookie; function __construct() { $this->api_secret='HkLAPKSKg5uj4yDiYL5x'; $this->api_id='айди приложения'; $this->api_idcookie='vk_app_айди приложения'; } public function is_auth() { if (!isset($_COOKIE[$this->api_idcookie])) return false; $vk_cookie = $_COOKIE[$this->api_idcookie]; if (!empty($vk_cookie)) { $cookie_data = array(); foreach (explode('&', $vk_cookie) as $item) { $item_data = explode('=', $item); $cookie_data[$item_data[0]] = $item_data[1]; } // Проверяем sig $string = sprintf("expire=%smid=%ssecret=%ssid=%s%s", $cookie_data['expire'], $cookie_data['mid'], $cookie_data['secret'], $cookie_data['sid'], $this->api_secret); if (md5($string) == $cookie_data['sig']) { // sig не подделан - возвращаем ID пользователя ВКонтакте. $this->api_secret_cookie = $cookie_data['secret']; //echo $this->api_secret_cookie; //die(); return $cookie_data['mid']; } } return false; } public function logout() { // Заменяем куку от ВКонтакте на пустую if (setcookie($this->api_idcookie, '', 0, "/", '.'.$_SERVER['HTTP_HOST'])) { return true; } return false; } function getProfiles ($uids) { $request['fields'] = 'uid,first_name,last_name,nickname,domain,sex,country,photo_big,contacts,online'; $request['uids'] = $uids; $request['method'] = 'getProfiles'; return $this->request($request); } function getFriends ($uids) { $request['fields'] = 'uid,first_name,last_name,nickname,domain,sex,country,photo_big,contacts,online'; $request['uid'] = $uids; $request['method'] = 'friends.get'; return $this->request($request); } function getStatus ($uids) { $request['uid'] = $uids; $request['method'] = 'status.get'; return $this->request_other_method($request); } function getWall ($uids) { $request['owner_id'] = $uids; $request['count'] = 10; $request['filter'] = 'all'; $request['method'] = 'wall.get'; return $this->request($request); } function request($request) { $request['random'] = rand(100000,999999); $request['timestamp'] = time(); $request['format'] = 'JSON'; $request['api_id'] = $this->api_id; $request['v'] = '3.0'; ksort($request); $str=""; foreach ($request as $key=>$value) { $str.=trim($key)."=".trim($value); } $request['sig'] = md5(trim($str.$this->api_secret)); $q = http_build_query($request); $result = json_decode(file_get_contents("http://api.vkontakte.ru/api.php?".$q),TRUE); return $result; }} ?>
http://vkontakte.ru/login.php?app=айди приложения&layout=openapi&settings=16383
Передаю settings=16383 - т.е. прав с битовой маской достаточно
При авторизации сохраняются в куку:
expire=1301310750&mid=78351157&secret=b6902f944b&sid=4605ba4c90f8beada3a0b6a82cc035dc08db33c789c5fd7c0271464afc48a1&sig=6ada42f9a197fff4618f107bbd1cf704
Вызывают метод из класса getProfiles и getFriends(т.е. 'friends.get') все нормально и работает
А вот методы 'wall.get' и 'status.get' и прочие не работают пишет Unknown method passed
Почитал мол это не серверные методы и т.д.
После посмотрел тему Авторизация Desktop-приложений
и там (если я правильно понял 'wall.get' и прочее должно работать)
+
посмотрел http://flapps.ru/forum/topic2700.html
но там регулярные выражения (мудрёные для меня) выдают ошибку и у меня так и ничего не вышло. Хотя там авторизация не через OPEN API а http://vkontakte.ru/login.php?app=айди приложеня&layout=popup&type=browser&settings=16383
Есть догадка, что проблема в подписи которую я отсылаю на сервер(что чего-то там не хватает)
Подскажите как схитрить немного и получить данные со стен и статус!!!