Archivo de la categoría: PHP

Cuando un JSON viene con error

Traté de muchas maneras poder utilizar un webservice que entregaba un JSON, pero no me daba ningún resultado.

Al principio pensé que estaba haciendo mal las cosas, utilizando Ajax, JQuery, etc. pero la verdad era que el servicio estaba entregando los datos con unos caracteres raros al principio.

Obviamente Google me ayudó y di con la función que te permite limpiar esos caracteres que no corresponden y que no nos permitirán leer de manera correcta un JSON.

<?php
$datos = file_get_contents("http://domino.com/Json");
// Remover carcateres que no queremos
// http://www.php.net/chr
for ($i = 0; $i <= 31; ++$i) {
$datos = str_replace(chr($i), "", $datos);
}
$datos = str_replace(chr(127), "", $datos);
// algunos archivos comienzan con 'efbbbf' para marcar el comienzo del archivo (nivel binario)
// aqui lo detectamos y removemos, basicamente los 3 primeros caracteres
if (0 === strpos(bin2hex($datos), 'efbbbf')) {
$datos = substr($datos, 3);
}
//Decodificamos el json y lo imprimimos
$datos = json_decode( $datos );
print_r($datos);
?>

Ahora a continuar con el desarrollo de una aplicación web (y posiblemente para smartphone) consumiendo estos datos interesantes.

Me había quedado en el pasado…. mysql

Este mes a sido un mes de aprendizaje en todo sentido. De una idea en una pizarra, nació una app de la cual debo sentirme orgulloso. Pero tuve que aprender y recordar cosas que hace mucho tiempo no utilizaba.

Entre esas cosas MYSQL y las consultas. Me había quedado en el pasado y el servidor donde estaba desarrollando las consultas me dijo “Hey! esa función es muy vieja…. “. Así que comparto con Uds, si es que aún viven en el pasado, la comparación entre mysql mysqli y PDO.

Es super importante tener en consideración ya que la versión 7 de PHP no admite mysql y por lo tanto cuando generas una conexión “a la antigua” ya no funcionará por ningún motivo. Entre PDO y mysqli ? Me quedo con el segundo. (ejemplo extraido desde php.net)

<?php
// mysqli
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
$resultado = $mysqli->query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = $resultado->fetch_assoc();
echo htmlentities($fila['_message']);

// PDO
$pdo = new PDO('mysql:host=ejemplo.com;dbname=basedatos', 'usuario', 'contraseña');
$sentencia = $pdo->query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = $sentencia->fetch(PDO::FETCH_ASSOC);
echo htmlentities($fila['_message']);

// mysql
$c = mysql_connect("ejemplo.com", "usuario", "contraseña");
mysql_select_db("basedatos");
$resultado = mysql_query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = mysql_fetch_assoc($resultado);
echo htmlentities($fila['_message']);
?>


Todos los sismos del día en Chile

API Google Maps + Web Scraping

Poco a poco mejorando el código, tomé todos los sismos del día en Chile, desde la web de Sismología.cl y puse un marcador por cada uno. Simplemente utilizando un arreglo y recorriendolo con un simple FOR.

Ahora la idea es ir por más y utilizar la magnitud de cada sismo y crear marcadores dependiendo de los valores, puede ser con colores o puede ser tamaños distintos.

Si alguien está interesado en el código, puede solicitarmelo en los comentarios.

http://eq.roison.me/sismosdiarios.php

Google Maps API + PHP Web Scraping

Hace mucho tiempo pensaba hacer algún tipo de servicio que me mostrara la información del último sismo registrado en Chile. Tratando de buscar información, nunca dí con un servicio online que me diera esa información, por lo tanto me acordé del famoso Web Scraping.

Que es el Web Scraping? Bueno como dice Wikipedia, es una técnica que se utiliza para extraer información desde sitios web, simulando la navegación en los mismos, ya sea a través de una aplicación…. o en mi caso por PHP.

Siemplemente en este caso busqué donde se publica el último sismo registrado en Chile. Para eso me basé en la información que entrega www.sismologia.cl

A través de una función de PHP (file_get_contents) ingreso a la pagina donde está el listado con el último sismo, busco los datos que están separados por columnas y esos datos los asigno a variables. Luego esas variables las utilizo para crear a través de la API de Google Maps, el mapa centrado en la coordenada del sismo y agrego una marca con algunos datos del sismo, logrando algo como esto:

Esto fue solo un ejercicio para poder aprender el uso de la API de Google Maps, creando marcadores dinámicos, que se actualiza cada vez que hago un refresco de la página. Hay cosas que mejorar en el código o ir más allá y automatizar el proceso, para que el último sismo quede registrado en una BD y luego al cargar el mapa, la marca se extraiga del último registro.

Con eso podría marcar todos los sismos del día en un mismo mapa o incluso un historico de sismos. Algo interesante para continuar aprendiendo.

Si alguien quiere el código me lo pide! Pueden ver el último sismo en este mismo sitio, o ingresando a http://eq.roison.me

CopiaBot y lo nuevo aprendido en programacion web

Hace tiempo que me daba vuelta la creación de un Bot en Twitter que prestara ciertas utilidades a un grupo acotado, en este caso “Mi Querido Copiapó”.

De hecho en febrero del 2012 creé la cuenta @CopiaBot en Twitter y utilicé algunos servicios gratuitos para mostrar la temperatura y otro que respondía ciertas cosas. Lo lamentable de estos servicios es que no se pueden personalizar casi nada.

Ahora he estado jugando con un servicio gratuito del tiempo, el cual me permite rescatar datos de la temperatura de Copiapó, con ese dato rescatado a través de PHP (utilizando JSON), lo guardo en una BD de mi sitio. Esto lo hago cada 20 minutos gracias a un CRON en Linux.

Con otro CRON, rescato estos datos (en realidad el último) y lo publico a través de PHP, en Twitter. Esta es la parte donde más aprendí, ya que la mayoría de los tutoriales estaban basados en la API anterior de Twitter.

Prometo compartir los secretos aprendidos, pero antes lograré extraer más información relacionada con Copiapó y será publicada con @CopiaBot.