Comunidad de diseño web y desarrollo en internet online

lectura de variables XML entre el main .fla y su clase .as

Citar            
MensajeEscrito el 07 Mar 2011 11:08 am
Hola,
a ver si me podeis ayudar. Os pongo en antecedentes. Tengo una película (.fla) que carga datos de un feed RSS de dailymotion (archivo XML). Necesito que se cargue el último video publicado y la información que le corresponde (título y descripción). He conseguido cargar el titulo la descripción y aislar el identificador del vídeo de su etiqueta (<media:content url="http://www.dailymotion.com/embed/video/xhcqml -----> identificador: xhcqml ).

Para la visualización del vídeo cargo mediante una clase externa el visor de vídeos de DAILYMOTION mediante un código que ellos han creado. Necesito pasar el identificador del vídeo que he aislado en el timeline del flash (xhcqml) al archivo as para q el visor del dailymotion lo reproduzca.

Código de lectura del XML donde saco los datos del titulo la descripción y aislo el identificador del vídeo:

Código ActionScript :

stop();

var XmlExterno:XML;

//Carga el XML
function CargarXML() {
   var loader:URLLoader = new URLLoader();
   ponerListeners(loader);
   var peticion:URLRequest=new URLRequest("dailymotion.xml");
   loader.load(peticion);
}

function ponerListeners(dispatcher:IEventDispatcher):void {
   dispatcher.addEventListener(Event.COMPLETE, completeHandler);
}

//Funcion que se ejecuta cuando termina la descarga.
function completeHandler(event:Event):void {

   var codigo_final:String="";
   var cargador:URLLoader=event.target as URLLoader;
   XmlExterno=new XML(cargador.data);
   var media:String="media:player";
   for each (var nodo in XmlExterno.children()) {
      for each (var nodo2 in nodo.children()) {
         for each (var nodo3 in nodo2.children()) {

            if (nodo2.localName()=="item") {
               for each (var nodo4 in nodo3.children()) {
                  if (nodo4.localName()=="content") {

                     var codigo_URL:String=nodo4.@url;
                     var barra:int=codigo_URL.lastIndexOf("/");
                     var codigo:String=codigo_URL.substr(barra+1,codigo_URL.length);

                     if (codigo_final=="") {
                        codigo_final=codigo;
                     }
                     //trace(codigo);
                     break;
                  }
                  break;
               }
            }

            txt_content.htmlText=nodo.item.title[0];
            txt_content_body.htmlText=nodo.item.description[0];
         }
      }
   }
   //trace(codigo_final);
   var textofinal:String='"'+codigo_final+'"';
//CODIGO FINAL ES EL IDENTIFICADOR DEL VIDEO QUE TIENE Q ESTAR ENTRECOMILLADO
   trace(textofinal);
}
//Empezamos
CargarXML();


Código del XML donde se encuentra la información:

Código XML :

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss" xmlns:dm="http://www.dailymotion.com/dmrss">
   <channel>
   <title>Zoomin_Espana - V�deos m�s recientes - Dailymotion</title>
   <link>http://www.dailymotion.com/user/Zoomin_Espana/1</link>
   <description></description>
    <itunes:subtitle>Dailymotion - Zoomin_Espana's Videos M�s Recientes</itunes:subtitle>
    <itunes:summary></itunes:summary>

   <itunes:owner>
      <itunes:name>Dailymotion</itunes:name>
      <itunes:email>[email protected]</itunes:email>
   </itunes:owner>
   <itunes:author>Zoomin_Espana</itunes:author>
   <itunes:image href="http://www.dailymotion.com/images/dailymotion_itunes.jpg"/>
   <itunes:explicit>no</itunes:explicit>

   <itunes:category text="TV &amp; Film" />
   <language>en-US</language>
   <lastBuildDate>Thu, 03 Mar 2011 17:38:32 +0100</lastBuildDate>
      <image>
          <url>http://www.dailymotion.com/images/dailymotion.jpg</url>
          <title>Zoomin_Espana - V�deos m�s recientes - Dailymotion</title>
          <link>http://www.dailymotion.com/user/Zoomin_Espana/1</link>

          <width>400</width>
          <height>144</height>
      </image>
        <dm:link rel="uql" href="http://www.dailymotion.com/rss/user/Zoomin_Espana/1" type="application/rss+xml"/>
        <dm:link rel="sort_by_visited-week" title="Los + vistos" href="http://www.dailymotion.com/rss/visited-week/user/Zoomin_Espana/1" type="application/rss+xml"/>
        <dm:link rel="sort_by_rated-week" title="M�s Valorados" href="http://www.dailymotion.com/rss/rated-week/user/Zoomin_Espana/1" type="application/rss+xml"/>
        <dm:link rel="next" href="http://www.dailymotion.com/rss/user/Zoomin_Espana/2" type="application/rss+xml"/>
        <dm:link rel="nextUql" href="http://www.dailymotion.com/rss/user/Zoomin_Espana/2" type="application/rss+xml"/>

        <item>
            <title>Resumen de las bolsas de Espa�a, Europa, EEUU y Asia</title>
            <link>http://www.dailymotion.com/video/xhcqml_resumen-de-las-bolsas-de-espana-europa-eeuu-y-asia_news</link>
            <description><![CDATA[<a href="http://www.dailymotion.com/video/xhcqml_resumen-de-las-bolsas-de-espana-europa-eeuu-y-asia_news"><img align="right" width="120" height="90" src="http://static2.dmcdn.net/static/video/358/741/29147853:jpeg_preview_medium.jpg?20110303173014" style="border: 2px solid #B9D3FE;"></a><p>Cierre y situaci�n a media jornada en el IBEX y en los mercados europeo, asi�tico y estadounidense.</p><p>Autor: <a href="http://www.dailymotion.com/Zoomin_Espana"><img src="http://static2.dmcdn.net/static/user/373/304/35403373:avatar_medium.jpg?20110214154454" width="80" height="80" alt="avatar"/>Zoomin_Espana</a><br />Etiquetas: <a href="http://www.dailymotion.com/tag/Internacional">Internacional</a> <a href="http://www.dailymotion.com/tag/zoomin">zoomin</a> <br />Enviado: 03 marzo 2011<br />Valoraci�n: 0.0<br />Votos: 0<br /></p>]]></description>
            <author>[email protected] (Zoomin_Espana)</author>
            <itunes:author>Zoomin_Espana</itunes:author>
            <itunes:explicit>no</itunes:explicit>

            <itunes:summary>Cierre y situaci�n a media jornada en el IBEX y en los mercados europeo, asi�tico y estadounidense.</itunes:summary>
            <itunes:subtitle>Cierre y situaci�n a media jornada en el IBEX y en los mercados europeo, asi�tico y estadounidense.</itunes:subtitle>
            <dm:videorating>0.0</dm:videorating>
            <dm:videovotes>0</dm:videovotes>
            <dm:link rel="uql" href="http://www.dailymotion.com/rss/video/xhcqml_resumen-de-las-bolsas-de-espana-europa-eeuu-y-asia_news" type="application/rss+xml"/>
            <dm:link rel="userProfile" href="http://www.dailymotion.com/rss/Zoomin_Espana" type="application/rss+xml"/>
            <dm:views>5</dm:views>

            <dm:comments>0</dm:comments>
            <dm:favorites>0</dm:favorites>
            <dm:id>xhcqml</dm:id>
            <dm:author>Zoomin_Espana</dm:author>
            <dm:loggerURL>http://logger.dailymotion.com/video/access/xhcqml?session_id=&amp;referer=&amp;country=ES&amp;key=cuk0v9ngj90of34djlhhyjc&amp;v=4d6fee18&amp;i=580207e7&amp;h=5e7badb890a065603511fbefb6eacc67</dm:loggerURL>

            <dm:authorAvatar>http://static2.dmcdn.net/static/user/373/304/35403373:avatar_medium.jpg?20110214154454</dm:authorAvatar>
            <dm:relativeDate>enviado hace 38 minutos</dm:relativeDate>
            <dm:channels>news</dm:channels>
            <pubDate>Thu, 03 Mar 2011 17:00:31 +0100</pubDate>
            <guid>http://www.dailymotion.com/video/xhcqml_resumen-de-las-bolsas-de-espana-europa-eeuu-y-asia_news</guid>
            <media:title>Resumen de las bolsas de Espa�a, Europa, EEUU y Asia</media:title>

            <media:credit>Zoomin_Espana</media:credit>
            <media:thumbnail url="http://static2.dmcdn.net/static/video/358/741/29147853:jpeg_preview_large.jpg?20110303173014" height="240" width="320" />
            <media:player url="http://www.dailymotion.com/video/xhcqml_resumen-de-las-bolsas-de-espana-europa-eeuu-y-asia_news" height="360" width="480"><![CDATA[<iframe frameborder="0" width="480" height="360" src="http://www.dailymotion.com/embed/video/xhcqml"></iframe>]]></media:player>
            <media:group>
                <media:content url="http://www.dailymotion.com/embed/video/xhcqml" type="text/html" duration="128" width="480" height="360"/>
                <media:content url="http://www.dailymotion.com/swf/video/xhcqml" type="application/x-shockwave-flash" duration="128" width="480" height="360"/>
            </media:group>
            <itunes:keywords>Internacional, zoomin</itunes:keywords>

            <media:category label="Internacional">Internacional</media:category>
            <media:category label="zoomin">zoomin</media:category>
        </item>


EL CODIGO QUE EXTRAIGO DEL XML EN ESTE CASO ES "xhcqml"
Código del archivo que carga el visor de DAILYMOTION:

Código ActionScript :

package {
   import flash.display.*;
   import flash.events.*;
   import flash.net.*;
   import flash.system.Security;

   public class CargarVideo extends MovieClip {
      // The player SWF file on www.dailymotion.com needs to communicate with your host
      // SWF file. Your code must call Security.allowDomain() to allow this communication.
      Security.allowDomain("www.dailymotion.com");

      // This will hold the API player instance once it is initialized.
      public var player:Object;

      public var loader:Loader = new Loader();

      public function CargarVideo() {
         this.loader.contentLoaderInfo.addEventListener(Event.INIT, this.onLoaderInit);
         this.loader.load(new URLRequest("http://www.dailymotion.com/swf?enableApi=1"));
      }

      public function onLoaderInit(event:Event):void {
         addChild(this.loader);
         this.loader.content.addEventListener("onReady", this.onPlayerReady);
         this.loader.content.addEventListener("onError", this.onPlayerError);
         this.loader.content.addEventListener("onStateChange", this.onPlayerStateChange);
      }

      public function onPlayerReady(event:Event):void {



         // Event.data contains the event parameter, which is the Player API ID
         trace("player ready:", Object(event).data.playerId);

         // Save a reference to this player's instance
         this.player=this.loader.content;

         // Set appropriate player dimensions for your application
         this.player.setSize(990, 570);

         // Once this event has been dispatched by the player, we can use
         // cueVideoById, loadVideoById, cueVideoByUrl and loadVideoByUrl
         // to load a particular YouTube video.
//AQUI ES DONDE TIENE QUE IR FINALMENTE EL CÓDIGO QUE HEMOS SACADO DEL XML
         this.player.loadVideoById("xhcqml");

         //trace(textofinal);
      }

      public function onPlayerError(event:Event):void {
         // Event.data contains the event parameter, which is the error code
         trace("player error:", Object(event).data);
      }

      public function onPlayerStateChange(event:Event):void {
         // Event.data contains the event parameter, which is the new player state
         trace("player state:", Object(event).data);
      }
   }
}


Llevo ya un tiempo atascado aqui y no le encuentro solución, por favor una ayuditaa...mis conocimientos de AS3 son limitados. Gracias

Por rogopi

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Mar 2011 11:54 am
En el onPlayerReady tienes hardcodeado un video que supongo no es el que quieres y deberías quitar:

this.player.loadVideoById("xhcqml");

Luego tienes que agregar una funcío pública para reproducir un video:

Código ActionScript :

public function playVideo(videoId:String):void{
    this.player.loadVideoById(videoId); 
}


Y luego llamar desde fuera. ¿Como instancias el player? Tienes la clase asociada a un MovieClip, o la instancias con new, ejemplo

var miPlayer = new CargarVideo()

Si es un clip, tienes que darle nombre de instancia y luego usarlo para cargar:

miClip.playVideo(codigo)

Sino usas el nombre de instancia, en este caso miPlayer. Claro, deberás esperar a que termine de cargar el XML, sino no funcionará

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Mar 2011 12:08 pm
Si lo pones 'hard-coded' si funciona?

o sea, con esta linea this.player.loadVideoById("xhcqml"); carga el video y lo muestra?

Si es asi, tienes que usar algun tipo de 'dependency injection', o sea, crea una propiedad (una variable) y luego le pasas el valor que has encontrado ya sea a travez de su constructor o usando getters y setters. Dependera de como agregas la instancia de 'CargarVideo' a tu pelicula.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 07 Mar 2011 12:29 pm
la cosa es que yo en la película extraigo el identificador del vídeo que quiero mostrar (pongamos por ejemplo de la URL : http://www.dailymotion.com/swf/video/xhcqml extraigo mediante la lectura del XML, sacando sus hijos y haciendo el split del contenido de la etiqueta <media> el identificador "xhcqml"). Ya tengo el identificador, ahora lo que necesito es que el código de la clase AS coja ese parámetro y lo inserte como texto dentro de

this.player.loadVideoById("xhcqml");

para q cuando se cambie la url del XML feed desde su página web, se actualice a su vez el vídeo que se reproduce en el flash...no sé si me explico...

he intentado fusionar ambos códigos dentro de la clase AS pero no consigo extraer el identificador del vídeo del XML...no me lo lee

se entiende mas o menos lo que busco?

Por rogopi

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Mar 2011 01:54 pm
Si se entiende lo que quieres pero no has respondido las preguntas que te hemos hecho. Por favor, lee nuestros mensajes nuevamente y responde detalladamente.

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 07 Mar 2011 03:41 pm
Si, si lo pongo hardcoded si funciona sin ningún problema.

La clase la tengo asociada a un MovieClip del escenario cuyo nombre es "player". He hecho las modificaciones y me da el siguiente error:

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at CargarVideoX/playVideo()
at noticiasentero_AS3_ENUNFRAME_fla::MainTimeline/frame30()

CargarVideoX es la public class y playvideo la función a la que desde el escenario mediante "player.playVideo("xhcqml")" he pasado el parametro que me interesa....

Por rogopi

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Mar 2011 04:13 pm

solisarg escribió:

Claro, deberás esperar a que termine de cargar el XML, sino no funcionará


Otra opcion es como te mencione, con 'dependency injection'.

En tu clase CargarVideo, agrega una propiedad, por ejemplo:

Código ActionScript :

public var videoID : String;


Luego en tu pelicula principal, en el fotograma donde esta instanciado el 'player', pones:

Código ActionScript :

player.videoID = 'xhcqml';

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 07 Mar 2011 04:29 pm
genial, por ahora la comunicación esta solventada, MUCHAS GRACIAS!

ahora bien, a la hora de disponer el código del vídeo que he extraido del XML me da el siguiente error (cuando ejecuto el SWF en el FLASHPLAYER 10):

Error #2044: ioError no controlado: text=Error #2032: Error de secuencia. URL: http://www.dailymotion.com/sequence/play/"xhcqml"?parentURL=PlayerAPI%3A%20unknown%20referrer&isEmbedded=1&isExternal=0&chromeless=0
at com.dm.util::Tools$/load()
at com.dm.util::Api/loadVideoCallback()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at SetIntervalTimer/onTimer()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

El código del fotograma donde está cargado el MovieClip donde cargo el vídeo es el siguiente:

Código ActionScript :

stop();
var XmlExterno:XML;

//Carga el XML
function CargarXML() {
   var loader:URLLoader = new URLLoader();
   ponerListeners(loader);
   var peticion:URLRequest=new URLRequest("dailymotion.xml");
   loader.load(peticion);
}

function ponerListeners(dispatcher:IEventDispatcher):void {
   dispatcher.addEventListener(Event.COMPLETE, completeHandler);
}

//Funcion que se ejecuta cuando termina la descarga.
function completeHandler(event:Event):void {

   var codigo_final:String="";
   var cargador:URLLoader=event.target as URLLoader;
   XmlExterno=new XML(cargador.data);
   var media:String="media:player";
   for each (var nodo in XmlExterno.children()) {
      for each (var nodo2 in nodo.children()) {
         for each (var nodo3 in nodo2.children()) {

            if (nodo2.localName()=="item") {
               for each (var nodo4 in nodo3.children()) {
                  if (nodo4.localName()=="content") {

                     var codigo_URL:String=nodo4.@url;
                     var barra:int=codigo_URL.lastIndexOf("/");
                     var codigo:String=codigo_URL.substr(barra+1,codigo_URL.length);

                     if (codigo_final=="") {
                        codigo_final=codigo;
                     }
                     //trace(codigo);
                     break;
                  }
                  break;
               }
            }

            txt_content.htmlText=nodo.item.title[0];
            txt_content_body.htmlText=nodo.item.description[0];
         }
      }
   }
   //trace(codigo_final);
   var textofinal:String='"'+codigo_final+'"';

   trace(textofinal);
   player.videoId = textofinal;

}
//Empezamos
CargarXML();


el error me lo da cuando termina de leer el XML y se dispone a cargar el vídeo

Por rogopi

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Mar 2011 04:45 pm
me parece que esto:

Código ActionScript :

var textofinal:String='"'+codigo_final+'"'; 

tiene extra comillas y esta de mas.

prueba borrarlo y reemplazar el valor de la variable asi:

Código ActionScript :

player.videoId = codigo_final;

Por Acreonte

Claber

1543 de clabLevel

5 tutoriales
6 articulos

Genero:Masculino  

Digital Scientist

firefox
Citar            
MensajeEscrito el 07 Mar 2011 04:53 pm
SOLUCIONADO! muchas gracias por tu ayuda ;)

Por rogopi

3 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.