Leer RSS con PHP y mostrar su contenido

logo Euromillones

Aprovechando que en mi empresa hemos hecho un fondo para jugar a Euromillones, decidí que la mejor forma de saber los aciertos era automatizar la comprobación de la combinación jugada.

Para ello, nos serviremos del RSS de loteriasyapuestas.es, donde podemos obtener los resultados del último sorteo y adicionalmente, podemos obtener el escrutinio y calcular nuestras posibles ganancias.

Desde la propia página de loteriasyapuestas encontramos que el FEED que nos interesa está en la siguiente URL: «http://www.loteriasyapuestas.es/es/euromillones/resultados/.formatoRSS«.

Como se puede ver, podríamos comprobar el resultado de otros sorteos, pero para el ejemplo, nos vamos a centrar en el sorteo de Euromillones.

Podéis descargar el código completo desde el siguiente enlace: Ejemplo de lectura de euromillones

Y se puede ver el ejemplo funcionando en: http://raularin.com/euromillones/

Para ello, usaremos un pequeño código en PHP que meteremos en un fichero llamado classRSS.php que contrendrá la manera de leer el RSS y su tratamiento básico (extracción del título, url y cuerpo de cada entrada).

<? class RssReader { var $url; var $data; function RssReader ($url){ $this->url;
$this->data = implode («», file ($url));
}

function get_items (){
preg_match_all («/.*<\/item>/xsmUi», $this->data, $matches);
$items = array ();
foreach ($matches[0] as $match){
$items[] = new RssItem ($match);
}
return $items;
}
}

class RssItem {
var $title, $url, $description;

function RssItem ($xml){
$this->populate ($xml);
}

function populate ($xml){
preg_match («/(.*) <\/title>/xsmUi», $xml, $matches); $this->title = $matches[1]; preg_match («/ (.*) <\/link>/xsmUi», $xml, $matches); $this->url = $matches[1]; preg_match («/ (.*) <\/description>/xsmUi», $xml, $matches); $this->description = $matches[1]; }

function get_title (){
return $this->title;
}

function get_url (){
return $this->url;
}

function get_description (){
return $this->description;
}
}
?>

Usando este fichero como base, los siguientes pasos son muy sencillos:

1.- Lectura del contenido del RSS:

Para ello simplemente crearemos un objeto de la clase mencionada anteriormente, pasándole como parámetro la URL de FEED que queremos leer:

