Calcular distancias en PHP
Función PHP que calcula la distancia entre dos puntos usando latitudes y longitudes. Devuelve los datos en millas, kilómetros y millas naúticas.
Vía / DZone
Interesante librería que nos permite extraer textos de ficheros PDF, ignora todo aquello que no esté como texto en una capa y soporta ASCIIHexDecode, ASCII85Decode, FlateDecode:
include('class.pdf2text.php');
$a = new PDF2Text();
$a->setFilename('test.pdf');
$a->decodePDF();
echo $a->output();
No es difícil ver en blogs los retweets que hace la gente de tus posts y que estos se muestren en los comentarios. ¿Por qué no hacer lo mismo con Google Reader?. En Google Reader, es posible ver a quienes les gustan tus posts (si tienes tu propio blog en el reader), lo cual te puede ayudar a saber si tus posts interesan o no, o encontrar usuarios con gustos parecidos y así seguir sus recomendaciones y poder leer posts interesantes.
Google suele dar complicaciones a la hora de hacer uso de sus webs, pero si usamos su API de ClientLogin lo podemos hacer de forma sencilla.
Primero tendremos que loguearnos en Google, para lo cual tendremos que indicar nuestro usuario y contraseña y los datos posts que tendremos que pasarle:
$usuario = 'micorreo@gmail.com';
$password = 'mipassword';
$postdata = 'service=reader&Email='.urlencode($usuario).'&Passwd='.urlencode($password).'&continue=http://www.google.com/reader/&service=reader';
Luego nos logueamos y obtenemos el valor de Auth para usarlo en el resto de peticiones usandolo en el header de la petición HTTP:
$ch = crl_init($url);
crl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)');
crl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
crl_setopt ($ch, CURLOPT_COOKIEJAR, './cookie');
crl_setopt ($ch, CURLOPT_COOKIEFILE, './cookie');
crl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
crl_setopt ($ch, CURLOPT_POST, 1);
crl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false );
crl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false );
$url = 'https://www.google.com/accounts/ClientLogin';
crl_setopt($ch, CURLOPT_URL, $url);
crl_setopt($ch, CURLOPT_FOLLOWLOCATION, 4);
$res = crl_exec($ch);
preg_match('/Auth=(.*)/', $res, $m);
$auth = $m[1];
Después realizo la búsqueda, para lo cual busco el título del post y le añado el nombre del blog (chapu a la espera de encontrar algo mejor), por ejemplo “Stanford%20Javascript%20Crypto%20Library%20sentidoweb”
$url = 'https://www.google.com/reader/api/0/search/items/ids?q=Stanford%20Javascript%20Crypto%20Library%20sentidoweb&output=json';
crl_setopt($ch,CURLOPT_HTTPHEADER,array('Authorization: GoogleLogin auth='.$auth));
crl_setopt($ch, CURLOPT_POST, 0);
crl_setopt($ch, CURLOPT_URL, $url);
$res = crl_exec($ch);
$datos = json_decode($res);
De aquí obtengo el ID del post dentro de Google Reader, y con ese ID obtengo los likers y muestro sus fotos:
if (isset($datos->results[0]->id)) {
$url = 'https://www.google.com/reader/api/0/stream/items/contents?client=scroll';
crl_setopt($ch, CURLOPT_POST, 1);
crl_setopt ($ch, CURLOPT_POSTFIELDS, 'i='.$datos->results[0]->id);
crl_setopt($ch, CURLOPT_URL, $url);
$res = crl_exec($ch);
$datos = json_decode($res);
if (isset($datos->items[0]->id)) {
$id = $datos->items[0]->id;
$id = end(explode('/', $id));
$url = 'https://www.google.com/reader/api/0/item/likers?i=tag%3Agoogle.com%2C2005%3Areader%2Fitem%2F'.$id.'&output=json&client=scroll';
crl_setopt($ch, CURLOPT_POST, 0);
crl_setopt($ch, CURLOPT_URL, $url);
$res = crl_exec($ch);
$data = json_decode($res);
if (isset($data->friends)) {
foreach($data->friends as $friend) {
if (isset($friend->photoUrl)) {
echo '
';
}
}
}
}
}
De los likers se pueden obtener más datos, y si se hace un var_dump($data->friends) se podrá ver cómo acceder a ellos.
Está claro que un plugin para WordPress estaría bien, pero es algo más complejo si se quiere hacer bien, porque se debería obtener los ids segun URLs, entre otras cosas.
El formato de compresión ZIP es uno de los más usados y siempre puede sernos de ayuda saber cómo manejarlo, por ejemplo para permitir que nuestros usuarios nos envien ficheros en zip y no tenerles que enviar varios ficheros de uno en uno, cosa que suele sacar de quicio.
En PHP, para leer un fichero zip debemos usar la librerÃa php_zip que ha sido desarrollada por Guido Draheim y que se puede bajar en: http://pecl.php.net/package/zip.
El uso es sencillo y tan solo dispone de unas pocas funciones:
Un simple ejemplo de cómo leer información de un fichero zip serÃa el siguiente. Disponemos de una página HTML que tiene un formulario para enviar un fichero:
<form action="zip.php" method='POST' enctype='multipart/form-data'<br />
<p>Seleccione un fichero ZIP para enviar
<br />
<input type="file" name="fichero" /<br />
<br />
<input type="submit" value="Enviar" /></p<br />
Y disponemos de un script PHP (en este caso se llama zip.php) que nos devuelve los archivos contenidos en el zip.
...
<ul>
<?php
$zip = zip_open($_FILES["fichero"]["tmp_name"]);
if ($zip) {
while ($entrada = zip_read($zip)) {
echo "<li>" . zip_entry_name($entrada) . "</li>";
}
zip_close($zip);
}
?>
</ul>
...
El número de utilidades que le podemos sacar a la lectura de ficheros zip puede ser importante.
Comments are closed.
Si no me falla la vista (la verdad la vi por 5 segundos) creo que esa funcion esta basada en la formula de los cosenos esfericos y aunque funciona, el margen de error es bastante elevado (chillar al que hizo el planeta tan deforme 😛 )
En fin, la mas acertada que consegui es la formula de Vicenty que podeis conseguir aca en JS http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html (pasarla a php toma 5 minutos) y si quereis conocer mas sobre calculo de distancias os recomiendo este otro vinculo http://www.movable-type.co.uk/scripts/latlong.html
Muchas gracias a los dos. Me vendrá de perlas.