Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Construyendo con la API de Twitter: Usando Streams en tiempo real

by
Read Time:7 minsLanguages:
This post is part of a series called Building With the Twitter API.
Building With the Twitter API: OAuth, Reading and Posting
Building With the Twitter API: Tweet Storms

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Mientras que la API REST de Twitter es adecuada para muchas aplicaciones, si quieres actualizaciones inmediatas y acceso a una amplia gama de notificaciones, la API streaming de Twitter es esencial. Por ejemplo, sólo la API streaming le dirá cuándo otro usuario le da favorito a uno de sus tweets.

El uso de la API de Streaming requiere una conexión persistente y permanente entre su servidor web y Twitter. Este tipo de implementación puede ser desconocida para muchos desarrolladores de PHP. Tan pronto como los tweets entran, Twitter notifica a su servidor en tiempo real, lo que le permite almacenarlos en su base de datos sin el retraso de la consulta de la API REST. El uso de la API de transmisión también no está sujeto a los límites de velocidad de API de Twitter.

Esta es un grafico de cómo funciona:

How the Twitter Streaming API worksHow the Twitter Streaming API worksHow the Twitter Streaming API works

Hay tres variaciones de la API Streaming de Twitter:

  1. La Stream pública. Esto permite que su aplicación supervise datos públicos en Twitter, como tweets públicos, filtros hashtag, et al.
  2. El Stream de usuario. Esto le permite realizar un seguimiento del flujo de tweets de un usuario en tiempo real. La tercera parte de esta serie se centrará en el flujo de usuarios.
  3. Streams del sitio. Los flujos de sitio permiten que su aplicación supervise los feeds de Twitter en tiempo real para un gran número de usuarios.

El trabajo de su implementación de streaming es registrar los eventos entrantes lo más rápido posible y procesarlos en segundo plano usando la API REST cuando sea necesario para recolectar datos más profundos. El stream de sitio requieren la aprobación previa de Twitter, que probablemente estan reservadas para empresas grandes y desarrolladores.

Afortunadamente, existe una biblioteca gratuita de código abierto llamada Phirehose, que implementa la mayoría de los requisitos de streaming API. Este tutorial describirá cómo integrar Phirehose en nuestra aplicación de código abierto Birdcage.

La Biblioteca Phirehose

Phirehose es de código abierto y  una fantástica implementación de los requisitos de Twitter Stream API en PHP escrita por Fenn Bailey. Tal como él lo describe, Phirehose tiene la intención de:

  • Proporcionar una interfaz sencilla a la API de streaming de Twitter para aplicaciones PHP
  • Cumplir con las recomendaciones de la API stream y tener un continuo manejo de errores, la reconexión, etc.
  • Animar cliente a tener un buen comportamiento con la API streaming
  • Funcionar independientemente de las extensiones de PHP (es decir, memoria compartida, PCNTL, etc.)

He encontrado la biblioteca para funcionar perfectamente. Hay más documentación de Phirehose aquí.

Su objetivo es mantener la conexión con Twitter y responder al flujo de datos de Twitter mientras funciona indefinidamente sin interrupción. No está diseñado para realizar el procesamiento detallado de tweets y la hidratación de datos, que hemos descrito en la segunda parte de esta serie. Esto puede hacerse por separado.

Ejecución de Phirehose indefinidamente

Generalmente, no se puede ejecutar una típica tarea basada en web cron como una operación indefinida keep-alive. Es mejor crear un daemon de línea de comandos.

Una de las características potentes que Yii ofrece es la capacidad de ejecutar aplicaciones basadas en consola desde la línea de comandos. Esto nos permitirá ejecutar una aplicación de línea de comandos keep-alive que utiliza el framework completo de Birdcage PHP y MySQL que hemos construido.

Creación de un comando de consola de Yii

En el directorio /app/, fuera de la raíz accesible por la web, agregamos un archivo stream.php que ejecuta nuestro comando de consola de streaming Phirehose:

