<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>scromega blog</title>
	<atom:link href="http://scromega.net/feed/entries.xml" rel="self" type="application/rss+xml" />
	<link>http://scromega.net/feed/entries.xml</link>
	<description>Blog personal de Sergio (aka scromega)</description>
	<item>
		<title>Accediendo a la API cerrada de Tuenti</title>
		<link>http://scromega.net/7-accediendo-a-la-api-cerrada-de-tuenti.html</link>
		<pubDate>Fri, 05 Mar 2010 00:00:58 +0100</pubDate>
		<guid>http://scromega.net/7-accediendo-a-la-api-cerrada-de-tuenti.html</guid>
		<description><![CDATA[<b>Nota:</b> Tenía escrita esta entrada en borradores antes de que Tuenti lanzara su API de forma cerrada y orientada a empresas que adquieran una licencia, tal y como se puede [url=http://barrapunto.com/articles/10/03/04/1514213.shtml]leer hoy en Barrapunto[/url].<br />
<br />
Que no me guste Tuenti no significa que no me guste trastear con las API que ofrecen los distintos servicios web. Pero Tuenti, a día de hoy (más de cuatro años después de su lanzamiento), sigue sin contar con una API pública que permita a los programadores desarrollar aplicaciones para la red social. Supongo que son los intereses económicos los que fuerzan a que (casi) todo el tráfico pase por la web, y, por tanto, aparezcan los anuncios y eventos patrocinados que financian el chiringuito. Como digo, no hay disponible una API pública, pero sí cuentan con una privada que brinda el servicio a la aplicación de Tuenti para el iPhone lanzada recientemente.<br />
<br />
Hace un tiempo, [url=http://twitter.com/adrinavarro]@adrinavarro[/url] mostró a un pequeño grupo de conocidos un [url=http://adrian.navarro.at/papers/apituenti.html]paper[/url]. En dicho texto se explicaba muy por encima el modo de funcionamiento (obtenido mediante pruebas) de la citada API privada, pero con el inconveniente de que no se conocía cómo se enviaba la contraseña del usuario a la hora del login. Por tanto, nada se podía hacer con la API.<br />
<br />
Por aburrimiento, recordé el texto y me puse con ello (al igual que más gente) hasta conseguir poder usar la API. En cuanto al inconveniente del login, no fue un gran problema, ya que me dio por probar un método que conocía de antes (es lo que tiene haber trasteado anteriormente con la web :D). Lo que sí me supuso un problema fue el tener que jugar a adivinar (literalmente) los nombre de los métodos al no disponer de un iPhone con el que realizar pruebas.<br />
<br />
De todo esto ha salido una class en PHP (para variar) que programé para realizar pruebas. Dicha class permite loguearse en Tuenti a través de la API y hacer uso de todos los métodos conocidos de la misma. Con dichos métodos se puede cambiar el mensaje de estado, obtener los perfiles de amigos, obtener fotos de los álbumes, etc.<br />
<br />
Por comodidad he subido [url=http://github.com/scromega/tuentiAPI]la class a GitHub[/url] junto con una lista de los métodos disponibles. En dicha lista sólo están los nombres de los métodos, más que descriptivos. Tampoco es plan de documentar la API haciendo el trabajo de una empresa con la que no guardo ninguna relacion, como es Tuenti.]]></description>
	</item>
	<item>
		<title>tOAuth: la API de Twitter con OAuth y PHP</title>
		<link>http://scromega.net/6-toauth-la-api-de-twitter-con-oauth-y-php.html</link>
		<pubDate>Fri, 19 Feb 2010 23:29:12 +0100</pubDate>
		<guid>http://scromega.net/6-toauth-la-api-de-twitter-con-oauth-y-php.html</guid>
		<description><![CDATA[La API de Twitter dispone de soporte para [url=http://oauth.net/]OAuth[/url], un protocolo que permite que los usuarios puedan hacer uso de aplicaciones sin tener que introducir su usuario y contraseña, evitando el riesgo que esto conlleva. Para los usuarios, este protocolo es una ventaja, además de por la seguridad que ofrece, por la comodidad a la hora de autentificarse en las aplicaciones (para lo que bastan unos simples clics del ratón), pero para los desarrolladores no lo es tanto. Desde mi (humilde) punto de vista, al OAuth le pueden dar por saco.<br />
<br />
En la documentación oficial de la API hay un código de ejemplo alojado en GitHub de cómo usar OAuth con PHP. Este ejemplo no me gustaba y me parecía lioso, por eso me puse a ver cómo funcionaba hasta conseguir crear un clon más sencillo. El resultado, tOAuth, una class en PHP que permite usar de manera simple la API de Twitter con OAuth.<br />
<br />
Podéis encontrar el código de la class junto con un ejemplo de uso en el repositorio [url=http://github.com/scromega/tOAuth]<b>tOAuth</b>[/url] de mi cuenta de GitHub. El ejemplo creo que es bastante explícito por sí solo, pero de todas formas a continuación procedo a explicarlo.<br />
[[CORTAR]]<br />
<b>Registro:</b><br />
Para hacer uso de OAuth en nuestras aplicaciones, deberemos tenerlas registradas como tales en Twitter. Esto se logra desde la página [url]http://twitter.com/oauth_clients/[/url] en la que tenemos un formulario para hacer esto y donde podremos administrar todas las aplicaciones que registremos. En dicho formulario tendremos que rellenar varios campos, entre ellos:<br />
<ul><br />
<li><u>Application Type:</u> Evidentemente tendremos que marcar &quot;Browser&quot;</li><br />
<li><u>Callback URL:</u> La URL a la que Twitter redirigirá a los usuarios una vez autentificados. Por ejemplo: http://dominio.com/toauth</li><br />
<li><u>Default Access type:</u> Marcamos &quot;Read &amp; Write&quot; para que nuestra aplicación sea capaz de enviar datos (por ejemplo, para actualizar el timeline del usuario)</li><br />
<li><u>Use Twitter for login:</u> Marcamos &quot;Yes, use Twitter for login&quot;</li><br />
</ul><br />
Una vez registrada la aplicación, se nos asignarán dos <i>keys</i> fundamentales para el uso de OAuth. En el ejemplo, estas dos keys son definidas como constantes para su posterior uso:<br />
<br />
<pre class="code"><code><span style="color: #000000">
<br /><span style="color: #0000BB">&lt;?php<br /><br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">'CONSUMER_KEY'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'xxxxxxxxxxxxxxxxxxxxx'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'CONSUMER_SECRET'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'</span><span style="color: #007700">);<br /></span>
</span>
</code></pre><br />
<br />
Todo usuario que quiera hacer uso de nuestra aplicación tendrá que autentificarse. Este proceso consta de dos partes. Lo primero será obtener el link de Twitter al que tendrá que entrar el usuario para autentificarse:<br />
<br />
<pre class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br />$connection&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">tOAuth</span><span style="color: #007700">(</span><span style="color: #0000BB">CONSUMER_KEY</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CONSUMER_SECRET</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$connection</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">authenticate</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br /></span>
</span>
</code></pre><br />
Esto nos devolverá un array con dos token que deberemos almacenar de forma temporal (por ejemplo en una sesión) y el link mencionado anteriormente.<br />
<br />
Una vez que el usuario vuelva a nuestra página tendremos que hacer una nueva petición enviando los token de la anterior (<i>$_SESSION['toauth_rt']</i> y <i>$_SESSION['toauth_rts']</i> en el ejemplo):<br />
<br />
<pre class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br />$connection&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">tOAuth</span><span style="color: #007700">(</span><span style="color: #0000BB">CONSUMER_KEY</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CONSUMER_SECRET</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'toauth_rt'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'toauth_rts'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">$a&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$connection</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">authenticate</span><span style="color: #007700">(</span><span style="color: #0000BB">false</span><span style="color: #007700">);</span>
</span>
</code></pre><br />
Nuevamente nos devolverá un array, salvo que en este caso contendrá sólo dos token que son los que usaremos en las peticiones a la API como si del usuario/contraseña se tratara. Si queremos podemos guardarlo de forma permanente (por ejemplo, en una base de datos) para usos futuros.<br />
<br />
<b>Peticiones:</b><br />
Para realizar peticiones (ya sean GET o POST) a la API lo primero será crear una nueva instancia de la class pasándole los token del usuario que obtuvimos en la autentificación (<i>$_SESSION['toauth_at']</i> y <i>$_SESSION['toauth_ats']</i> en el ejemplo):<br />
<br />
<pre class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br />$connection&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">tOAuth</span><span style="color: #007700">(</span><span style="color: #0000BB">CONSUMER_KEY</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">CONSUMER_SECRET</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'toauth_at'</span><span style="color: #007700">],&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'toauth_ats'</span><span style="color: #007700">]);</span>
</span>
</code></pre><br />
Después ya podremos hacer las [url=http://apiwiki.twitter.com/Twitter-API-Documentation]peticiones[/url] que necesitemos a la API. Ejemplos:<br />
<br />
<pre class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">#&nbsp;GET&nbsp;Usage:&nbsp;array&nbsp;get&nbsp;(&nbsp;string&nbsp;$method&nbsp;[,&nbsp;array&nbsp;$args&nbsp;]&nbsp;)<br />#&nbsp;POST&nbsp;Usage:&nbsp;array&nbsp;post&nbsp;(&nbsp;string&nbsp;$method&nbsp;,&nbsp;array&nbsp;$args&nbsp;)<br /><br /></span><span style="color: #0000BB">$r&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$connection</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">get</span><span style="color: #007700">(</span><span style="color: #DD0000">'account/verify_credentials'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$r&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$connection</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">post</span><span style="color: #007700">(</span><span style="color: #DD0000">'statuses/update'</span><span style="color: #007700">,&nbsp;array(</span><span style="color: #DD0000">'status'</span><span style="color: #007700">=&gt;</span><span style="color: #DD0000">'Hello&nbsp;World'</span><span style="color: #007700">));</span>
</span>
</code></pre><br />
<br />
Y esto es todo, espero que os sea de utilidad tanto como a mí. Si queréis estar al tanto de cambios y actualizaciones, podéis suscribiros al repositorio en GitHub. Para cualquier duda, sugerencia, crítica o lo que sea, ya sabéis, dejad un comentario :)]]></description>
	</item>
	<item>
		<title>Mini Entrada: (in)necesidad</title>
		<link>http://scromega.net/5-in-necesidad.html</link>
		<pubDate>Sat, 05 Dec 2009 02:21:58 +0100</pubDate>
		<guid>http://scromega.net/5-in-necesidad.html</guid>
		<description><![CDATA[- Que necesidad tiene un tipo como ese de contarme historias de ese calibre<br />
- La que tenga él es lo de menos, que necesidad tienes tú de escucharlo en todo caso :P<br />
<br />
Mini entrada patrocinada por el juego &quot;Hotel Dusk: Room 215&quot; y por [url=http://twitter.com/Juendy_/status/6354371711]@Juendy_[/url]]]></description>
	</item>
	<item>
		<title>Spotify: Error 110</title>
		<link>http://scromega.net/4-spotify-error-110.html</link>
		<pubDate>Sun, 06 Sep 2009 16:50:10 +0200</pubDate>
		<guid>http://scromega.net/4-spotify-error-110.html</guid>
		<description><![CDATA[Desde hace un tiempo Spotify, el programa para oír música gratuitamente, dejó de funcionarme. Este programa sólo cuenta con versiones para Windows y Mac OS X, como yo uso Ubuntu, para poder usarlo utilizo Wine.<br />
<br />
Al principio de dejar de funcionar, el programa se quedaba en la pantalla de &quot;Iniciando sesión...&quot; y parecía como si no tuviera conexión con Internet, por lo que pensé que sería algo de Wine.<br />
<br />
Hace unos días, me dio por volver a probarlo y ya al menos el programa mostraba un mensaje de error como el de la imagen siguiente, aunque no fui capaz de solucionar nada.<br />
<br />
[center][url=http://www.flickr.com/photos/scromega/3893144780/][img]http://scromeganet.appspot.com/scromega.net/upload/spotify.png[/img][/url][/center]<br />
<br />
Hoy necesitaba música desesperadamente, por lo que me dio por volver a intentarlo y me fijé que el mensaje daba un código de error (110). Hice una búsqueda por Google y encontré un mensaje en la comunidad de soporte de Spotify. El mensaje es de alguien que tuvo el mismo problema y explica <b>la solución, tan sencilla como desmarcar la casilla &quot;Recuérdame&quot; y volver a introducir la contraseña</b>.<br />
<br />
La gracia del asunto es que yo ya había probado con otra cuenta de usuario e incluso reinstalé el programa, aunque todo eso fue cuando sólo salía lo de &quot;Iniciando sesión...&quot; (antes de que saliera el mensaje de error).<br />
<br />
Fuente | [url=http://getsatisfaction.com/spotify/topics/error_110_also_without_my_firewall]Community-powered support for Spotify[/url]]]></description>
	</item>
</channel>
</rss>