Создание Flash Lite 1.1 RSS Reader

Скачать пример: Flash Lite 1.1 RSS

Одно из ограничений плейера Flash Lite 1.1 заключается в том, что он не умеет парсить XML непосредственно. Он может загружать динамически данные используя функцию loadVariables, используя пару name/value. Используя этот метод вы можете загрузить практически любую информацию в Flash Lite 1.1.

В этой статье будет рассмотрен вопрос создания Flash Lite 1.1 RSS (Really Simple Syndication) используя PHP RSS парсер на стороне сервера.

Создание RSS парсера

используя RSS парсер вы можете обрабатывать следующие источники в вашем Flash Lite 1.1 приложении:

* блоги
* новости
* форумы
* podcasts
* videocasts

Все эти форматы контента доступны через XML feeds, используя RSS 1.0, RSS 2.0, RDF, или спецификации Atom.

Для этого примера я буду разрабатывать RSS парсер на сервере, используя PHP 5. Для этого примера мы будем парсить RSS 2.0 feed со следующего адреса: http://www.flashmobilegroup.org/?feed=rss2

Мы будем парсить этот RSS 2.0 feed чтобы извлечь информацию из тегов title и description для каждого блока item, а затем адаптировать полученную информацию для Flash Lite 1.1 RSS.

Вот скрипт на PHP 5 который будет заниматься разбором XML:

//Ссылка на RSS 2.0 feed
$link_to_rss_feed ="http://www.flashmobilegroup.org/?feed=rss2";

//Счетчик возвращаемый клиенту
$i=1;

// Загрузка XML feed
$xml = simplexml_load_file($link_to_rss_feed);

// Разбор каждого значения
foreach    ($xml->channel[0]->item as $item)
{
if($item) {
// Нужно убрать html теги не поддерживаемые Flash Lite
// html в динамических текстовых полях
$title = strip_tags($item->title);
$description = strip_tags($item->description);

// Заменяем символ &
$title = str_replace("&", "", $title);
$description = str_replace("&", "", $description);

// Возвращаем контент
echo "&title$i=".$title;
echo "&description$i=".$description;
//echo $i;
$i++;
} else {
// Отправляем собщение об ошибке если контент не найден
echo "&msg=Content not found";
echo "&flag=error";
echo "&end=end";
exit;
}
}
$i=$i-1;
echo "&flag=ok";
echo "&totalitems=".$i;
echo "&end=end";

Анализируем код

Ссылка на RSS 2.0 feed:
$link_to_rss_feed ="http://www.flashmobilegroup.org/?feed=rss2";
Ссылка будет передана функции simplexml_load_file:
$xml = simplexml_load_file($link_to_rss_feed);
Переменная $xml теперь содержит XML feed. Заметьте что данная функция может получать доступ к контенту в виде XML непосредственно из интернета, но это должно быть разрешено в настройках вашего сервера.

Теперь нам нужно провести разбор каждой ветки item и выбрать контент из title и description, который будет возвращаться приложению Flash Lite 1.1. По этой причине мы используем функцию foreach, чтобы пройтись по каждой ветке и извлечь данные.

Для начала мы должны избавиться от тэгов HTML и оставить только текст, находящийся в title и description. Это делается путем использования функции strip_tags. Flash Lite 1.1 не поддерживает тэги, динамическим загружаемые с текстом.

Также — и это ОЧЕНЬ важно — вы должны избавиться от каждого символа &, который содержится в тексте, заключенном в тэги title и description. Мы это сделаем благодаря функции str_replace. Flash Lite 1.1 распознает & как префикс, поэтому каждый & содержащийся в тексте разобъет структуру данных.

