IFRAME Статистика. Использование getProfile

Готовые уроки IFrame + ВКонтакте API
Ответить
Аватара пользователя
alexei
Разработчик
Разработчик
Сообщения: 836
Зарегистрирован: 21 янв 2010, 19:44

IFRAME Статистика. Использование getProfile

Сообщение alexei »

Тут показано:
1) Получение данных с сервера в IFRAME.
2) Обработка ошибки.
3) Хранение данных на страницы.
4) Определение адреса авторизированного контакта и генерация ссылки.
5) Арифметические операции
6) Работа со строками.
7) Работа с удаленными пользователями.
Насчет последнего, удаленные пользователи не отображаются методами API, из-за этого часто бывают ошибки.

Прокомментировал основные моменты. Возможны ошибки, код не проверял, но должен работать правильно.

Все вопросы задавайте.

Пример работающего приложения: http://vkontakte.ru/app1865531#stats

Сервер возвращает статистику вида:

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

{"response":[{"uid":"29730325","allnames":"27502","falsenames":"4009"},{"uid":"18308721","allnames":"17777","falsenames":"641"},{"uid":"7562680","allnames":"17111","falsenames":"1511"},{"uid":"5057680","allnames":"8504","falsenames":"39"},{"uid":"11590665","allnames":"7700","falsenames":"191"},{"uid":"59303225","allnames":"7031","falsenames":"178"}, ... ,{"uid":"55904731","allnames":"1212","falsenames":"152"}],"answer":"100"}
Подобное реализуется без проблем. На PHP я на пишу, если будет желание дам код на ASP.net.

HTML страницы
 код

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

