Приложение для повышения рейтинга

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Приложение для повышения рейтинга

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

Приложение для повышения рейтинга
IFrame, jQuery, ВКонтакте API 3.0


В этом уроке вы узнаете как создать IFrame приложение для повышения рейтинга (метод secure.addRating).

Такое приложение не будет одобрено или проверено. Но вы можете встроить функцию повышения рейтинга в своё IFrame приложение.
У вашего приложения может быть свой уникальный дизайн, поэтому я не оформлял приложение из этого урока. Используются стандартные поля ввода и кнопки.


В уроке показано как:
- получить параметры viewer_id и auth_key
- вызвать действие при нажатии на кнопку (jQuery)
- вытащить данные из input и textarea (jQuery)
- выполнить запрос к api (метод getProfiles)
- отправить post запрос php скрипту (jQuery)
- правильно обрабатывать ответы от api сервера в php скрипте
- использовать json формат


Если вы ещё никогда не делали IFrame приложения вконтакте, советую сначала прочитать урок IFrame-приложение ВКонтакте. Вывод информации о пользователе.
Если вы не знаете какой нужен хостинг и как использовать класс APIServerPHPClass - прочтите урок Вызов серверных методов.
Если не работали с jQuery, то загляните в раздел Уроки jQuery.


Код файла index.html

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

<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>http://flapps.ru</title><script src="js/jquery-1.5.1.min.js" type="text/javascript"></script><script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script><script type="text/javascript" charset="cp1251" >$(document).ready(function(){ // когда страница загрузится    VK.init(function() {        // получаем flashVars        VK.loadParams(document.location.href);        // вытаскиваем viewer_id и auth_key из полученных переменных        var viewer_id = VK.params.viewer_id;        var auth_key = VK.params.auth_key;                 // проверка uid        $('#check_uid').click(function(){            // вытаскиваем uid из поля uid_to            var uid_to = $('#uid_to').val();            // выполняем запрос получения профиля            VK.api("getProfiles", {uids:uid_to,fields:"photo_big"}, function(data) {                 // обрабатываем полученные данные                // выводим имя и фамилию в блок user_info                $('#user_info').html('<a href="http://vkontakte.ru/id' + data.response[0].uid + '">' + data.response[0].first_name + ' ' + data.response[0].last_name + '</a>' + '<br /><img src="' + data.response[0].photo_big + '" />');            });        });                      $('#add_rate').click(function(){            // вытаскиваем uid, rate и message из полей            var uid_to = $('#uid_to').val();            var rate = $('#rate').val();            var message = $('#message').val();                // отправляем post запрос, передаём данные скрипту            $.post('http://flapps.ru/apps/addrating/addrating.php', { "viewer_id": viewer_id, "auth_key": auth_key, "uid": uid_to, "rate": rate, "message": message },                function(data){ // функция после выполнения передачи данных скрипту                    // success и error нужны для того чтобы оформить вывод сообщения. Например, чтобы выводить сообщения в разные блоки.                    if (data.success) { // если скрипт вернул success                        $('#result_flapps').html(data.success.msg);                    } else { // если скрипт вернул error                        $('#result_flapps').html(data.error.msg);                    }                }, "json");                    });          // запустим функцию "клик по кнопке проверить", чтобы сразу загрузить информацио о введенном uid. Можно её убрать.        $('#check_uid').click();    });            // подсчет необходимого количества голосов    // до 100 - по 0,6. от 100 - по 0,5.     $('#rate').keyup(function() {        var rate = parseInt($('#rate').val());        if (rate>0) {            if (rate<100) {                $('#votes').html((rate * 6*100)/1000);            } else {                $('#votes').html((rate * 5*100)/1000);            }        } else {            $('#votes').html('Ошибка');        }    }); });</script></head><body> Кому: id<input type="text" id="uid_to" value="1306422"><input type="button" id="check_uid" value="Проверить"><div id="user_info"></div><br /> На сколько: <input type="text" id="rate" value="1"> Необходимо голосов <span id="votes">0.6</span><br />Сообщение:<br /><textarea id="message" rows="3" cols="40">Рейтинг</textarea><br /><input type="button" id="add_rate" value="Повысить"> <p id="result_flapps">http://flapps.ru</div> </body></html>
Код файла addrating.php

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

