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

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

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

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

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

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

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

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

Выборка информации о публичных галереях и фотографиях FishUp


Как уже было сказано, FishUp API предоставляет возможность работать с публичными данными, которые участники FishUp согласились свободно распространять по сети, ни от кого не скрывая! Такие данные еще называют открытыми. Доступ к публичным галереям и фотографиям (изображениям, снимкам) FishUp можно получать несколькими способами, исходя их списка разделов тематического каталога, который всегда доступен и извлекается нехитрым методом galleries.gcategory.getAllCategories, а также используя частично открытые методы (с необязательным использованием аргумента token). Например, при использовании метода groups.group.select без аргументов, возвращаются последние созданные публичные группы. Соответственно из полученных публичных групп можно осуществить выборку публичных фотографий входящих в эти группы. Но обо всем по порядку.



Выборка галереи по категориям



Зададимся целью (условное наименование задачи “C”) произвести выборку трех непустых галерей по одному из разделов тематического каталога (категории). Причем одно из условий, чтобы в выбранной категории случайным образом, присутствовало не менее трех галерей. Реализовать данную задачу нам помогут методы: galleries.gcategory.getAllCategories - для получения данных обо всех разделах тематического каталога и galleries.gallery.getGalleriesByCatID - для выборки публичных непустых галерей указанного раздела тематического каталога. На рис. 7, схематично показано решение по определению методов с привязкой к нашим классам.

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

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


Перейдем непосредственно к коду, см. листинги 7, 8 и 9.


Листинг 7. _example03.as


class classes.as2._example03 extends MovieClip {
    var gcategory03:MovieClip;
    var mc_loader:MovieClip;
    var txt_message:TextField;

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

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


Листинг 8. _gcategory03.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._gcategory03 extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var gallery03:MovieClip;
    var mc_categories:MovieClip;
    var txt_categories:TextField;
    var mc_loader:MovieClip;
    var gal_cnt:Number = 3;

    function _gcategory03() {
       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_categories.onRelease =
         Delegate.create(this, onReleaseСategories);
       this.getAllCategories();
    };

    function getAllCategories() {
       this.onResult = getAllCategoriesResults;
       my_fishup.call("galleries.gcategory.getAllCategories", this);
    };

    function getAllCategoriesResults(result){
       var iRnd:Number = random(result.length);
       if (result.items[iRnd].GALLERY_CNT < this.gal_cnt) {
          this.getAllCategories();
       } else {
          this.txt_categories.text = result.items[iRnd].TITLE +
             " (" + result.items[iRnd].GALLERY_CNT + ")";
          this.gallery03.getGalleriesByCatID(result.items[iRnd].ID);
       }
    };

    private var onReleaseСategories:Function = function():Void {
       this.getAllCategories();
    };
};



Листинг 9. _gallery03.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._gallery03 extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var ex03:MovieClip;

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

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

    function getGalleriesByCatID(nCatid:Number) {
       this.onResult = getGalleriesByCatIDResults;
       my_fishup.call("galleries.gallery.getGalleriesByCatID", this,
          {catid: nCatid, rec_per_page: 300});

    };

    function getGalleriesByCatIDResults(result){
       if (result.ERROR.ERRORCODE != 0) {
          _parent._parent.txt_message.text = result.ERROR.MESSAGE;
       } else {
          var rc:Object = result.DATA;
          var jRnd:Number = random(rc.length - _parent.gal_cnt);
          var i = 0;
          for (var j = jRnd; j < (jRnd + _parent.gal_cnt); j++) {
             if (rc.items[j].CROP_HOR_FILE.length > 0) {
                var splitPhoto:String =
                  rc.items[j].CROP_HOR_FILE.split("|");
                this["item"+i]._item.mc_photo.loadMovie(
                  "http://www.fishup.ru" + splitPhoto[0]);
             }
             this["item"+i]._item.TITLE.text = rc.items[j].TITLE;
             this["item"+i]._item.AUTHOR.text = rc.items[j].AUTHOR;
             i++;
          }
       }
    };
};

