_CURSO DE PHP CAPITULO 1
_VARIABLES EN PHP 5
_OPERADORES
_ESTRUCTURAS DE CONTROL
_FUNCIONES
_CADENAS - CARACTERES
_CONJUNTO DE DATOS DE TIPO ARRAY
_PASO DE INFORMACIÓN ENTRE FORMULARIOS
_PROGRAMACIÓN ORIENTADA A OBJETOS
_ARCHIVOS Y ALMACENAMIENTO DE DATOS
_BASE DE DATOS CON MYSQL _
_SESIONES Y COOKIES
_LECTURA Y ESCRITURA DE ARCHIVOS XML
_APLICACIONES PRACTICAS DE XML
_GESTION DE ERRORES CON PHP 5
_CONEXIONES DESDE PHP 5
_CREACION DE ARCHIVOS PDF
 

CURSO DE PHP Y MYSQL GRATIS


Introducción

Existen en el mercado muchas publicaciones que hablan sobre XML y
sus tecnologías derivadas. En estos libros, que suelen ser de unas 1000
páginas, se hace un recorrido por todos los rincones de XML, DTD, XLST,
etcétera. Si lee alguna publicación de este tipo puede quedar desencantado
porque, entre tantos conceptos, no se ve una aplicación real de la
tecnología.

Como este libro es eminentemente práctico, me gustaría que el lector aprendiera
dos metodologías que se utilizan actualmente en la Web: RSS y XMLRPC.
La primera describe una forma de exportar información, noticias o
datos al exterior para que, desde cualquier página Web, puedan leerse. La
segunda es una forma de trabajar que permite ejecutar funciones que están
almacenadas en un ordenador remoto.

Compartir información con RSS
RSS es un mecanismo para publicar información sobre el contenido de un
sitio Web y es muy común utilizarlo para dar las últimas noticias. Esto
permite introducir en su sitio Web un documento XML con noticias de
otras páginas.

La versión original de RSS, la 0.90, fue creada por Netscape con el objetivo
de crear portales servidores de noticias de distinta categoría, pero resultó
algo complejo de utilizar. La versión 0.91, mucho más simple, la
desarrolló la empresa UserLand Software, quien lo comercializó como
parte de sus productos basados en página Web, como los Weblogs.

Un tercer grupo de desabolladores independientes, basándose en los comienzos
de RSS, la versión 0.90, escribió una nueva revisión basada en
RDF; esta versión recibe el nombre de RSS 1.0. Desde la aparición de la
versión 0.1, UserLand Software ha seguido desarrollando las versiones
0.92, 0.93, 0.94 y la 2.0.

Distintos formatos
Existen 7 formatos distintos y, como programador, debería ser lo suficiente
habilidoso como para manejar cualquiera de ellos. Pero como el contenido lo produce la Web que desea exportar su información, tendrá que
tener en cuenta las características de cada formato:

