@MeriBlogs: El ‘bot’ de Twitter que tuitea todas las entradas nuevas de Gamefilia

 

Siguiendo el consejo de algunos usuarios de gamefila (ver aquí) he modificado ligeramente el código de @MeriDeLuxe para incluir las nuevas entradas de gamefilia.

Aquí (foro Comunicados y sugerencias) explico algo más sobre el ‘bot’ 

Espero que os sea de utilidad 🙂

 

Saludos.
mov eax,ollydbgInt 13h  


Ollydbg ProSignature  

MeriDeLuxe: El ‘bot’ de Twitter que tuitea todos los hilos nuevos del Off Topic de MeriStation

 

 https://twitter.com/MeriDeLuxe 

La idea de hacer este ‘bot’ surgió un día revisando el RSS de meneame.net donde aparecía una noticia de alguien que había creado el usuario @nexusnotifier en Twitter y que básicamente te avisaba de la disponibilidad del nuevo Nexus 4.

La idea me pareció pistonuda,  y aprovechando que tengo un hosting web medio muerto de la risa y cogiendo polvo, me dije, ¿Por qué no hacer algo similar con los hilos del Off Topic de MeriStation?

Aprovechando alguna que otra idea de la Fisgona de MeriStation , y después de que Cristian_360 (@Sanchez46C) me confirmase que a priori no habría ningún problema, me puse manos a la obra.

MeriDeLuxe es una aplicación web escrita en C#. Se ha usado Visual Studio 2012 y algunas librerías que describo a continuación: 

En la página de desarrollo de Twitter hay una lista de librerías disponibles para distintos lenguajes. 

En este caso se ha optado por Twitterizer que es una librería para el .NET Framework 

Para acortar los links en los tweets se hace uso de la API de bit.ly En concreto se ha usado bitlyDotNET (enlace de Google Code) 

 

Primeros pasos

Una vez que has creado tu cuenta en Twitter hay que acceder a la página de desarrolladores de Twitter (https://dev.twitter.com)
En dicha página tendrás que entrar en My Applications >> Create a new application  

Cuando se crea una nueva aplicación básicamente se necesitan 3 cosas:

  1. El nombre de la Aplicación (es el nombre que aparecerá en el detalle cuando mirás un tweet, por ejemplo desde un smartphone)
  2. Los permisos de la aplicación (de solo lectura de tweets, de escritura / lectura de tweets y de escritura/lectura/mensajes directos)
  3. Los ‘tokens’ que usará tu aplicación. Estos tokens son los que usarás en tu código fuente para poder interactuar con la API de twitter. Son 4: Access Token, Access Token Secret, Consumer Key y Consumer Secret. Desde la página de desarrollo de Twitter está la opción de crear dichos tokens.

 

Programando MeriDeLuxe

De forma muy resumida lo que hace MeriDeLuxe es esto:  


(Haz click para agrandar)

Que dicho en otras palabras:

  • Obtiene los datos del foro
  • Si hay post nuevos, los tuitea
  • fin 🙂

¿Parece fácil, verdad?. Pues efectivamente, no tiene mucho misterio la verdad 🙂

Para optimizar la aplicación y de paso no cargar en exceso los servidores de meri se han hecho varias optimizaciones.

Pongamos el siguiente ejemplo:  


(Haz click para agrandar)

MeriDeLuxe se ejecuta periódicamente dentro de un cron.  Supongamos que se ejecuta a las 15:45:59

La fecha de la última comprobación supongamos que fué las 15:33:59

Por lo tanto, si hay algún post nuevo, éstos deberán tener una fecha superior a la última comprobación. ¿Hasta aquí todo bien, ok?

Fecha muy antigua: 

Bien, teniendo esto en cuenta, el post "joer con la nueva supergirl" ya sabemos que no es un post nuevo, ya que la fecha de su última respuesta es inferior a la fecha de la última comprobación (fecha del post: 15:32:08 y fecha de la última comprobación 15:33:59)

Más de una página: 

Pasemos al siguiente hilo: "¿Quien os conoce mejor, vuestros padres o vuestros amigos?". Este post si que tiene una fecha superior la última fecha de comprobación, pero como tiene más de una página tampoco se considerá un post nuevo.

Posible candidato: 

Siguiente hilo: "Necesito una ayuda rápida con el router". Este post, también tiene una fecha superior a la última fecha de comprobación y además solo tiene una página. MeriDeLuxe solo evalúa hilos con 1 página como posibles "candidatos" a ser un post nuevo. Sin embargo puede ocurrir lo siguiente:

El hilo tiene 3 respuestas, pero el primer mensaje es de hace 2 días y alguien lo ha "reflotado" y además, despues otro alguien se ha marcado un +1.  Si el post es de hace 2 días, se entiende que ya se tuiteó hace dos días. Por lo tanto, se deberá "obtener la fecha del primer mensaje".

Pero puede ser que realmente el primer mensaje sea de hace "apenas unos minutos", con lo cual si que es un post nuevo.

En este caso, hay que mirar la fecha del primer mensaje de ese hilo en particular.

Post nuevo sí o sí: 

Finalmente tenemos el hilo "Battlefield Friends". La fecha de este post también es superior a la fecha de la última comprobación. Como tiene 0 respuestas, es sí o si un post nuevo.  

Esto es un extracto del método GetForoData(URL_OffTopic), donde después de parsear el foro se decide si un post es nuevo o no: 


(Haz click para agrandar)

 

Tuiteando los post nuevos 

Una vez finalizado el método anterior, si existen post nuevos, dichos post se almacenan en un <List>PostNuevos llamado ArrPostNuevos

Si efectivamente hay post nuevos, se llama a la función que tuitea dichos post, donde básicamente se recorre dicha lista y se "prepara" el tuit: 


(Haz click para agrandar)

Adicionalmente, en el método que envía los tweets, se "acorta" el enlace al post mediante la API de bit.ly:


(Haz click para agrandar)

Una vez enviado los tweets se almacena la hora actual como "ultima comprobación", de tal forma que cuando se vuelva a ejecutar MeriDeLuxe dentro de "x" minutos, serán posibles candidatos a post nuevos todos aquellos que tengan una fecha de posteo mayor que la de ahora. 

Pues bien, básicamente así es como funciona MeriDeLuxe.

Si tenéis alguna duda, sugerencia o lo que sea, podeís dejar un comentario

 

Saludos.
mov eax,ollydbgInt 13h  


Ollydbg ProSignature