$rss = new RssReader («http://www.loteriasyapuestas.es/es/euromillones/resultados/.formatoRSS»);

2.- Una vez obtenido el contenido del RSS, pasaremos a leer cada una de las entradas, en nuestro caso, sólo nos interesa la primera, que corresponderá al último sorteo, por lo que nada más leer el contenido de la primera, salimos del blucle:

foreach ($rss->get_items () as $item){ //bucle para leer cada una de las entradas del feed
$claves = preg_split(«//», $item->get_description());
$numeros = preg_split(«/<\/b>/», $claves[1]);
$numeros = preg_split(«/ – /», $numeros[0]);
$numerosEstrella = preg_split(«/<\/b>/», $claves[2]);
$numerosEstrella = preg_split(«/ – /», $numerosEstrella[0]);
break;
}

Cada ítem tiene la forma:

<item>
	<title>Euromillones: premios y ganadores del viernes 12 de junio de 2015</title>
	<pubDate>Fri, 12 Jun 2015 22:21:14 +0200</pubDate>
	<link>http://www.loteriasyapuestas.es/es/euromillones/escrutinios/euromillones%2Dpremios%2Dy%2Dganadores%2Ddel%2Dviernes%2D12%2Dde%2Djunio%2Dde%2D2015</link>
	<description><![CDATA[
	<p>En el sorteo de <strong><a href="/es/euromillones">Euromillones</a></strong> del viernes 12 de junio de 2015, la combinación ganadora ha correspondido a los siguientes números:</p>
	
	<p><b>05 - 08 - 10 - 11 - 37</b> Estrellas: <b>07 - 09</b></p>
	
	<p>El reparto de premios queda como sigue:</p>
	
	<div class="detalleSorteo euromillones fondoBuscador buscadorAvanzado">
	<div class="cuerpoRegionInf tablaPremios">
	<div class="contenidoRegion">
	<table cellspacing="0" cellpadding="0" border="0" class="tablaDetalle"><tbody>
	<tr>
	<th>Categoría</th>
	<th>Acertantes</th>
	<th>Premios</th>
	<th>Acertantes Europa</th>
	</tr>
	
	<tr class="par">
	<td class="izquierda">1ª 5 + 2</td>
	<td>0</td>
	<td>129.204.405.00 €</td>
	<td>1</td>
	</tr>
	
	<tr class="impar">
	<td class="izquierda">2ª 5 + 1</td>
	<td>1</td>
	<td>319.955.44 €</td>
	<td>8</td>
	</tr>
	
	<tr class="par">
	<td class="izquierda">3ª 5 + 0</td>
	<td>4</td>
	<td>85.321.45 €</td>
	<td>10</td>
	</tr>
	
	<tr class="impar">
	<td class="izquierda">4ª 4 + 2</td>
	<td>21</td>
	<td>3.496.78 €</td>
	<td>122</td>
	</tr>
	
	<tr class="par">
	<td class="izquierda">5ª 4 + 1</td>
	<td>350</td>
	<td>172.98 €</td>
	<td>2.158</td>
	</tr>
	
	<tr class="impar">
	<td class="izquierda">6ª 4 + 0</td>
	<td>779</td>
	<td>82.27 €</td>
	<td>4.537</td>
	</tr>
	
	<tr class="par">
	<td class="izquierda">7ª 3 + 2</td>
	<td>1.049</td>
	<td>47.27 €</td>
	<td>5.641</td>
	</tr>
	
	<tr class="impar">
	<td class="izquierda">8ª 2 + 2</td>
	<td>15.156</td>
	<td>15.85 €</td>
	<td>77.391</td>
	</tr>
	
	<tr class="par">
	<td class="izquierda">9ª 3 + 1</td>
	<td>16.787</td>
	<td>12.10 €</td>
	<td>96.955</td>
	</tr>
	
	<tr class="impar">
	<td class="izquierda">10ª 3 + 0</td>
	<td>30.777</td>
	<td>10.57 €</td>
	<td>186.751</td>
	</tr>
	
	<tr class="par">
	<td class="izquierda">11ª 1 + 2</td>
	<td>78.411</td>
	<td>8.93 €</td>
	<td>387.954</td>
	</tr>
	
	<tr class="impar">
	<td class="izquierda">12ª 2 + 1</td>
	<td>238.625</td>
	<td>6.98 €</td>
	<td>1.344.197</td>
	</tr>
	
	<tr class="par">
	<td class="izquierda">13ª 2 + 0</td>
	<td>424.613</td>
	<td>3.84 €</td>
	<td>2.496.652</td>
	</tr>
	
	</tbody></table>
	</div>
	</div>
	</div>
	
	<div class="enlace negrita"><a href="/es/euromillones">Toda la información oficial sobre este sorteo de Euromillones</a></div>
	]]>
	</description>
	<comments></comments>
	<guidisPermaLink="false">20150612222114d8fa57ceb15ed41067ceb15ed410cdab1bacRCRD</guid>
</item>

A través de la clase classRSS.php, por cada item podríamos obtener el título (echo($item->get_title()), la url (echo($item->get_url()) y la ‘descripción’ (echo($item->get_description()) que en nuestro caso, contiene tanto el resultado del sorteo, como el escrutinio, es por ello, que obtenemos la descripción y tratamos el contenido para extraer los datos que necesitamos:
$claves = separa el contenido por , para poder acceder rápidamente al resto del contenido.
$numeros = números premiados.
$numerosEstrella = números estrella premiados.

3.- El siguiente paso sería calcular los aciertos obtenidos, para ello, tendremos en una variable nuestros números, en otra nuestros números estrella, y los comprobaremos contra los obtenidos en el paso anterior:

//numeros jugados
$numerosJugados = Array(1,2,3,4,5);
$numerosEstrellaJugados = Array(1,2);
$aciertos = 0;
$aciertosEstrella = 0;
//calcula aciertos
for($i = 0; $i < count($numerosJugados); ++$i) {
for($j = 0; $j < count($numeros); ++$j) {
$valor1 = intval($numeros[$j]);
$numeros[$j] = intval($numeros[$j]);
$valor2 = intval($numerosJugados[$i]);
if ( $valor1 == $valor2) {$aciertos +=1;}
}
}
//calcula aciertos estrella
for($i = 0; $i < count($numerosEstrellaJugados); ++$i) {
for($j = 0; $j < count($numerosEstrella); ++$j) {
$valor1 = intval($numerosEstrella[$j]);
$numerosEstrella[$j] = intval($numerosEstrella[$j]);
$valor2 = intval($numerosEstrellaJugados[$i]);
if ( $valor1 == $valor2) {$aciertosEstrella +=1;}
}
}

El código es bastante sencillo, recorremos los Arrays y aumentamos el número de aciertos en caso de que coincidan. Usamos la función intval() para extraer el valor del número y así obtener un 1 en lugar de 01.

4.- Como último paso, trataremos el cuerpo de la descripción para extraer los premios del escrutinio (lo tendremos en $claves[2]).

Limpiaremos el código html para poder tratarlo más cómodamente, eliminando clases y números ordinales, dejando la tabla sólo con etiquetas html.

$borrar = array(«10ª «, «11ª «, «12ª «, «13ª «, «14ª «, «15ª «,»1ª «, «2ª «, «3ª «, «4ª «, «5ª «, «6ª «, «7ª «, «8ª «, «9ª «, ‘ class=»par»‘, ‘ class=»impar»‘, ‘ class=»izquierda»‘);
$tratado = str_replace($borrar, «», $claves[2]);

<tr>
<td>5 + 2</td>
<td>0</td>
<td>129.204.405.00 €</td>
<td>1</td>
</tr>

Una vez tratado dividiremos por filas de la tabla:

$claves = preg_split(«/<tr>/», $tratado);

Y rellenamos el array con los premios:

    $premio[«‘0 + 0′»]=»0.00 €»;
$premio[«‘1 + 0′»]=»0.00 €»;
$premio[«‘0 + 1′»]=»0.00 €»;
$premio[«‘0 + 2′»]=»0.00 €»;
for($i = 2; $i < count($claves); ++$i) {
$claveInterna = preg_split(«/<td>/», $claves[$i]);
$importePremiado = substr($claveInterna[1],0,5);
$premio[trim(«‘».$importePremiado.»‘»)]=$claveInterna[3];
}

Lo único que tenemos en cuenta es añadir los no premiados (0 – 0, 1 – 0, 0 – 1, 0 – 2) para que siempre muestre un valor.

Y con esto ya lo tenemos todo, realmente, es más largo de explicar que de hacer, añado los dos ficheros necesarios para poder probar el funcionamiento (Ejemplo de lectura de euromillones).

Pensé que la lectura de un RSS y su tratamiento sería más complicado, pero realmente fue bastante sencillo.

Saludos!

Felices fiestas desde raularin.com

Aprovechando que esta noche es Nochebuena, voy a escribir el que será el último post del año.

El pasado 14 de noviembre decidí poner en marcha mi propia página web (raularin.com) y el resultado del primer mes no ha sido malo, 248 visitas y 387 páginas vistas, que no está mal, aunque siendo sinceros, últimamente estoy teniendo muchísimas visitas desde IPs rusas…que entran en el home y salen, pero bueno.

 

Visitas raularin.com diciembre 2014
Gráfico de visitas desde 14/11 al 24/12

Como se puede ver en la consulta de páginas visitadas, el post que mejor acogida ha tenido es el referente a las páginas canónicas de prestashop (post sobre «rel=canonical») con 47 visitas seguido por la modificación del blocktopmenu (ver post aquí) y la exportación de productos en prestashop (ver post aquí)

Páginas vistas en blog.raularin.com diciembre 2014
Páginas vistas en blog.raularin.com diciembre 2014

Espero que en este 2015 poder escribir más, aumentar esas estadísticas, y sobretodo poder ayudar a enfrentarse a posibles dudas o problemas con los que me he tenido que pelear.
FELICES FIESTAS y FELIZ 2015!

Error ‘Cannot write “No picture” image to (categories) images folder. Please check the folder’s writing permissions.’

Recientemente estuve haciendo pruebas en una instalación de prestashop, migrando un proyecto desde el entorno de desarrollo al entorno de producción, y uno de los errores que me encontré fue la aparición del mensaje ‘Cannot write “No picture” image to (categories) images folder. Please check the folder’s writing permissions.’.

Lo primero fue pensar que realmente era un tema de permisos, y revisé que los permisos de las carpetas para que fueran 755 y los ficheros 644, pero continuó el mismo mensaje.

También probé asignar permisos 777 y nada.

Así que hubo que buscar otra solución más efectiva…y realmente no me esperaba que un error indicando que tiene problemas de escritura se debiera a la falta de determinadas imágenes.

Como he dicho, el mensaje ‘Cannot write “No picture” image to (categories) images folder. Please check the folder’s writing permissions.’ lo muestra porque no encuentra las imágenes predeterminadas para la imagen ‘No picture’, es decir, para cuando falla la imagen a mostrar.

Mensaje de 'Imagen no disponible' en Prestashop.
Mensaje de ‘Imagen no disponible’ en Prestashop.

Una vez conocemos el origen del mensaje la solución es más sencilla, debemos buscar aquellos idiomas en los que las imagenes por defecto fallan y restaurarlas, o crearlas de nuevo.

Hay que tener en cuenta los siguientes directorios donde colocar las imágenes por defecto de los idiomas:

  • \img\c
  • \img\l
  • \img\m
  • \img\p
  • \img\su

Son los directorios que alojan las imágenes de categorías, productos, proveedores, etc.

Una sencilla forma de arreglar el problema será copiar y renombrar los ficheros del tipo «en*.jpg» por «es*.jpg» o el código ISO del idioma que sea necesario.

Llega Apparcando para Android y iPhone

Voy a dedicar este post al lanzamiento de la aplicación Apparcando por parte de una sart-up incluida en el proyecto lanzadera y que tengo el honor de conocer de primera mano.

Quién no sufre a diario los problemas de aparcar? Dar varias vueltas hasta conseguir aparcar y una vez conseguido tener que dar un buen paseo hasta nuestro destino? Gracias a la nueva aplicación de Apparcando, podrás aparcar sin problemas, sin dar esas interminables vueltas a la espera de un lugar de aparcamiento que no aparece. Continuar leyendo «Llega Apparcando para Android y iPhone»

1 añito cumplimos hoy!

Hoy se cumple el primer año desde que se inauguró este blog.

No me esperaba tener gran número de visitas, pero me ha sorprendido gratamente que a lo largo de este año ha habido 485 visualizaciones de alguna de las páginas del blog. Algo que a priori no parece un número muy grande, las visitas se han incrementado notablemente en los meses de Julio, Agosto y Septiembre, con 78, 75 y 102 visitas respectivamente.

Continuar leyendo «1 añito cumplimos hoy!»

Exportar productos con imagen en Pestashop

Recientemente me he encontrado el problema de tener que exportar productos de una tienda Prestashop para importarlos en otra.

Es posible exportar los productos desde Catálogo -> Productos como vemos en la imagen:

 

ProductosPor desgracia, la información exportada es bastante pobre, aparte del hecho de no poder exportar todo el catálogo a la vez, también me he encontrado el problema de que no siempre exporta el campo de la imagen del producto. Esto es un grave inconveniente porque quiero importar un catálogo de 3000 productos, y tener que poner a mano las 3000 imágenes de productos puede resultar más que tedioso. Continuar leyendo «Exportar productos con imagen en Pestashop»

Instalación de un tema de prestashop 1.5.6

Previsualización de un tema de Prestashop

Buenas de nuevo, después de un pequeño parón que he dedicado a otros quehaceres, vuelvo con el tema del desarrollo web.

En esta ocasión, he tenido que comprar y configurar un tema de prestashop para el lanzamiento de una nueva tienda online.

Después de revisar multitud de plantillas tanto por parte de los desarrolladores como de los clientes para los que vamos a hacer el desarrollo, se ha decidido

Imagen

El tema es Pos Optima y está sacado de ThemeForest.com, web de referencia en cuanto a plantillas de prestashop se refiere.

Ha sido mi primera experiencia realizando todos los pasos desde la compra a la puesta a punto y para ser sincero, ha sido tan sencillo como esperaba. Nada más realizar el pago ya se tiene disponible la plantilla para descargar, y siguiendo los pasos indicados en el pdf que viene con la plantilla…se configura rápidamente.

Mi primer instinto fue poner la plantilla directamente en la carpeta themes y ver qué pasaba..y ocurrió lo que tenía que pasar, que se veía tremendamente mal, cometí el error de pensar que sólo con poner la plantilla en la carpeta era suficiente para que Prestashop lo interpretara debidamente.

Una vez vistos los resultados ya decidí ser más metódico y revisar la documentación entregada, y ahí me hicieron ver que me faltaba insertar la carpeta IMG con las imágenes propias del tema y la configuración de algún módulo para hacer que la visualización sea correcta.

Por último, tuve que regenerar las imágenes para que los productos insertados antes de haber puesto el tema, se visualizaran correctamente.

Una vez hecho eso, todo perfecto, ahora sólo queda aprender a modificar en el back-office de Prestashop las particularidades del tema, pero eso es otra historia.

Último post del año

Ya termina el año, estos meses han sido un aprendizaje continuo de Prestashop, WordPress, Joomla, CSS3 y HTML5 a golpe de necesidad.

Nunca le había dedicado tanto tiempo a la parte visual de una web, pero poco a poco le voy cogiendo el punto, espero poder seguir cogiendo conocimientos y soltura en todo esto.

En este año que va a comenzar continuaré con el espíritu de crecer y aprender más. Para empezar, tengo el reto de las aplicaciones móviles, pero eso es otra historia.

Por último, una cita de John Lennon:

La vida es aquello que te va sucediendo mientras te empeñas en hacer otros planes.

Nos vemos el año que viene 😉

Aplicaciones para iPhone: Vader App

Buenas, rompiendo la dinámica que llevaba hasta ahora, hoy voy a comentar una aplicación de previsión meteorológica para iPhone.

Se trata de Vader App (vaderapp.com). Esta aplicación conecta con los mejores servidores de información meteorológica, ofreciendo una información 100% fiable. Además cuenta con un interfaz muy cómodo de usar e intuitivo.

Su diseño es rompedor con el resto de aplicaciones similares en el mercado, simplemente has de deslizar tu dedo para ver la previsión de las siguientes 24 horas.

Incluye temperatura, velocidad del viento, humedad y probabilidad de lluvia, además de una previsión semanal.

Es una aplicación 100% desarrollada por un ex-compañero de la Universidad de Valencia, y que te recomiendo si dispones de iPhone (se puede descargar directamente desde: https://itunes.apple.com/app/id730151690).

Animaos a probarla.

Imagen