Como ejemplo, vamos a leer el RSS 1.0 de la Web del autor www.luisy
fernanda.net, que contiene esta información:
<?xml version="1.0" encoding="iso-8859-1" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22 -rdf-syntax-ns#"
xmlns="http://my.netscape.com/rdf/simple/0.9/">
<channel>
<title>www.luísyfernanda.net</title>
<link>http://www.luisyfernanda.net/índex.php?
blogId=2</link>
<descriptionx/description>
</channel>
<item>
<title>PHP 5 en la línea de salida</title>
<descriptiorv>íüadi Gutw.&ia.s dice qu.e en. 24 horas estará
lista la nueva versión de PHP5 . . • que nervios .... &lt;br/&gt;Para el que no pueda esperar, la Reléase
Candidate 4 está en: &lt;a href =&quot;http : //
snaps.php.net/~andi/&quot;&gt;http://snaps.php.net/
~andi/&lt;/a&gt;&lt;br/&gt; &lt;br/&gt;&lt;br/&gt;</
description>
<link>http://www.luisyfernanda.netíndex.php?op=View
Article&amp;articleId=41&amp;blogId=2</link>
</item>
< item>
<title>Galopín 1.0</title>
<description>
&lt ;a
href=&quot;http://www.luisyfernanda.net/resserver.php? blogId=2&
amp; resource=DSCN0840 . JPG &quot; &gt; &lt; img align=&quot; right&quot ;
style=&quot;margin: 5px;&quot; border=&quot;O&quot; alt=&quot;Rueda
de prensa&quot; src=&quot;http://www.luisyfernanda.net/resserver .
php?blogId=2&amp;resource=DSCN0 840.JPG&amp;mode=preview&quot; /
&gt;&lt;/a&gt;
Hoy se ha presentado en la A.A.V.V. de La Antigua, en
Mérida, la versión 1.0 de Galopín, una herramienta escrita en
PHP por dos desarrolladores extremeños. Tras los forcejeos con
la prensa y las salidas con quite de los implicados, nos
quedamos con la miel en los labios, deseando probar la
aplicación y, porqué no, destriparla para ver como funciona el
chisme.&lt;br /&gt;El que quiera descargarla puede hacerlo
desde la Web de sinuh en &lt;a href=&quot;http://
galopin.sinuh.org/&quot;&gt;galopin.sinuh.org&lt;/a&gt;&lt;br /
&gt;Sclt;'bx/Síg£;
&lt;br /&gt;</description>
<link>http://www.luisyfernanda.net/
index.php?op=ViewArticle&amp;articleld=4 0&amp;blogId=2</link>
</item>
<item>
<title>EL TIEMPO DE MERIDA</tÍtle>
<description>
Hace unos días empecé escribir alguna cosilla para averiguar
la temperatura que hay en Mérida. Los datos los recojo de la
Web del Instituto Nacional de Meteorología, y los plasmo en una
tabla. Si quieres puedes utilizar los datos llamando a la Web:
&lt; a href = &quot;http://www.luisyfernanda.net/
clase_tiempo.php?LOCALIDAD=MERIDA&quot;&gt;http://
www.luisyfernanda.net/clase_tiempo.php?LOCALIDAD=MERIDA.&lt;/
a&gt;&lt;br /&gt;Donde pone LOCALIDAD se puede poner alguna
población distinta como, CORIA, CACERES, BADAJOZ,UNIVERSIDAD,
etc...&lt;br /&gt;El módulo está en fase alfa y el dibujito que
aparece puede que no corresponda con la realidad, pero es un
avance ;)&lt;br /&gt;En unas semanas implementaré el servicio
en SOAP, como lo hace weather.com.&lt;br /&gt;Saludos.&lt;br /
&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt; &lt;br /&gt;</description>
<link>http://www.luisyfernanda.net/
index.php?op=VíewArticle&amp;articleld=3 6&amp;blogId=2</link>
</item>
<item>
<title>PHP 5 a punto de caramelo</title>
<description>Hace un par de días en la lista interna de
desarrolladores de PHP, Andi Gutmans ha escrito que PHP5 ya
está horneado y le falta un poquito de chocolate para salir al
mercado. Están teniendo algún problemilla con librerías que
controlan el acceso a memoria, pero se prevé que la primera
versión estable salga esta semana. &lt;br /&gt;&lt;a
href=&quot;http://www.zend.com/lists/php-dev/2004 07/
msg00059.html&quot; &gt;Notica de Zend &lt;/a&gt;&lt;br/
&gt;&lt;br /&gt;</description>
<link>http://www.luisyfernanda.net/
index.php?op=ViewArticle&amp;articleld=3 3&amp;blogId=2</link>
</item>
<item>
<title>OpenOffice2htm en Sourceforge</title>
<description> Acaban de aceptar el Proyecto OpenOffice2htm
en sourceforge, ellos sabrán lo que hacen. Lo que pasa es que
tengo un pequeño problema; entre tanto menú de administración
de ficheros, documentos, etc... me pierdo y, por ahora, no he
podido subir ningún fichero de la clase. Espero aclararme estos
días y tener listo la primera Reléase en &lt;a
href=&quot;http://www.luisyfernanda.net/
www.sourceforge.com&quot;&gt;www.sourceforge.com.&lt;/
a&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;</description>
<link>http://www.luisyfernanda.net/
index.php?op=ViewArticle&amp;articleld=17&amp;blogId=2</link>
</item>
</rdf:RDF>