Как видно из листинга 9 (_gallery03.as) выборка галерей осуществляется случайным образом (random). В качестве аргумента для метода galleries.gobject.getGObjectsByGalID помимо обязательного galid – идентификатора галереи, используется rec_per_page. Это позволяет самостоятельно регулировать количество получаемых записей, по умолчанию rec_per_page = 50. Если требуется организовать постраничный переход, то аргумент rec_per_page удобно использовать в сочетании с аргументом page – номер странице (по умолчанию = 1). Мы же в нашем примере используем rec_per_page для увеличения количества возвращаемых записей до 300, чтобы как можно больше галерей участвовало в random.

В результате выполнения метода galleries.gallery.getGalleriesByCatID получаем уменьшенную версию фотографии (CROP_HOR_FILE), вписанную с обрезанием в размер 235x155 пикселов, наименование галереи (TITLE) и автора галереи (AUTHOR).

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

В классе _item_gal03.as определяем дополнительные события позволяющие улучшить юзабельность прилагаемого примера. Как это работает (задача “C”):

Пользователю предлагается только кликать по кнопке “А ещё”.
Загрузить пример, (ZIP - 31 Кб).



Выборка фотографии по группам



В FishUp помимо заранее определенных категорий и пользовательских галерей имеется понятие пользовательских групп, которые также как и галереи могут являться публичными (открытыми для всех). Для того чтобы произвести выборку последних созданных публичных групп необходимо использовать метод: groups.group.select без аргументов, чем и воспользуемся для решения еще одной задачи (условное наименование “D”) - выборка трех фотографий по одной из публичных групп выбранной случайным образом. Где одно из условий, чтобы в выбранной группе, присутствовало не менее трех фотографий. Для извлечения фотографий по группе следует использовать один из методов: galleries.gobject.select или groups.gobject.search. Рекомендуем использовать метод galleries.gobject.select. На рис. 8, схематично показано решение по определению методов с привязкой к нашим классам.

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

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


Класс _example04.as практически аналогичен _example03.as из предыдущего примера за исключением что вместо MovieClip gcategory03 определяем group04. Перейдем непосредственно к коду классов _group04.as и _gobject04.as, см. листинги 10 и 11.

Листинг 10. _group04.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._group04 extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var gobject04:MovieClip;
    var mc_groups:MovieClip;
    var txt_groups:TextField;
    var mc_loader:MovieClip;
    var obj_cnt:Number = 3;

    function _group04() {
       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_groups.onRelease = Delegate.create(this, onReleaseGroups);
       this.select();
    };

    function select() {
       this.onResult = selectResults;
       my_fishup.call("groups.group.select", this,
          {columns: "TITLE,OBJECT_CNT"});

    };

    function selectResults(result){
       var rc:Object = result.DATA;
       var iRnd:Number = random(rc.length);
       if (rc.items[iRnd].OBJECT_CNT < this.obj_cnt) {
          this.select();
       } else {
          this.txt_groups.text = rc.items[iRnd].TITLE +
             " (" + rc.items[iRnd].OBJECT_CNT + ")";
          this.gobject04.select(rc.items[iRnd].ID);
       }
    };

    private var onReleaseGroups:Function = function():Void {
       this.select();
    };
};

Метод groups.group.select позволяет управлять списком выбираемых полей с помощью атрибута columns. Как видно из листинга 10 ( _group04.as), извлекается наименование группы (TITLE) и общее количество фотографий (OBJECT_CNT).


Листинг 11. _gobject04.as

import Fishup;
import mx.utils.Delegate;

class classes.as2._gobject04 extends MovieClip {
    var my_fishup;
    public var onResult:Function;
    var ex04:MovieClip;

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

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

    function select(nGrpid:Number) {
       this.onResult = selectResults;
       my_fishup.call("galleries.gobject.select", this,
          {term: "group_id:"+nGrpid,
          rec_per_page: 300,
          columns: "TITLE,AUTHOR,CROP_HOR_FILE"});

    }

