закрыть панель настроек

Здесь вы можете выбрать цветовую схему интерфейса и расположение элементов на странице просмотра снимка или альбома. Вы также можете отключить (или включить) некоторые второстепенные элементы интерфейса (карусели, тултипы и др.) или изменить их поведение.

Настройки интерфейса

  • Цвет интерфейса:

Настройки карусели

Вид страницы альбома

Вид страницы снимка

ActionScript в среде Flash на основе FishUp API

Вход в FishUp и работа с персональными данными


FishUp API предоставляет возможность работать как с публичными, так и с персональными данными, например с параметрами учетной записи, закрытыми альбомами, фотографиями. В последнем случае приложение, использующее FishUp API, должно аутентифицироваться для работы от имени конкретного пользователя FishUp.

Для получения доступа к методам FishUp, требующим пользовательской аутентификации (подтверждение подлинности), следует использовать метод misc.security.login возвращающий уникальный идентификатор сессии - token. Параметрами аутентификации являются логин и пароль, полученные при регистрации пользователя на сайта FishUp. Этот идентификатор является своеобразным “паспортом” для методов, предполагающих авторизацию пользователя.

Каждый метод FishUp API, работающий с персональными данными пользователя, имеет среди своих аргументов, аргумент token. При вызове такого метода необходимо передать в этом аргументе полученный от системы token. Это позволит проверить полномочия пользователя на выполнение соответствующей операции или на доступ к используемому объекту. Выдаваемые системой token’ы привязаны к IP-адресам, от которых поступил запрос на аутентификацию, поэтому token будет недействителен, при использовании его с другого сетевого интерфейса.

Время жизни token ограничено! При отсутствии запросов в течение определенного промежутка времени token становится недействителен и необходимо повторить процедуру аутентификации (получение нового token). Время жизни token можно найти в системной настройке TOKEN_LIFETIME, которую можно получить вместе с другими системными настройками с помощью метода misc.settings.getSettings.


Редактирование параметров учетной записи пользователя


Предположим, перед нами стоит задача (условное наименование “A”) организовать вход в FishUp c возможностью редактирования параметров учетной записи текущего пользователя. Для реализации данной задачи необходимо использовать методы: misc.security.login - для получения идентификатора сессии (token), accounts.user.getMyData - для получения персональных данных пользователя, accounts.user.update - для редактирования параметров учетной записи и misc.security.logout - для завершения действия идентификатора сессии.

Методы: accounts.user.getMyData, accounts.user.update и misc.security.logout имеют в своем арсенале аргумент token, в качестве значения которого, как уже было отмечено, следует передавать идентификатор сессии - token, получаемый с помощью вызова метода misc.security.login. Предлагаем обратить внимание на рис. 5, где схематично показано решение по определению методов с привязкой к нашим классам.

Определение методов FishUp с привязкой к нашим классам (задача “A”)

Рис. 5.
Определение методов FishUp с привязкой к нашим классам (задача “A”)


Далее перейдем непосредственно к коду, а именно см. листинги 3, 4 и 5.

Листинг 3. _example02.as

class classes.as2._example02 extends MovieClip {
    var security02:MovieClip;
    var user02:MovieClip;
    var fishup_logo:MovieClip;
    var mc_loader:MovieClip;
    var txt_message:TextField;
    public var token:String;

    function _example02() {
       this.loaderOnOff(false);
    };

    private function setToken(strToken:String) {
       this.token = strToken;
       if (strToken.length > 0) {
          this.user02.getMyData(strToken);
       }
    };

    private function loaderOnOff(bVal:Boolean) {
       this.mc_loader._visible = bVal;
       if (bVal) { this.mc_loader.ldrItem.gotoAndPlay(1);
       } else { this.mc_loader.ldrItem.gotoAndStop(1); }
    };
};


