Приветствую Вас Гость | RSS

Flash. Обо всем по маленьку

Вторник, 23.12.2025, 09:22
Главная » Статьи » Уроки ActionScript

Урок 11-3. Пример создания считывателя RSS ленты
В этом примере будет загружена RSS лента из внешнего источника, а ее содержимое будет подвергнуто разбору, чтобы его можно было просмотреть, отформатировать внутри текстового поля во флеш. Источником для данного примера будет Adobe XML News Aggregator (MXNA) – свежие новости с главной страницы (rss).

  • Примечание: Загрузка содержимого сайтов и файл crossdomain.xml
    Когда вы загружаете текстовое содержимое с внешнего сайта, находящегося за пределами домена (или поддомена) SWF, то необходим файл crossdomain.xml для предоставления доступа SWF к этому содержимому. Лента MXNA, например, в обычном случае не будет доступна с другого сайта, но у сайта weblogs.macromedia.com есть файл политики crossdomain.xml, расположенный на weblogs.macromedia.com/crossdomain.xml, позволяющий иметь к ней доступ всем флеш-плеерам из других доменов.

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

Шаги:


1. В исходных файлах откройте файл MXNARssReader.fla, находящийся в папке XML. Этот файл содержит текстовое поле, которое будет показывать MXNA ленту в виде HTML текста. 

2. Выберите первый кадр на слое ActionScript и откройте панель Actions. 

Переменные, необходимые для данного примера, просто относятся к загружаемой ленте XML файла. Он включает экземпляр URLLoader, использует URLRequest и реальный URL ленты.

3. Добавьте следующий скрипт на панель Actions. 

// Set up variables
var mxnaURL:String = "http://weblogs.macromedia.com/mxna/xml/rss.cfm?query=byMostRecent&languages=1";
var mxnaRequest:URLRequest = new URLRequest(mxnaURL);
var mxnaLoader:URLLoader = new URLLoader();

  • Примечание: Тестирование без доступа в интернет
    В исходных файлах имеется XML файл с именем mxna_sample.xml, который вы можете заменить на MXNA URL, если хотите протестировать этот пример без подключения к интернету.

  • var mxnaURL:String = "mxna_sample.xml";

Следующие обработчики определены для экземпляра URLLoader. Наиболее важный обработчик – это полный обработчик событий, позволяющий нам узнать, когда XML файл был загружен. Когда это произойдет, мы сможем прочитать XML файл и отобразить его содержимое во флеш. Чтобы защититься от ошибок, вам также следует прислушиваться к ошибочным событиям io и безопасности. 

Обработчик ошибки может просто отследить сообщение, если в настоящее время существует ошибка. В идеале, нужно совершить специальное действие, чтобы проинформировать пользователя, что произошла ошибка, или операцию нужно повторить еще раз. В полном обработчике событий XML объект должен быть создан на основе загруженного текста и содержимого этого XML файла, отображенного на экране (в текстовом поле). На данный момент этот процесс будет поручен функции с именем renderFeedXML().

4. Добавьте следующий скрипт на панель Actions. 

// Assign listeners for downloading feed
mxnaLoader.addEventListener(Event.COMPLETE, feedDownloadedHandler);
// Error listeners
mxnaLoader.addEventListener(IOErrorEvent.IO_ERROR, feedDownloadError);
mxnaLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, feedDownloadError);

// Event handlers
// Called when feed has completely downloaded
function feedDownloadedHandler(event:Event):void {
 
 // use a try-catch block in case
 // xml parsing fails
 try {
 
  // convert the loaded text into XML
  var mxnaXML:XML = XML(mxnaLoader.data);
  
  // if XML succeeded (no error)
  // show it in the text field 
  renderFeedXML(mxnaXML);
  
 }catch(error:Error){
  trace("Error parsing XML: "+error);
 }
 
}
// Called if feed download fails
function feedDownloadError(event:Event):void {
 trace("Error during download: "+event);
}

После загрузки XML файла и его успешной конвертации в экземпляр XML из флеш вызывается renderFeedXML. Этой функции нужно будет пройти через XML файл и перевести его в HTML текст, который будет показан в текстовом поле на экране. Здесь важно понять установку XML ленты.

Лента MXNA является лентой RSS 1.0 feed. Посмотрев в корень узла, вы можете увидеть, какие пространства имен были определены для нее.

Идентификатор URI http://purl.org/rss/1.0/ является URI для пространства имен по умолчанию. Другие пространства имен - это rdf (http://www.w3.org/1999/02/22-rdf-syntax-ns#), которое поддерживает Resource Description Framework (буква R в RSS, хотя RSS иногда также относится к "Real Simple Syndication"), и dc (http://purl.org/dc/elements/1.1), которое поддерживает Dublin Core, дополнительный набор метаданных, добавленных в ленту. 