    function selectResults(result){
       if (result.ERROR.ERRORCODE != 0) {
          _parent._parent.txt_message.text = result.ERROR.MESSAGE;
       } else {
          var rc:Object = result.DATA;
          var jRnd:Number = random(rc.length - _parent.obj_cnt);
          var i = 0;
          for (var j = jRnd; j < (jRnd + _parent.obj_cnt); j++) {
             if (rc.items[j].ID != undefined) {
                if (rc.items[j].CROP_HOR_FILE.length > 0) {
                   var splitPhoto:String =
                      rc.items[j].CROP_HOR_FILE.split("|");
                   this["item"+i].mc_photo.loadMovie(
                      "http://www.fishup.ru" + splitPhoto[0]);
                } else {
                   this["item"+i].mc_photo.loadMovie("");
                }
                this["item"+i].TITLE.text = rc.items[j].TITLE;
                this["item"+i].AUTHOR.text = rc.items[j].AUTHOR;
                this["item"+i].btn_item.enabled = true;
             } else {
                this["item"+i].btn_item.enabled = false;
                this["item"+i].mc_photo.loadMovie("");
             }
             i++;
          }
       }
    };
};

В результате выполнения метода galleries.gobject.select получаем уменьшенную версию фотографии (CROP_HOR_FILE), вписанную с обрезанием в размер 235x155 пикселов, наименование фотографии (TITLE) и автора этой фотографии (AUTHOR).

В классе _item_obj04.as определяем дополнительные события позволяющие улучшить юзабельность прилагаемого примера. Как это работает (задача “D”):

Пользователю предлагается только кликать по кнопке “А ещё”.
Загрузить пример, (ZIP - 27 Кб).



Выборка фотографии по галереям



Теперь, когда у нас уже есть список публичных галерей (задача “C”), появляется желание выбрать связанные с ними фотографии (изображения, снимки). Усложним задачу (условное наименование “E”), увеличив количество получаемых галерей с выводом списка миниатюр фотографий по клику в области каждой галереи и с демонстрацией подсказки (ToolTip) о свойствах галерей и фотографий при наведении курсора мыши. А по клику мыши в области миниатюр фотографий организуем загрузку увеличенного образа выбранной фотографии. Для реализации данной задачи необходимо использовать уже знакомые методы: galleries.gcategory.getAllCategories и alleries.gallery.getGalleriesByCatID, а также метод: galleries.gobject.getGObjectsByGalID - для возвращения данных об изображениях указанной публичной галереи. На рис. 9, схематично показано решение по определению методов с привязкой к нашим классам.

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

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


Для классов _example05.as, _ gcategory05.as и _gallery05.as за основу можно использовать классы из примера для задачи C (_example03.as, _ gcategory03.as и _gallery03.as). Здесь же приведем фрагменты классов _gallery05 и _ gobject05.as (см. лисинг 12 и 13).

Листинг 12. _gallery05.as (фрагмент)

function getGalleriesByCatID(nCatid:Number) {
    this.onResult = getGalleriesByCatIDResults;
    my_fishup.call("galleries.gallery.getGalleriesByCatID", this,
       {catid: nCatid, rec_per_page: 300});

};

function getGalleriesByCatIDResults(result){
    if (result.ERROR.ERRORCODE != 0) {
       _parent._parent.txt_message.text = result.ERROR.MESSAGE;
    } else {
       var rc:Object = result.DATA;
       var jRnd:Number = random(rc.length - _parent.gal_cnt);
       var i = 0;
       for (var j = jRnd; j < (jRnd + _parent.gal_cnt); j++) {
          if (rc.items[j].CROP_HOR_FILE.length > 0) {
             var splitPhoto:String = rc.items[j].CROP_HOR_FILE.split("|");
             this["item"+i]._item.mc_photo.loadMovie(
               "http://www.fishup.ru" + splitPhoto[0]);
          }
          this["item"+i].TITLE = rc.items[j].TITLE;
          this["item"+i].AUTHOR = rc.items[j].AUTHOR;
          this["item"+i].OBJECT_CNT = rc.items[j].OBJECT_CNT;
          this["item"+i].VIEW_CNT = rc.items[j].VIEW_CNT;
          this["item"+i].RATE = rc.items[j].RATE;
          this["item"+i].ID = rc.items[j].ID;
          this["item"+i].iPos = i;
          i++;
       }
    }
};



В результате выполнения метода galleries.gallery.getGalleriesByCatID получаем уменьшенную версию фотографии (CROP_HOR_FILE), вписанную с обрезанием в размер 235x155 пикселов, наименование галереи (TITLE) автора галереи (AUTHOR), количество фотографий в галерее (OBJECT_CNT), количество просмотров галереи (VIEW_CNT), рейтинг (RATE) и системный идентификатор галереи (ID).