A continuación, crearemos el archivo de comandos actual, StreamCommand.php, en el directorio /app/protected/commands:

Lanzará el proceso Phirehose, Consumidor, utilizando nuestra aplicación de Twitter y las claves de usuario.

Nota: Para los propósitos del ejemplo de streaming de Birdcage, asumimos que sólo hay una cuenta de Twitter registrada y que el estático carga las credenciales, por ejemplo account_id = 1.

Integración de Phirehose

Para integrar Phirehose en Birdcage, y movi  OAuthPhirehose.php y UserstreamPhirehose.php al directorio /app/protected/components. En mi archivo de configuración main.php, he añadido phirehose a la lista de componentes cargados:

Entonces, creé una migración de base de datos para crear una tabla para almacenar datos sin procesar de la stream de Twitter:

También creé un nuevo modelo llamado Consumer.php que extiende OauthPhirehose con su método enqueueStatus requerido.

Queremos minimizar la cantidad de procesamiento que necesita la respuesta en tiempo real. Esencialmente, solo queremos registrar los datos recibidos de Twitter en nuestra base de datos—y nada más. Podemos hacer otro procesamiento en nuestras propias tareas de fondo sin ralentizar la conexión de streaming de Phirehose. Mi función sólo toma los datos de tweet del stream entrante y los almacena en la tabla de stream:

Confiaremos en las tareas de fondo ejecutadas por nuestro DaemonController para procesar los datos en el modelo Bircdcage. Esto se describe más adelante.

Activando Phirehose

Puede probar Phirehose usando el comando de consola de PHP:

php ./app/stream.php Stream

Twitter enviará una secuencia de stream de seguidor para la cuenta de usuario, seguida de datos en tiempo real a medida que llegue.

Para activar Phirehose como un comando keep-alive, siempre en la consola, usaremos el comando nohup, p. Sin hangup, y redirigir la salida a dev/null:

nohup php ./app/stream.php Stream > /dev/null 2>&1&

Ubuntu responderá con un identificador de trabajo de su proceso para supervisión y terminación futura:

[1] 9768

Si desea comprobar que el proceso se está ejecutando, escanee la lista de tareas para el ID de trabajo:

ps -e all | grep 9768

Debería ver algo como esto:

0 1000 9768 9743 20 0 273112 16916 poll_s S pts/0 0:00 php ./app/stream.php Stream

Y puede terminar Phirehose matando el identificador de trabajo:

kill 9768

En mi experiencia, Phirehose ha trabajado perfectamente con esta técnica operando sin interrupción durante las últimas dos semanas.

Procesamiento de los datos de Streaming

También necesitamos crear un proceso de fondo en Birdcage que procesará los datos de transmisión en nuestras mesas Tweet, Mención, URL y Hashtag—como si hubiera venido de la API REST.

Cambie la configuración del archivo twitter.ini para usar streams:

Y, podemos utilizar el mismo trabajo cron de la parte dos para ejecutar esta operación:

Luego, cuando se llama a DaemonController, activará el método de proceso model() de Stream :

El método de proceso descomprime los datos de flujo codificados y analiza cada entrada tal como lo hicimos con el contenido de la API REST:

Birdcage ignora actualmente los datos del flujo que no son un tweet, p. Notificaciones, mensajes directos, etc. Voy a dejar que a usted para ampliar—o puede consultar mi aplicación ampliada, Birdhouse.

Conclusion

Espero que hayas encontrado esta serie de tres partes de Twitter API informativa y útil. Por ahora, has aprendido acerca de OAuth, la API REST, la API Streaming, la creación de una base de datos para Twitter, el procesamiento de la línea de tiempo con ambos tipos de API, el recuento de caracteres en tweets y su publicación y más.

Envíe sus comentarios, correcciones o ideas adicionales a continuación. Puedes navegar por mis otros tutoriales de Tuts+ en mi página de autor o seguirme en Twitter @reifman.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.