Следующие две строчки создают & name/value для кажндого title и description, которые будут использоваться как переменные в Flash Lite 1.1 RSS:
echo "&title$i=".$title; echo "&description$i=".$description;
Echo возвратит следующее для первого блока item:
&title1=Tips for Developing Flash Games for the iRiver U10 &description1=New article on DevNet at Adobe: Tips for Developing Flash Games for the iRiver U10. It includes two samples available for download. The article is written by Sung-Hee Park of MiniGate.
Т.к RSS feed содержит больше чем одну ветку item, вы заканчиваете переменные &title и &description счетчиком, применяя значение переменной &i. Например &item1, &description1, &item2, &description2, и т.д. Переменная &totalitems — общее количество значений, а &end — это флаг, используемый в Flash Lite 1.1 для определения конца загрузки файла. Flash Lite 1.1 не имеет возможности определить конец файла. Поэтому решение этой проблемы — передать флаг. На этом мы построили основную структуру серверного RSS parser-а. Положите файл на сервер и протестируйте его, введя адрес скрипта в броузер.

Создание Flash Lite 1.1 reader

Давайте теперь приступим к созданию клиента для Flash Lite RSS. Начните с 5-ти фреймов и 2-х слоев, как показано на рисунке ниже. (Файл rss-reader.fla)


Первый кадр содержит следующий код ActionScript

Переменная HTTP — ссылка на серверный скрипт RSS. На первом кадре у нас содержится кнопка, которая переводит нас на второй кадр. Код кнопки:
on (press) { gotoAndPlay(2); }


На втором кадре сделайте вызов функции loadVariable, используя ссылку на rss-reader.php

Затем установите переменную set в нулевое значение. Убедитесь чтобы она всегда имела значение null перед обращением к серверу.

Кнопка Back содержит следующий код:

on (keyPress "") { gotoAndPlay(1); }
Третий кадр такой же как и второй, но не содержит кода. Он будет использован в качестве цикла, для загрузки данных. На четвертом кадре выполняется проверка, загрузились ли данные. Если данные загружены мы попадаем на 5-й кадр. В противном случае — возвращаемся на третий кадр. На рисунке ниже показан код четвертого кадра.

Если переменная end не равна «end» — это значит что данные еще загружаются. Будет вызван код gotoAndPlay(3) и мы вернемся на третий кадр. Если же переменная end равна «end» — данные полностью загружены.
echo "&end=end";
Эта строка находится в двух местах: когда возвращены данные и когда нету данных для возвращения. Код на рисунке выше учитывает эти варианты. Если значение переменной flag не равно «error», можно перейти на 5-й кадр. В другом случае, отображается ошибка в динамическом поле, используя переменную msg, которая передается php скриптом:
echo "&msg='Content not found'"; echo "&flag=error";
Определение переменной ошибки на стороне сервера — удобный способ. К примеру если я захочу изменить сообщение, — мне не придется изменять клиентскую часть.

Рисунок ниже иллюстрирует код 5-го кадра. Он извлекает контент из переменных title1 и description1, отправляемых сервером

Пятый кадр будет отображать RSS текст title и description. На нем находятся два динамических текстовых поля и кнопки back, и SMS. Также здесь находится скрытая кнопка, для возможности скроллинга и отображения переменных, отправляемых сервером:

echo "&title$i=".$title; echo "&description$i=".$description;


Также, два других динамических текстовых поля предназначены для отображения общего количества загруженных items (totalitems) и текущего, которое отображено в данный момент (n).Код для кнопок Back:
on (keyPress "") { gotoAndPlay(1); }
и SMS:
on (keyPress "") { getURL("sms:?&body=" add title add newline add description); }

Скрытая кнопка:

Она используется для выбора title и description, и для скроллинга динамического текста:

// Выбор
on (keyPress "") {
if (n ne totalitems) {
n++;
} else {
n = 1;
}
title = eval("title" add n);
description = eval("description" add n);
}
on (keyPress "") {
if (n ne 1) {
n- -;
} else {
n = totalitems;
}
title = eval("title" add n);
description = eval("description" add n);
}
// Скроллинг
on (keyPress "") {
description.scroll--;
}
on (keyPress "") {
description.scroll++;
}

Теперь Flash Lite 1.1 RSS reader готов к использованию.

Добавить комментарий