Листинг 13. _ gobject05.as (фрагмент)

function getGObjectsByGalID(nGalid:Number) {
    this._visible = true;
    this.onResult = getGObjectsByGalIDResults;
    my_fishup.call("galleries.gobject.getGObjectsByGalID", this,
       {galid: nGalid, rec_per_page: 300});

};

function getGObjectsByGalIDResults(result){
    if (result.ERROR.ERRORCODE != 0) {
       _parent._parent.txt_message.text = result.ERROR.MESSAGE;
    } else {
       var rc:Object = result.DATA;
       var jRnd:Number = random(rc.length - _parent.obj_cnt);
       var i = 0;
       for (var j = jRnd; j < (jRnd + _parent.obj_cnt); j++) {
          if (rc.items[j].ID != undefined) {
             if (rc.items[j].CROP_HOR_FILE.length > 0) {
                var splitPhoto:String =
                  rc.items[j].CROP_HOR_FILE.split("|");
                this["item"+i].mc_photo.loadMovie(
                  "http://www.fishup.ru" + splitPhoto[0]);
             } else {
                this["item"+i].mc_photo.loadMovie("");
             }
             if (rc.items[j].LARGE_FILE.length > 0) {
                var splitPhoto:String = rc.items[j].LARGE_FILE.split("|");
                this["item"+i].FILE = splitPhoto[0];
                this["item"+i].W_FILE = splitPhoto[2];
                this["item"+i].H_FILE = splitPhoto[3];
             }
             this["item"+i].TITLE = rc.items[j].TITLE;
             this["item"+i].AUTHOR = rc.items[j].AUTHOR;
             this["item"+i].VIEW_CNT = rc.items[j].VIEW_CNT;
             this["item"+i].RATE = rc.items[j].RATE;
             this["item"+i].iPos = i;
             this["item"+i].btn_item.enabled = true;
          } else {
             this["item"+i].btn_item.enabled = false;
             this["item"+i].mc_photo.loadMovie("");
          }
          i++;
       }
    }
};


В результате выполнения метода galleries.gobject.getGObjectsByGalID получаем уменьшенную версию фотографии (CROP_HOR_FILE), вписанную с обрезанием в размер 235x155 пикселов, версию фотографии (LARGE_FILE), вписанную в квадрат со стороной 720 пиксела при портретной ориентации, и в квадрат со стороной 960 пиксела при ландшафтной, наименование фотографии (TITLE), автора (AUTHOR), количество просмотров (VIEW_CNT) и рейтинг (RATE).

Метод galleries.gobject.getGObjectsByGalID может быть заменен методом galleries.gobject.select. Метод galleries.gobject.select более привлекательный для использования, так как здесь есть возможность управлять списком выбираемых полей с помощью атрибута columns (см. листинг 14).


Листинг 14. использование galleries.gobject.select вместо gobject.getGObjectsByGalID

function select(nGalid:Number) {
    this._visible = true;
    this.onResult = selectResults;
    my_fishup.call("galleries.gobject.select", this,
       {
       term: "gallery_id:"+nGalid,
       rec_per_page: 300,
       columns: "CROP_HOR_FILE,LARGE_FILE,TITLE,
                 AUTHOR,OBJECT_CNT,VIEW_CNT,RATE"
       });

};


В общем, методы select от FishUp достаточно гибкие в использовании, но об этом чуть позже. Как это работает (задача “E”):

Выбирайте и просматривайте!
Загрузить пример, (ZIP - 34 Кб).


Резюме



В данном разделе мы познакомились с методами FishUp API:
  • galleries.gcategory.getAllCategories - возвращает Query с данными обо всех разделах тематического каталога.
  • galleries.gallery.getGalleriesByCatID - метод предназначен для выборки публичных непустых галерей указанного раздела тематического каталога
  • galleries.gobject.getGObjectsByGalID - возвращает данные об изображениях указанной публичной галереи в виде структуры
  • groups.group.select - возвращает группы, удовлетворяющие критерию поиска
  • galleries.gobject.select - возвращает данные об изображениях, удовлетворяющие критерию поиска.


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

  • galleries.gallery.getGalleriesByUserID, galleries.gallery.getData и galleries.gobject.getData.


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