La gente de IBM se ha creado un tutorial que nos muestra como recuperar los datos de nuestro Google Notebook, aplicación que nos permite crear notas dentro de las aplicaciones ofrecidas por Google.
Inicialmente nos explican como es la API que ofrece Google, ya que devuelve los datos en formato REST. Después leeremos la respuesta usando la librería SimpleXML y mostraremos los notebooks disponibles. Pasando después a mostrar el contenido de cada uno de ellos.
El único problema que hay con Google Notebook y su API es que el notebook debe ser público para poder acceder a él. Process and integrate Google Notebook data with PHP
PHPCPD es una herramienta que nos permite detectar código duplicado en nuestros scripts PHP. Una utilidad muy interesante sobre todo para aquellos proyectos grandes en los que hay muchos ficheros y unos cuantos metiendo mano al código, ya que la falta de documentación o de comunicación hace que se repitan codigos en diferentes partes del proyecto, o también debido a malas prácticas a la hora de desarrollar. El código repetido hace que sea imposible de mantener y cueste horrores modificar una funcionalidad ya que hay que buscar en diversos lugares. PHPCPD
Vía / PHPDeveloper.org
Steponas Kazakevicius has written up a new tutorial about file uploading and, more specifically, making an upload tool that can handle interruptions. Have you ever been to a website that offers downloads of stuff? And while you are waiting for the download, there are lots of ads around? Sure you have. I have too. The last day I was downloading stuf …
Para aquellos que necesiten Cassandra en sus proyectos o quieran trastear con él, les vendrá muy bien esta librería basada en CRUD. Soporta las estructuras de datos ofrecida por Cassandra y sus tipos de datos:
Column: clave-valor y el timestamp
Column Family: un array asociativo que contiene columnas, el cual sólo debe tener un clave paterna
Super Column: practicamente igual que la Column Family, sin embargo tiene una Super Column Family como padre. Puede haber varias Super Columns para una clave
Super Column Family: contenedor de Super Column
Key ID: clave única
Key Space: nivel más alto, sería el equivalente a la base de datos
Un ejemplo de código sería el siguiente:
class Address extends PandraSuperColumn {
public function init() {
$this->addColumn('city', 'string');
$this->addColumn('street', 'string');
$this->addColumn('zip', 'int');
}
}
class Addresses extends PandraSuperColumnFamily {
public function init() {
$this->setKeySpace('Keyspace1');
$this->setName('Super1');
$this->addSuper(new Address('homeAddress'));
$this->addSuper(new Address('workAddress'));
}
}
$keyID = 'kenlogin';
$addrs = new Addresses();
$addrs->setKeyID($keyID);
// home address
$homeAddr = $addrs->getColumn('homeAddress');
$homeAddr->setColumn('city', 'san francisco');
$homeAddr->setColumn('street', '1234 x street');
$homeAddr->setColumn('zip', '94107');
// work address
$workAddr = $addrs->getColumn('workAddress');
$workAddr->setColumn('city', 'san jose');
$workAddr->setColumn('street', '9876 y drive');
// custom labelled supercolumn
$customAddr = new Address(''customAddress');
$customAddr->setColumn('city', 'another city');
$addrs->addSuper($customAddr);
// Saving via Column Family
$addrs->save();
// Saving via Super Column,
$customAddr->setColumn('city', 'another city');
$customAddr->save();
Stubbles es un framework para PHP5 que combina las caracterÃsticas favoritas de otros lenguajes de programación y frameworks, en vez de usar los paquetes que te gustan y combianrlos con PEAR, Zend Framework u otros frameworks de PHP.
Entre las caracterÃsticas que ofrece, nos encontramos con:
PureEdit es un CMS para PHP y MySQL que nos facilitará la labor de desarrollo de la aplicación y la reducirá en tiempo notablemente. Dejándonos el control total del diseño y de la programación.
Este CMS se basa en la implementación de módulos mediante la definición de tablas en la base de datos, según unos determinados sufijos en los campos de las tablas, se pueden crear relaciones entre módulos y definir el tipo de campo de una forma directa y sencilla. PureEdit
Vía / Smashing Apps
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.