Каждое сообщение в ленте хранится в элементе item, который является прямым потомком корневого узла rdf. Пример одного из таких элементов выглядит так.

<item rdf:about="http://www.senocular.com/?id=2.4">
 <title>New Flash Player 9 Update Posted</title>
 <link>http://weblogs.macromedia.com/mxna/controller.cfm?handler=PostHandler&action=click&postId=198719&nextPage=http%3A%2F%2Fwww%2Esenocular%2Ecom%2F%3Fid%3D2%2E4</link>
 <description><![CDATA[If you haven't already noticed, there's a new version of the Flash Player posted on the Adobe.com website. This version is 9,0,47,0 (you can check your current version from the About Adobe Flash Player page). For more information, see the release notes.]]></description>
 <dc:subject>Fireworks</dc:subject>
 <dc:creator>senocular.com</dc:creator>
 <dc:date>2007-07-11T16:50:12.0-00:00</dc:date>
 <dc:identifier>02DD0C9679274B1F18BFCAE95E2A4009</dc:identifier>
</item>

Применительно к данному считывателю нас будет интересовать оригинальная ссылка источника в атрибуте about: title (название), description (описание), creator (создатель) и date (дата). Как видите, атрибут about определен в пространстве имен rdf. Атрибут about содержится внутри тега item, который не имеет определенного для него пространства имен. Тем не менее, так как корневой элемент rdf имеет определенное для него пространство имен по умолчанию, он помещает item в это пространство (http://purl.org/rss/1.0/). Это применяется к элементам title и description. Оставшиеся элементы, creator и date, являются частью пространства имен dc. При ссылке на эти узлы в ActionScript, нужно будет воспользоваться правильными пространствами имен. Ссылка на item, title и description может быть немного упрощена, если default xml namespace установлено в качестве пространства имен XML файла по умолчанию. 

Так как внутри ленты существует множество элементов item, то можно использовать цикл renderFeedXML для прохождения по каждому элементу и добавления его в текстовое поле на сцене. Цикл for each..in обычно является более простым решением для этой задачи, особенно для XML файла, где индексы не важны, а нужны просто узлы и значения. Функция вызовет другую функцию renderFeedItem, чтобы действительно поместить содержимое каждой статьи в текстовое поле.

5. Добавьте следующий скрипт на панель Actions. 

// Functions
// Writes each feed item to the screen
function renderFeedXML(feed:XML):void {
 
 // get default namespace for feed
 var defaultNs:Namespace = new Namespace("http://purl.org/rss/1.0/");
 // set default namespace to make referencing easier
 default xml namespace = defaultNs;

 // clear screen text
 mxnaText.text = "";

 // write each Feed item to the screen
 // looping through the XMLList with for each
 var items:XMLList = feed.item;
 for each (var item:XML in items){
  renderFeedItem(item);
 }
}
  
// Writes a single feed item to the screen
function renderFeedItem(item:XML):void {
 
 // namespaces
 var rdf:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
 var dc:Namespace = new Namespace("http://purl.org/dc/elements/1.1/");
 var defaultNs:Namespace = new Namespace("http://purl.org/rss/1.0/");
 
 // set default namespace to make referencing easier
 default xml namespace = defaultNs;

 // parse date string [YYYY-MM-DD]
 var date:String = item.dc::date.text().substring(0, 10);

 // write other feed content to text using HTML
 mxnaText.htmlText += "<u><b><a href=\""+item.@rdf::about+"\">"+item.title+"</a></b></u><br />";
 mxnaText.htmlText += "<i>by "+item.dc::creator+" on "+date+"</i><br />";
 mxnaText.htmlText += item.description+"<br /><br />";
}

Обратите внимание, что default xml namespace было установлено и в renderFeedXML, и в renderFeedItem. Когда вы устанавливаете default xml namespace, оно применяется только к текущей области. Когда вы находитесь в другой функции, или выходите из текущей функции, вам потребуется установить пространство имен заново (предполагается, что вы захотите использовать его снова). 

Функции renderFeedXML и renderFeedItem – это функции, делающие всю работу. После загрузки XML файла функции прочитают XML файл и поместят его содержимое на экране. Единственное, что остается сделать – это загрузить XML файл.

6. Добавьте следующий скрипт на панель Actions. 

// Download XML feed. Once loaded, the
// parsing and displaying process will start
try {
 mxnaLoader.load(mxnaRequest);
 mxnaText.text = "Loading...";
}catch(error:Error){
 trace("Error during load: "+error);
}

Помните, что блок try..catch нужен, чтобы отлавливать любые ошибки load(), которые могут возникнуть при загрузке.
 
7. После того, как закончите добавление кода, протестируйте свой фильм. У вас должно получиться нечто похожее. 
 
 

Рисунок: Считыватель MXNA RSS во флеш 

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

Категория: Уроки ActionScript | Добавил: anti_k (26.02.2010)
Просмотров: 917 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]