Листинг 4. _security02.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._security02 extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var mc_login:MovieClip;
    var txt_login:TextField;
    var txt_password:TextField;

    function _security02() {
       my_fishup = new Fishup();

       my_fishup.addEventListener('fishupRequestStart',
          Delegate.create(this, function()
          {_parent.loaderOnOff(true);}));
       my_fishup.addEventListener('fishupRequestEnd',
          Delegate.create(this, function()
          {_parent.loaderOnOff(false);}));
       my_fishup.addEventListener('fishupRequestError',
          Delegate.create(this, function(eventObj)
          {trace("Ошибка: "+eventObj.result.description)}));

       mc_login.onRelease = Delegate.create(this, onReleaseLogin);
    };

    function login(strLogin:String, strPwd:String) {
       this._visible = false;
       this.onResult = loginResults;
       my_fishup.call("misc.security.login", this,
          {login: strLogin, pwd: strPwd});

    };

    function loginResults(result){
       if (result.length == 0){
          _parent.txt_message.text = "Неверный логин и/или пароль!";
          this._visible = true;
       }
       else {
          _parent.txt_message.text = "Аутентификация прошла успешно!";
          _parent.setToken(result);
       }
    };

    function logout(strToken:String) {
       _parent.user02._visible = false;
       this.onResult = logoutResults;
       my_fishup.call("misc.security.logout", this, {token: strToken});
    };

    function logoutResults(){
       _parent.setToken(null);
       _parent.txt_message.text = "Сессия завершена!";
       _parent.fishup_logo._visible = true;
       this._visible = true;
    };

    private var onReleaseLogin:Function = function():Void {
       this.login(txt_login.text, txt_password.text);
    };
};


Листинг 5. _user02.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._user02 extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var mc_logout:MovieClip;
    var mc_save:MovieClip;
    var txt_fname:TextField;
    var txt_lname:TextField;
    var mc_photo:MovieClip;

    function _user02() {
       this._visible = false;
       my_fishup = new Fishup();

       my_fishup.addEventListener('fishupRequestStart',
          Delegate.create(this, function()
          {_parent.loaderOnOff(true);}));
       my_fishup.addEventListener('fishupRequestEnd',
          Delegate.create(this, function()
          {_parent.loaderOnOff(false);}));
       my_fishup.addEventListener('fishupRequestError',
          Delegate.create(this, function(eventObj)
          {trace("Ошибка: "+eventObj.result.description)}));

       mc_logout.onRelease = Delegate.create(this, onReleaseLogout);
       mc_save.onRelease = Delegate.create(this, onReleaseSave);
    };

    function getMyData(strToken:String) {
       this.onResult = getMyDataResults;
       my_fishup.call("accounts.user.getMyData", this, {token: strToken});
    };

    function getMyDataResults(result){
       if (result.ERROR.ERRORCODE != 0) {
          _parent.txt_message.text = result.ERROR.MESSAGE;
       } else {
          _parent.fishup_logo._visible = false;
          this.txt_fname.text = result.DATA.FIRST_NAME;
          this.txt_lname.text = result.DATA.LAST_NAME;
          if (result.DATA.SMALL_PHOTO_ID.length > 0) {
             var splitPhoto:String =
                result.DATA.SMALL_PHOTO_ID.split("|");
             this.mc_photo.loadMovie("http://www.fishup.ru" +
                splitPhoto[0]);
          }
          this._visible = true;
       }
    };

    function update(strToken:String) {
       this.onResult = updateResults;
       my_fishup.call("accounts.user.update", this, {
          token: strToken,
          data: {FIRST_NAME: this.txt_fname.text,
          LAST_NAME: this.txt_lname.text}
       });

    };

    function updateResults(result){
       if (result.ERROR.ERRORCODE != 0) {
          _parent.txt_message.text = result.ERROR.MESSAGE;
       } else {
          _parent.txt_message.text = "Данные изменены!";
       }
       this._visible = true;
    };

    private var onReleaseLogout:Function = function():Void {
       _parent.security02.logout(_parent.token);
    };

    private var onReleaseSave:Function = function():Void {
       this._visible = false;
       this.update(_parent.token);
    };
};


Большинство методов FishUp API возвращают информацию об ошибках, возникших при выполнении запрашиваемой операции. Это может быть информация о некорректности передаваемых данных, отсутствии необходимых привилегий, о внутренней ошибке системы и т. д. Обратите внимание на код в листинге 5, где включена проверка на возврат ошибки. Если числовой идентификатор ошибки ERRORCODE размещаемый в структуре ERROR не равен нулю (!= 0), то произошла ошибка и тогда мы выводим сообщение об ошибке, используя ключ MESSAGE все из той же структуры ERROR. Более детально о структуре ERROR следует см. в документации FishUp API (PDF - 825 Кб).