<?/*     http://flapps.ru/forum/ - форум о создании приложений */header('Content-Type: text/javascript; charset=utf-8');require 'vkapi.class.php'; $api_id = '1728947';            // id приложения$secret_key = 'qwerty12345asdfgh678'; // Защищенный ключ  $auth_key  = $_POST['auth_key'];  // auth_key из FlashVars приложения$viewer_id = $_POST['viewer_id']; // id просматривающего приложение // рассчитывается ключ авторизации$real_key = md5($api_id."_".$viewer_id."_".$secret_key); if ($auth_key == $real_key){    $uid = $_POST['uid'];    $rate = $_POST['rate'];    $message = $_POST['message'];     // если uid указан верно    if (is_numeric($uid)) {            // снимаем со счета пользователя голоса        if ($rate<100) {            $votes = $rate*60;        } else {                $votes = $rate*50;            }                $VK = new vkapi($api_id, $secret_key);        $resp = $VK->api('secure.withdrawVotes', array('uid'=>$viewer_id, 'votes'=>$votes));            if ($resp['response']>0) { // голоса успешно списаны            // повышаем рейтинг            $resp = $VK->api('secure.addRating', array('uid'=>$uid, 'rate'=>$rate, 'message'=>$message));             if ($resp['response']>0) {                echo '{"success":                {                "msg":"Рейтинг повышен!"                }                }';            } else {                switch($resp[error]['error_code']) {                    case 113:                        echo '{"error":                        {                        "msg":"Неверный id пользователя!"                        }                        }';                        break;                    case 147:                        echo '{"error":                        {                        "msg":"На балансе приложения недостаточно голосов!"                        }                        }';                        break;                    default:                              echo '{"error":                        {                        "msg":"Произошла ошибка!"                        }                        }';                }            }        }        else { // голоса не списаны            switch($resp[error][error_code]) {                case 502:                    echo '{"error":                        {                        "msg":"На вашем балансе недостаточно голосов!"                        }                        }';                    break;                default:                          echo '{"error":                        {                        "msg":"Произошла ошибка! Голоса не списаны."                        }                        }';            }        }    } else { // в поле "Кому" - не число         echo '{"error":            {            "msg":"В поле «Кому» должен быть введен корректный ID!"            }            }';    }        } else    echo 'Ошибка безопасности.';?>

Несмотря на описание метода в документации
Пример ответа в формате JSON
{"response":{"rating_added":2}}
на деле, при успешном повышении рейтинга сервер api возвращает ответ:
{"response":1}


Загружаем файлы на сервер и тестируем.

Исходник http://flapps.ru/example/iframe_addrating.rar
punkpa
ЗАБАНЕН!
Сообщения: 1
Зарегистрирован: 22 мар 2011, 08:23

Re: Приложение для повышения рейтинга

Сообщение punkpa »

Спасибо)
shrek
ЗАБАНЕН!
Сообщения: 53
Зарегистрирован: 13 ноя 2010, 15:16

Re: Приложение для повышения рейтинга

Сообщение shrek »

=)
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: Приложение для повышения рейтинга

Сообщение azzzi »

# else
# echo 'Ошибка безопасности.';

это пользователю не выведется, так как ни в success ни в error этот текст не попадает
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Приложение для повышения рейтинга

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

azzzi
Да, эту часть кода можно убрать. Пользователю её выводить нет смысла, а для разработчика смысл есть. Начинающие могут пробовать это приложение и ошибиться, задав не тот защищенный ключ или вовсе не указав id своего приложения. Тогда на их вопрос "почему выводит Ошибка безопасности", будет проще ответить, чем на вопрос "почему ничего не выводит". Это же сообщение увидит человек, который попытается совершить запрос подменив id пользователя.
MDNdemon
Сообщения: 1
Зарегистрирован: 22 мар 2011, 22:44

Re: Приложение для повышения рейтинга

Сообщение MDNdemon »

У меня почему-то вообще кнопка "Повысить" не пашет
Аватара пользователя
Pavlo0a
Сообщения: 26
Зарегистрирован: 08 авг 2010, 18:25

Re: Приложение для повышения рейтинга

Сообщение Pavlo0a »

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

Re: Приложение для повышения рейтинга

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

MDNdemon
Смотри что отправляет приложение и что получает. Используй Charles.

Pavlo0a
Если будешь использовать код на какой-то вложенной странице своего приложения, то нужно передать viewer_id и auth_key.
Serge
WEB Team
WEB Team
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55

Re: Приложение для повышения рейтинга

Сообщение Serge »

А можно ли сделать что бы поднимало рейтинг автоматически? К примеру раз в сутки (понимаю, что это крон, но сам скрипт не вышел) поднимало рейтинг определенному пользователю?
И запускать не из контакта, а с сервера...
Делал так, но пишет ошибку:

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

<?php$app_id = id;$api_secret = secret; require('VkApi.class.php'); function get_url($query){    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $query);    curl_setopt($ch, CURLOPT_HEADER, 0);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_TIMEOUT, 10);    return curl_exec($ch);    curl_close($ch);};    $uid = 1;    $rate = 1;    $message = "+1 рейтинга";    $query = $api->addRating($uid, $rate, $message);        $result = new SimpleXMLElement(get_url($query));?> 
Fatal error: Call to a member function addRating() on a non-object in /home/site/site.org.ua/www/php/rating.php on line 19
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Приложение для повышения рейтинга

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

Serge
Весь скрипт, без вывода результата. На основе этого урока, а не другого кода, о котором ты почему-то решил спросить в этой теме.

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

<?require 'vkapi.class.php';$api_id = '1728947';            // id приложения$secret_key = 'qwerty12345asdfgh678';$uid = '1';$rate = '1';$message = 'http://flapps.ru';$VK = new vkapi($api_id, $secret_key);$resp = $VK->api('secure.addRating', array('uid'=>$uid, 'rate'=>$rate, 'message'=>$message));?>
Ответить