El archivo anterior muestra las últimas noticias de la Web www.luisy
fernada.net sobre PHP y proyectos en los que el autor está involucrado.
Si se fija, no es más que un archivo XML, con un formato determinado.
Puede verlo en la figura 15.1.

Tiene dos partes diferenciadas:

• Una parte de descripción del documento entre las etiquetas <chann
e l > . En esta zona puede encontrar el título de Web donde están las
noticias, la URL del archivo RSS y una descripción de la temática que
aborda.

• Otra zona, entre los nodos < i t em>, que contiene todas las noticias que
quiere exportar.


Leer un archivo RSS
En el capítulo anterior vimos cómo parsear un archivo XML creado por
nosotros mismos. Esta vez, tenemos que extraer el contenido que nos interesa
de un archivo con un formato determinado. Vamos a crear un pequeño
objeto que sea capaz de insertar en nuestra Web las noticias de la
página www.luisyfernanda.net. Por supuesto, vamos a utilizar SimpleXML
por ser una de las herramientas estrella de PHP 5:

<?php
class SimpleRSS
{
prívate $RSS;
function construct($fichero)
{
$this->RSS = simplexml_load_file($fichero);
}
public function parsea_item()
{
foreach ($this->RSS->item as $item) {
$this->parsea_titulo($item);
$this->parsea_descripcion($item);
$this->parsea_enlace($item);
}
}
private function parsea_titulo($item)
echo $item->title • "<br>";
echo "<hr>";
prívate function p,arsea_descripcion ($item)
echo $item->descr.iption . "<br>";
prívate function p#rsea_enlace($item)
echo $item->link • "<br>";
public function paísea_cabecera()
&c^o "Titilo-. « . St^va,-^S.S,S->et^™^l->tlt"Le . "-JaxV-,
echo "Web: " . $this->RSS->channel->link . "<br>";
echo "<hr>";
}
}
$RSS = new SimpleRSS("http://www.luisyfernanda.net/
rss.php?categoryId = 3&blogId=2 ") ;
$RSS->parsea_cabecera () ;
$RSS->parsea_item();
?>

Si ejecuta el programa, tendrá como resultado las últimas noticias sobre
PHP del portal www.luisyfernanda.net separadas por líneas horizontales.
El método público p a r s e a _ i t em () es el encargado de extraer noticia
a noticia y mandarlas al navegador. Este método hace 3 llamadas a 3
métodos distintos que se encargan de recuperar el título, el enlace a la
noticia y la descripción.

Hemos separado los métodos para que cada lector personalice la forma
de visualizar los distintos datos. Mi forma particular puede verla en la figura
15.2. Por ejemplo, el título podría mostrarlo en azul y el texto en gris,
todo metido en una tabla.

Escribir archivos RSS
Los archivos XML y en particular los archivos RSS pueden generarse de la
misma forma que creamos un fichero de texto, añadiendo etiquetas con
cierto criterio a un archivo de texto, pero la opción más correcta es utilizar
DOM para generar nuestros propios documentos de noticias.
Como ya sabe, la extensión DOM permite añadir, borrar y modificar elementos
a lo largo de un documento en cualquier orden.

Para este cometido tenemos la siguiente clase, que nos va a generar documentos
RSS a partir de cualquier fuente de datos.
<?php
class GeneraRSS
{
prívate {documento;
private $raiz;
prívate $channel;
private $titulo;
private $enlace;
private {descripción;
private $item;
function construct()
{
$this->documento = new domdocument("1•0" ) ;
$this->inicio ( ) ;
}
private function inicio()
{
$this->raiz = $this->documento->createElement("rdf:RDF" ) ;
$this->raiz->setAttribute('xmlns:rdf','http://www.w3.org/1999/
02/22-rdf-syntax-ns#');
$this->raiz->setAttribute('xmlns','http://purl.org/rss/1.0/');
$this->raiz = $this->documento->appendChild($this->raiz);
}
public function canal($titulo,$enlace,$descripcion,$sobre)
{
$this->channel = $this->documento->creatéElement("channel");
$this->channel = $this->raiz->appendChild($this->channel);
$this->titulo=$this->documento->createElement ( ' t i t l e ' ) ;
$this->textotitulo=$this->documento->createTextNode($titulo) ;
$ t h i s - > t i t u l o - > a p p e n d C h i l d ( $ t h i s - > t e x t o t i t u l o ) ;
$this->channel->appendChild($this->titulo);
$this->enlace=$this->documento->createElsment('link');
$this->textoenlace=$this->documento->createTextNode($enlace);
$this->enlace->appendChild($this->textoenlace);
$this->channel->appendChild($this->enlace);
$ t h i s - > d e s c r i p c i o n = $ t h i s - > d o c u m e n t o - > c r e a t e E l e m e n t
( ' d e s c r i p t i o n ' ) ;
$ t h i s - > t e x t o d e s c r i p c i o n = $ t h i s - > d o c u m e n t o - > c r e a t e T e x t N o de
($descripcion);
$this->descripcion->appendChild($this->textodescripcion;
$this->channel->appendChild($this->descripcion);
}
public function item_nuevo($titulo,$enlace / $descripcion)
{
$this->item = $this->documento->createEl<?ment('item');
$this->item = $this->raiz->appendChild($this->item);
$ t h i s - > t i t u l o = $ t h i s - > d o c u m e n t o - > c r e a t e E l e m e n t ( ' t i t l e ' ) ;
$this->textotitulo=$this->documento->createTextNode($titulo);
$ t h i s - > t i t u l o - > a p p e n d C h i l d ( $ t h i s - > t e x t o t i t u l o ) ;
$this->item->appendChild($this->titulo);
$this->enlace=$this->documento->createElement('link');
$this->textoenlace=$this->documento->createTextNode($enlace);
$this->enlace->appendChild($this->textoenlace);
$this->item->appendchild($this->enlace);
$ t h i s - > d e s c r i p c i o n = $ t h i s - > d o c u m e n t o - > c r e a t e E l e m e n t
( ' d e s c r i p t i o n ' ) ;
$ t h i s - > t e x t o d e s c r i p c i o n = $ t h i s - > d o c u m e n t o - > c r e a t e T e x t N o de
($descripcion);
$this->descripcion->appendChild($this->textodescripcion);
$this->item->appendChild($this->descripción);
$this->items[]=$this->item;
}
public function grabar($fichero)
{
$this->documento->save($fichero);
}
}
^documento = new GeneraRSS () ;
^documento->canal ("www.luisyfernanda.net" , "http://www.luisy
fernanda.net", "La Web del auto","");
$doc\imei\to->itev?1_YY\ievo VMaiwial Imprescindible, de PHP 5", "http-.//
viww.luisyfernanda.net", "Ya a la venta");
$documento->item_nuevo("Nueva reléase de PHP 5","http://
www.iuisyfernanda.net","La nueva reléase corrige algunos fallos");
Sdocumento->grabar("miRSS.xml");
?>

La clase anterior se puede guardar en un archivo independiente y utilizar
cuando sea necesario en el transcurso de un proyecto.
Aunque no implementa todas las especificaciones de RSS 1.0 puede utilizarse
para generar noticias de nuestra base de datos.

Nota:
Si desea modificar ia ciase para que contemple todas las opciones
de Ja especificación RSS 1.0, puede visitar ia Web http:llpurt.orgl
rss/1.0/.

En el capítulo anterior, vimos cómo se puede generar un archivo XML con
una sucesión de llamadas a métodos. Esta vez, hemos encapsulado todas
las llamadas en varios métodos que se encargan de generar la parte de
descripción del RSS y, por otro lado, las noticias.

El método c r e a t e E l e m e n t () se encarga de crear nuevos nodos para después
encadenarlos conappendChild () a los nodos padre. Para crear un
nodo de texto, sin embargo, tenemos que utilizar el método c r e a t e T e x t -
Node (); una vez creado el nodo de texto tenemos que asociarlo a un nodoelemento
(una etiqueta).

El último paso es hacer una llamada al método s a v e () con el nombre del
fichero como parámetro para guardar el archivo RSS.

Servicios Web XML-RPC
El trabajo como programador puede llevarle a desarrollar aplicaciones
para distintos Sistemas Operativos y en distintos lenguajes de programación.

Si, en algún momento, necesita comunicar dos programas que están funcionando
en máquinas distintas (un servidor Windows y otro gnuLinux) y escritos con lenguajes diferentes, puede que XML-RPC sea la solución perfecta.

El mecanismo permite que el ordenador cliente pueda acceder a los métodos
del ordenador servidor y ejecutar rutinas almacenadas remotamente.

Este apartado muestra algún ejemplo de cómo implementar y explotar un
servicio Web con la librería de clase IXR creada por Simón Willison bajo el
auspicio de Open Source.

Una llamada XML-RPC consiste en dos partes: una pregunta y una respuesta.
Cada una de las partes es un archivo XML que contiene los parámetros
solicitados al servidor o los datos devueltos.

Una pregunta al servidor puede ser como la que sigue:
<methodCalI>
<methodName>conterit.getNotícias</methodName>
<params>
<param>
<valuexint>23</ínt ><value>
</param>
</params >
</methodCall>

Como puede ver, es un archivo XML con una definición determinada. La
etiqueta <methodName> contiene el nombre del método que debe llamarse
en el servidor y <param> contiene un parámetro que se le pasará al método
de la llamada.

El documento anterior será transmitido vía HTTP mediante POST al servidor
de XML-RPC, que parseará el documento, ejecutará la función y
devolverá un documento similar con los datos de la respuesta.

Clase IXR
IXR es un conjunto de clases que implementa un servidor y un cliente de
XML-RPC.

Nota:
Puede encontrar la librería en la Web http://scripts.iricutio.com/
xmlrpc/ o en la página del libro en http://unuzu.nnai/amultimedia.
com.

Lo mejor de la programación orientada a objetos es que no necesita saber
cómo funcionan las clases que utilice, sólo conocer el uso correcto de los
métodos. Así, puede utilizar la clase IXR de la manera que vamos a ver,
sin conocer siquiera el formato de los archivos XML-RPC.


Cliente XML-RPC
Los servicios XML-RPC tienen una dirección Web con una página Web
escrita en PHP. Si escribe la dirección completa en el navegador se producirá
un error, porque la Web esperará que mande mediante POST un
archivo XML. Para utilizar sus servicios Web, o los servicios Web de alguna
empresa como UserLand tiene que utilizar un cliente XML-RPC
escrito, en este caso, en PHP 5. En este caso vamos a utilizar la clase
IXR__Client de la librería IXR. El ejemplo muestra cómo utilizar el cliente
en varios pasos:

• Crear un objeto cliente con la URL pasada como parámetro.
• Usar el método q u e r y () para hacer la consulta al servicio Web.
• Extrae el resultado con el método g e t R e s p o n s e () .
Lo primero que vamos a hacer es implementar un pequeño objeto para
recuperar la fecha de un servidor remoto:

<?php
require_once('IXR_Library.inc.php');
class XMLRPCFechacliente {
private $cliente;
function construct($url,$debug=false) {
$this->cliente= new IXR__Client ($url) ;
$this->clíente->debug=$debug;
}
function getFecha($argumentol)
{
if (!$this->cliente->query('fecha.getFecha',$argumentol)) {
trigger_error($this->cliente->getErrorCode () .
' : '.$this->cliente->getErrorMessage());
return false;
}
return $this->cliente->getResponse () ;
}
}
?>

La clase XMLRPCFechacliente implementa dos métodos. El constructor
crea un objeto cliente IXR que recibe el servidor de servicios Web. El
método g e t F e c h a () tramita la petición de la fecha con el servidor y obtiene
una respuesta que devuelve a la página Web. Si todo va bien, el servidor
enviará la fecha del lugar donde esté.

La llamada a q u e r y () tiene como parámetro primero el nombre del método
que debe ejecutar el servidor y, como segundo parámetro, un argumentó que puede pasarse. La Web que quiera mostrar esta información
debe crear el objeto anterior más o menos como se muestra en el siguiente
ejemplo:

<?php
require_once('XMLRPCFechacliente.php');
$servidor='http://www.luisyfernanda.net/Fecha.php';
$fechaRemota= new XMLRPCFechacliente($servidor) ;
echo $fechaRemota->getFecha("Hoy");
?>

Si evalúa el código en tan sólo 4 líneas, puede recibir cualquier tipo de
información que el servidor tenga. Para ello debe crear una variable que
contenga el nombre del servidor y la página PHP que contiene el programa
de respuesta. La instanciación del objeto XMLRPCFechacliente y la
llamada al método g e t F e c h a () es suficiente para desencadenar la conexión
con el servidor.

Servidor XML-RPC
En el apartado anterior ha visto que puede utilizar servicios Web ofrecidos
por otras empresas para averiguar la hora de un País remoto, el cambio
de moneda, el tiempo o, incluso, el catálogo de libros de una conocida
tienda on-line. Pero lo realmente interesante es poder crear sus propios
servicios Web.

La clase IXR_Server hace la mayoría del trabajo por usted, que puede
emplear el tiempo en inventar nuevos servicios Web.

Hemos creado una clase que implementa el servicio g e t F e c h a (), que el
objeto cliente utiliza.

<?php
require_once('IXR_Library.inc.php');
class XMLRPCFechaservidor extends IXR_Server
{
function construct()
{
$this->IXR_Server(array('fecha.getFecha' => 'this:getFecha'));
}
function getFecha($argumentol)
{
if ($argumentol=="Hoy") {
$fecha = "La fecha remota es:" . date("d-m-Y");
} else {
$fecha = "Especifique un dia";
}
return $fecha;
}
}
?>

La clave para entender el funcionamiento del servidor está en el constructor.
Aquí se crea un array con el nombre de los métodos que se pueden
utilizar desde fuera.

El primer valor, f e c h a . g e t F e c h a , es el nombre que el cliente debe emplear
para recuperar la Fecha del Servidor y el segundo valor, t h i s . g e t
Fecha, es el método perteneciente al servidor que se ejecutará cuando
reciba una pregunta a esa función.

La definición del método que envía la fecha se hace como ya estamos acostumbrados.

Lo que hemos visto es sólo la definición de la clase, pero necesitamos una
página Web de apoyo que instancie el objeto y lo ejecute. Puede ser tan
sencillo como:

<?php
require_once('XMLRPCFechaservidor.php');
$servidor= new XMLRPCFechaservidor() ;
?>

Usos de XML-RPC
Los ejemplos que hemos visto no son especialmente excitantes, pero dan
una idea de lo sencillo que es exportar cualquier tipo de información. La
verdadera potencia de los servicios Web es que permiten disfrutar de nuevas
funcionalidades de las que no disponemos. Podríamos crear un servicio
Web que permitiera a usuarios de PHP 4 utilizar nuestro objeto de
SimpleXML, pero esto lo dejo en manos del lector.

Resumen
XML se ha convertido en los últimos años en un estándar libre para el intercambio
de información. Incluso Microsoft, poco amiga de los archivos
abiertos, está implementando servicios en XML con su plataforma . NET.
Después de leer este capítulo, podrá crear elegantes páginas que contengan
noticias relevantes sobre cualquier tema y exportarlas a otras páginas
amigas gracias a la tecnología RSS.

En cuanto a la creación de servicios Web, existe una controversia entre
dos desarrollos principales: XML-RPC y SOAP de Microsoft. SOAP (Simple
Object Access Protocol), es una implementación muy extensa de Microsoft
para la creación de servicios Web. Pese a que su definición aboga por
la simpleza (Protocolo Simple), la paradoja es que es mucho más complicada
de utilizar que XML-RPC y por eso se escapa de los objetivos de este
libro.

Una de las nuevas características de PHP 5 es la inclusión de una extensión
para la generación de servidores y clientes SOAP, pero todavía está
en fase experimental.
El futuro cercano puede estar en SOAP, así que recomiendo al lector visitar
algunas páginas Web sobre el tema para comenzar a entender su funcionamiento.

 
|
|
|
|
|
Se realiza diseño de páginas webs, curso de diseño de páginas web, cursos PHP, cursos flash, posicionamiento web, venta de hosting y dominios.

© Copyright socioscreativos 2009 Todos los Derechos Reservados
Av. La Marina 2553 Segundo Piso Of. 204 Teléfono: 4019750 - Celular 992723392