Важно отметить, что все образы фотографий (изображений, снимков) возвращаемые методами Fishup API представляют собой строку отформатированную специальным образом. В нашем примере мы разбиваем значение SMALL_PHOTO_ID, используя функцию split("|") извлекая URL из позиции = 0. Полный формат строки выглядит следующим образом:

%URL%|%FILE_ID%|%WIDTH%|%HEIGHT%|%SIZE%|%FILE_NAME%

Где

  • %URL% - URL файла;
  • %FILE_ID% - внутрисистемный идентификатор файла;
  • %WIDTH% - ширина изображения в пикселях (только если файл - изображение);
  • %HEIGHT% - высота изображения в пикселях (только если файл - изображение);
  • %SIZE% - размер файла в байтах;
  • %FILE_NAME% - имя файла.


Впрочем, для извлечения необходимых данных из строки выше описанного формата можно воспользоваться методом getFileInfo, который включен в состав класса Fishup.as (в листинге 5 этот класс импортируется). В результате использования, метод getFileInfo(“строка”) - возвращает объект со следующими свойствами: src, id, width, height, size и fileName.

Как это работает (задача “A”):



Изначально пользователю предлагается ввести логин и пароль, после чего при успешной аутентификации, открывается форма редактирования учетной записи пользователя. В нашем случае это Имя (FIRST_NAME) и Фамилия (LAST_NAME). Здесь же используя метод accounts.user.getMyData получаем уменьшенную фотографию пользователя (SMALL_PHOTO_ID - квадрат со стороной 120 пикселов). Полный список возвращаемых данных метода accounts.user.getMyData см. в документации FishUp API (PDF - 825 Кб). Загрузить пример, (ZIP - 17 Кб).


Просмотр статистических данных пользователя



Не будем останавливаться и поставим перед собой еще одну задачу (условное наименование “B”), организовать вход в FishUp c возможностью просмотра статистических данных пользователя. Для реализации данной задачи необходимо использовать уже знакомые методы (см. задачу “A”): misc.security.login, misc.security.logout, accounts.user.getMyData и метод accounts.user.getMyStats - возвращающий статистические данные пользователя.

Почему бы не воспользоваться нашими классами _example02.as и _security02.as (см. задачу “A”), в изменении которых нет необходимости, а вот класс _user02.as несколько изменим и сохраним с именем _user02stats.as (см. листинг 6.). Сам же _example02.fla также модифицируем под новую задачу, сохранив как _example02stats.fla. На рис. 6 схематично показано решение по определению методов с привязкой к нашим классам.

Определение методов FishUp с привязкой к нашим классам (задача “B”)
Рис. 6.
Определение методов FishUp с привязкой к нашим классам (задача “B”)