<head>    <title></title>    <link href="http://vkontakte.ru/css/admin2.css?7" rel="stylesheet" type="text/css" />    <link href="http://vkontakte.ru/css/rustyle.css?75" rel="stylesheet" type="text/css" />    <link rel="stylesheet" href="http://vkontakte.ru/css/wiki.css?15" type="text/css" />    <script type="text/javascript" src="jquery-1.4.2.min.js"></script>    <script type="text/javascript" src="http://vkontakte.ru/js/common.js"></script>    <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>     <script type="text/javascript" charset="cp1251">        var progressLine = '<div style="padding:5px;text-align: center"><img valign="middle" src="/images/upload.gif"></div>';        $(document).ready(function () {            VK.init(function () {                var parts = document.location.search.substr(1).split("&");                var flashVars = {}, curr;                for (i = 0; i < parts.length; i++) {                    curr = parts[i].split('=');                    flashVars[curr[0]] = curr[1];                }                $("#viewerid").val(flashVars['viewer_id']); //хранение данных                $("#authkey").val(flashVars['auth_key']);                $("#apiurl").val(flashVars['api_url']);                Stats();            });        });         function Stats() {            var uid = new Array(100);            var viewerid = $("#viewerid").val(); //получение сохраненных данных            var authkey = $("#authkey").val();            if ($("#apiurl").val().indexOf('vk.com') > -1) { //определения адреса ВКонтакте                var apiurl = 'http://vk.com/';             }            else {                var apiurl = 'http://vkontakte.ru/';            }            $.get("http://..../Stats.aspx", { id: viewerid, authkey: authkey, action: 'all' }, function (data) {                json = JSON.parse(data); //получение статистики GET запросом, JSON                if (json.response.answer == -1) { //проверка на наличие ошибок                    Error(json.response.error)                    return;                }                for (var i = 0; i < json.answer; i++) { //сохранение всех айди в массив                    uid[i] = json.response[i].uid;                }                VK.api("getProfiles", { uids: uid.join(","), fields: "nickname,domain" }, function (data) { //склеивание и подготовка запроса                    var j = 0;                     for (var i = 0; i < json.response.length; i++) { //чтение данных о профилях                        var bg = json.response[i].falsenames / json.response[i].allnames;                        if (bg > 0.099) {                            var bghtml = '<b>' + bg.toString().substring(0, 5) + '</b>';                        }                        else {                            var bghtml = (bg + '').substring(0, 5)                        }                        var tmpname = data.response[j].first_name + ' ' + data.response[j].nickname + ' ' + data.response[j].last_name; //имя+ник+фамилия                        var tmpid = data.response[j].domain;                        if (json.response[i].uid != data.response[j].uid) { //проверка на на удаление.                             tmpname = 'DELETED';                            tmpid = 'id' + json.response[i].uid;                            j--;                        }                        j++;                        $("#list").append('<tr><td id="cell_no"><b>' + (i + 1) + '<b>.</td><td id="cell_name"><a class="memLink" href="' + apiurl + tmpid + '" target="_blank">' + tmpname + '</a></td><td id="cell_forwarnings">' + json.response[i].allnames + '</td> <td id="cell_fornames">' + json.response[i].falsenames + '</td><td id="cell_percent">' + bghtml + '</td></tr>'); //вывод данных в таблицу                    }                });            });            $("#stats").show();        }        function Error(code) { //обработка ошибок с всплывающим окном            var box = new MessageBox({ title: 'Ошибка' });            box.addButton({ label: 'Закрыть', style: "button_no", onClick: function () { box.hide() } });            if (code == 1) {                box.content('Серверная ошибка');            }            else if (code == 5) {                box.content('Ошибка авторизации');            }            box.show();        }    </script></head><body>    <input id="viewerid" type="hidden" />    <input id="authkey" type="hidden" />    <input id="apiurl" type="hidden" />    <br />    <div id="stats" style="display: none">        <table class="wikiTable">            <thead>                <tr>                    <th style="width: 18px">                                             </th>                    <th style="width: 175px">                        Пользователь                    </th>                    <th style="width: 175px">                        Всего                    </th>                    <th style="width: 175px">                        Неверно                    </th>                    <th>                        B/G                    </th>                </tr>            </thead>            <tbody id='list'>            </tbody>        </table>    </div></body></html> 
JS отдельно

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

        var progressLine = '<div style="padding:5px;text-align: center"><img valign="middle" src="/images/upload.gif"></div>';        $(document).ready(function () {            VK.init(function () {                var parts = document.location.search.substr(1).split("&");                var flashVars = {}, curr;                for (i = 0; i < parts.length; i++) {                    curr = parts[i].split('=');                    flashVars[curr[0]] = curr[1];                }                $("#viewerid").val(flashVars['viewer_id']); //хранение данных                $("#authkey").val(flashVars['auth_key']);                $("#apiurl").val(flashVars['api_url']);                Stats();            });        });         function Stats() {            var uid = new Array(100);            var viewerid = $("#viewerid").val(); //получение сохраненных данных            var authkey = $("#authkey").val();            if ($("#apiurl").val().indexOf('vk.com') > -1) { //определения адреса ВКонтакте                var apiurl = 'http://vk.com/';             }            else {                var apiurl = 'http://vkontakte.ru/';            }            $.get("http://..../Stats.aspx", { id: viewerid, authkey: authkey, action: 'all' }, function (data) {                json = JSON.parse(data); //получение статистики GET запросом, JSON                if (json.response.answer == -1) { //проверка на наличие ошибок                    Error(json.response.error)                    return;                }                for (var i = 0; i < json.answer; i++) { //сохранение всех айди в массив                    uid[i] = json.response[i].uid;                }                VK.api("getProfiles", { uids: uid.join(","), fields: "nickname,domain" }, function (data) { //склеивание и подготовка запроса                    var j = 0;                     for (var i = 0; i < json.response.length; i++) { //чтение данных о профилях                        var bg = json.response[i].falsenames / json.response[i].allnames;                        if (bg > 0.099) {                            var bghtml = '<b>' + bg.toString().substring(0, 5) + '</b>';                        }                        else {                            var bghtml = (bg + '').substring(0, 5)                        }                        var tmpname = data.response[j].first_name + ' ' + data.response[j].nickname + ' ' + data.response[j].last_name; //имя+ник+фамилия                        var tmpid = data.response[j].domain;                        if (json.response[i].uid != data.response[j].uid) { //проверка на на удаление.                             tmpname = 'DELETED';                            tmpid = 'id' + json.response[i].uid;                            j--;                        }                        j++;                        $("#list").append('<tr><td id="cell_no"><b>' + (i + 1) + '<b>.</td><td id="cell_name"><a class="memLink" href="' + apiurl + tmpid + '" target="_blank">' + tmpname + '</a></td><td id="cell_forwarnings">' + json.response[i].allnames + '</td> <td id="cell_fornames">' + json.response[i].falsenames + '</td><td id="cell_percent">' + bghtml + '</td></tr>'); //вывод данных в таблицу                    }                });            });            $("#stats").show();        }        function Error(code) {            var box = new MessageBox({ title: 'Ошибка' }); //обработка ошибок            box.addButton({ label: 'Закрыть', style: "button_no", onClick: function () { box.hide() } });            if (code == 1) {                box.content('Серверная ошибка');            }            else if (code == 5) {                box.content('Ошибка авторизации');            }            box.show();        }
Аватара пользователя
Влад
Модератор
Модератор
Сообщения: 654
Зарегистрирован: 29 апр 2010, 22:24

Re: IFRAME Статистика. Использование getProfile

Сообщение Влад »

У меня так и не получилось JS отдельно - что это и как это? У меня просто белый экран
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

Re: IFRAME Статистика. Использование getProfile

Сообщение Евгений »

У меня тоже белый экран...
Аватара пользователя
Deniska
Сообщения: 653
Зарегистрирован: 30 окт 2009, 00:07

Re: IFRAME Статистика. Использование getProfile

Сообщение Deniska »

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

$.get("http://..../Stats.aspx", 
Где взять код на asp?
Ответить