Листинг 6. _user02stats.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._user02stats extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var mc_logout:MovieClip;
    var mc_refresh:MovieClip;
    var txt_author_name:TextField;
    var txt_author_email:TextField;
    var mc_photo:MovieClip;
    var txt_gall_cnt:TextField;
    var txt_gall_views:TextField;
    var txt_obj_cnt:TextField;
    var txt_obj_views:TextField;
    var txt_obj_size:TextField;

    function _user02stats() {
       this._visible = false;
       my_fishup = new Fishup();

       my_fishup.addEventListener('fishupRequestStart',
          Delegate.create(this, function()
          {_parent.loaderOnOff(true);}));
       my_fishup.addEventListener('fishupRequestEnd',
          Delegate.create(this, function()
          {_parent.loaderOnOff(false);}));
       my_fishup.addEventListener('fishupRequestError',
          Delegate.create(this, function(eventObj)
          {trace("Ошибка: "+eventObj.result.description)}));

       mc_logout.onRelease = Delegate.create(this, onReleaseLogout);
       mc_refresh.onRelease = Delegate.create(this, onReleaseRefresh);
    };

    function getMyData(strToken:String) {
       this.onResult = getMyDataResults;
       my_fishup.call("accounts.user.getMyData", this, {token: strToken});
    };

    function getMyDataResults(result){
       if (result.ERROR.ERRORCODE != 0) {
          _parent.txt_message.text = result.ERROR.MESSAGE;
       } else {
          _parent.fishup_logo._visible = false;
          this.txt_author_name.text =
          result.DATA.FIRST_NAME + " " + result.DATA.LAST_NAME;
          this.txt_author_email.text = result.DATA.EMAIL;
          if (result.DATA.AVATAR_FILE_ID.length > 0) {
             var splitPhoto:String =
                result.DATA.AVATAR_FILE_ID.split("|");
             this.mc_photo.loadMovie("http://www.fishup.ru" +
                splitPhoto[0]);
          }
          this.getMyStats(_parent.token);
       }
    };

    function getMyStats(strToken:String) {
       this.onResult = getMyStatsResults;
       my_fishup.call("accounts.user.getMyStats", this, {token: strToken});
    };

    function getMyStatsResults(result){
       if (result.ERROR.ERRORCODE != 0) {
          _parent.txt_message.text = result.ERROR.MESSAGE;
       } else {
          _parent.fishup_logo._visible = false;
          this.txt_gall_cnt.text = result.DATA.GALLERY_CNT;
          this.txt_gall_views.text = result.DATA.GALLERY_VIEWS;
          this.txt_obj_cnt.text = result.DATA.GOBJECT_CNT;
          this.txt_obj_views.text = result.DATA.GOBJECT_VIEWS;

          var obj_size:Number =
             Math.round(result.DATA.GOBJECTS_SIZE/(1024*1024));
          this.txt_obj_size.text = obj_size.toString();

          var my_date:Date = new Date();
          _parent.txt_message.text = "- " + my_date + " -";
          this._visible = true;
       }
    };

    private var onReleaseLogout:Function = function():Void {
       _parent.security02.logout(_parent.token);
    };

    private var onReleaseRefresh:Function = function():Void {
       this._visible = false;
       this.getMyStats(_parent.token);
    };
};


Как это работает (задача “B”):



Пользователю предлагается ввести логин и пароль, после чего при успешной аутентификации открывается форма просмотра статистических данных. Метод accounts.user.getMyData для задачи “B” немного модифицирован, в качестве фотографии пользователя вместо (SMALL_PHOTO_ID) используется (AVATAR_FILE_ID - квадрат со стороной 48 пикселов), также нашлось место для адреса электронной почты (EMAIL).

При выводе статистики используются следующие данные:
  • количество галерей - GALLERY_CNT;
  • общее количество просмотров галерей - GALLERY_VIEWS;
  • общее количество изображений (фотографий) - GOBJECT_CNT;
  • общее количество просмотров изображений - GOBJECT_VIEWS;
  • общий объем изображений в байтах - GOBJECT_SIZE.


В данном примере представлены не все возможные статистические данные, возвращаемые методом accounts.user.getMyStats. Полный список возвращаемых статистических данных пользователя см. в документации FishUp API (PDF - 825 Кб). Загрузить пример, (ZIP - 18 Кб).

У Вас есть желание улучшить форму входа в FishUp? Вы хотите позволить напоминать забытый пароль? Да и такое возможно, к уже существующему классу следует добавить использование метода accounts.user.sendPwd передавая в качестве аргумента адрес электронной почты - email. И еще понадобиться модифицировать основной fla-файл.


Резюме


В данном разделе мы познакомились с методами FishUp API:
  • misc.security.login - производит аутентификацию пользователя и возвращает уникальный строковый идентификатор сессии – token.
  • accounts.user.getMyData - возвращает персональные данные текущего пользователя
  • accounts.user.update - модифицирует параметры учетной записи пользователя
  • accounts.user.getMyStats - возвращает статистические данные пользователя
  • misc.security.logout - завершает действие идентификатора сессии (token).

Рекомендуемые методы FishUp API для самостоятельного изучения:

  • accounts.user.getPublicData, accounts.user.delete, accounts.user.sendPwd и accounts.user.getUserIDByHostName.


Общая информация Персональный фотосайт Практические примеры Помощь
© 2006-2020 Фишап.
Все права защищены.
Версия: 1.9.7