Advertisement
  1. Code
  2. Twitter API

Construyendo con la API de Twitter: Tweet Storms

by
Read Time:12 minsLanguages:
This post is part of a series called Building With the Twitter API.
Building With the Twitter API: Using Real-Time Streams
Building With the Twitter API: Repeating Tweets From a Group

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

En abril, el inversor y fundador de Netscape, Marc Andreessen, comenzó a expandirse en los límites de 140 caracteres de Twitter publicando sus pensamientos en secuencias de tweets, que algunos han denominado tweet storms (el empresario Yvo Schaap compiló estas en su sitio web).

No pasó mucho tiempo antes de BuzzFeed (el principio que debe ser detenido) se levantó en contra de esta práctica: Why Twitter’s Newest Tweetstorm™ Trend Must Be Stopped. Personalmente, estoy probablemente estoy en contra de cualquier cosa que BuzzFeed esta en contra.

Algunos servicios surgieron para hacer más fácil para los mortales como nosotros publicar tormentas de tweets, pero parecían un poco poco fiables e inconsistentes. Decidí construir la característica yo mismo y pienso que hay valor en hacer esto con su propia aplicación.

En este tutorial, te guiaré a través de la construcción de una característica de tormenta de tweet propia usando la API de Twitter. Esta es una continuación de mi serie la API de Twitter en Tuts+; Puede encontrar un enlace a todos ellas en mi página de autor.

Requisitos de características Tweet Storm

En primer lugar, vamos a decidir lo que necesitamos nuestra función TweetStorm.

  • Crear un grupo de tweets.
  • Numerarlos en secuencia.
  • Publícarlas en orden secuencial a Twitter.
  • Proporcionar una página web pública que permita a las personas a leer todo junto.
  • Publicar el enlace a esta página en un tweet final.

Los resultados deben ser algo como esto:

A five step tweet storm with a final public linkA five step tweet storm with a final public linkA five step tweet storm with a final public link

Asumiré que usted está familiarizado con mi tutorial anterior de Birdcage y ya tiene el código que autentica su cuenta a través de OAuth con la API de Twitter.

El Modelo de base de datos

Birdcage utiliza una tabla de estado para los tweets. En primer lugar, extenderemos esta tabla con una migración de ActiveX de ActiveX para incluir campos para la secuencia numérica de tweet_id y tweet publicada.

Extender nuestro modelo de base de datos existente es bastante fácil con las migraciones ActiveRecord de Yii:

Aquí está el código de migración:

Usaremos los tweet_ids para mostrar públicamente toda la tormenta de tweets en una página web después de la publicación. La secuencia numérica determinará el orden de tweets de estado en nuestra tormenta.

A continuación, necesitamos crear una tabla para un contenedor de tweets de estado, en esencia un contenedor para la tormenta de tweet. Voy a usar el término Group, porque lo reutilizaremos para otra característica de agrupación en un siguiente tutorial, tweets recurrentes dentro de un grupo. Visita mi página de autor para ver cuando está publicado o sígueme en Twitter @reifman.

Vamos a crear una nueva migración para crear la tabla de Group:

El código siguiente crea el esquema. Tenga en cuenta la relación de clave extranjera para vincular la tormenta de tweet a una cuenta de Twitter específica:

También crearemos una tabla relacional llamada GroupStatus que rastrea los tweets de estado dentro de cada grupo:

Para mostrar públicamente la tweet storm en una página web, en realidad necesitamos otra tabla para almacenar en caché el código HTML por twitter_id del método Oembed API de Twitter:

Construyendo el Código

El controlador Group y los modelos

A continuación, utilizaremos el generador de código de andamios de Yii, Gii, para construir el modelo, controladores y CRUD. En mi entorno local, visita http://localhost:8888/twitter/app/gii para acceder a Gii. En primer lugar, creo el modelo:

Yii Model GeneratorYii Model GeneratorYii Model Generator

Luego, uso generador Bootstrap CRUD:

Bootstrap GeneratorBootstrap GeneratorBootstrap Generator

También usaremos Gii para crear modelos predeterminados para las tablas GroupStatus y Embed. No necesitan controladores y vistas.

En la vista de la barra de navegación (/app/protected/views/layouts/main.php), agregaré una opción en el menú Compose a Group Tweets:

La página de administración de Tweets de grupo se ve así:

Manage Groups of Tweet StormsManage Groups of Tweet StormsManage Groups of Tweet Storms

Al hacer clic en el icono más a la izquierda dentro de cada fila se abre un grupo para agregar tweets y secuenciarlos.

Al hacer clic en el vínculo add a group (Agregar un grupo) del menú, aparecerá un formulario que le permitirá nombrar la tormenta de tweets y elegir una cuenta de Twitter para ello:

Create a Group for a Tweet StormCreate a Group for a Tweet StormCreate a Group for a Tweet Storm

Necesitamos extender el comportamiento de creación predeterminado para completar el modelo. Estoy reutilizando mi método Slugify de Geogram para crear un slug de tipo URL desde el nombre. Agregue esto a Group.php:

Aquí está la modificada actionCreate en GroupController.php:

Añadiendo tweets a la tormenta

A continuación, agregue tweets de estado para su tormenta y seleccione la secuencia numérica con la que deben aparecer:

Compose a status tweet for a tweet stormCompose a status tweet for a tweet stormCompose a status tweet for a tweet storm

Utilizamos una forma derivada de la forma de composición de Birdcage:

Aquí está el archivo de vista _groupform.php:

Este es el método getSequence que el formulario usa, desde Status.php:

Los tweets de estado dentro de los grupos son cuatro caracteres más cortos que 140 para permitir la inserción de numeración de la secuencia.

Cuando añada tweets de estado a su grupo, la página Administrar grupo se verá así:

Group view for the tweet storm statusesGroup view for the tweet storm statusesGroup view for the tweet storm statuses

Las mejoras futuras podrían incluir controles de secuencia hacia arriba / abajo para los elementos de estado, así como algunos números automáticos cuando agregue nuevos tweets.

Publicar la tormenta

Mientras que sólo puede publicar los tweets en secuencia, es útil para gestionar esto en un proceso en segundo plano para la robustez, en caso de que haya fallos a mitad de camino.

Dado que muchas funciones de la API de Twitter requieren cursores o paginación, ya he construido un modelo de proceso de fondo en mi marco avanzado, Birdhouse. Te mostraré los fundamentos de la adición de la publicación de tormenta de tweet a tu aplicación.

Al hacer clic en Publicar tormenta, creamos una acción para administrar este proceso en segundo plano:

A continuación, las tareas de fondo cron normales gestionan la tabla Action y llamarán Action::model()->publishStorm:

Esto, a su vez, llama a publishStormItems del modelo Group:

La consulta ActiveRecord que usamos para encontrar los tweets de estado en un grupo que no se han publicado es la siguiente:

Esta consulta utiliza filtros scopes que se definen de la siguiente manera en el modelo Status:

A medida que pasamos por cada estado que necesita ser tweeted, añadimos un prefijo para el número de secuencia, p. "1. Mi primer tweet es ...":

Cuando se publica un estado, la etapa se incrementa. Las mejoras futuras podrían incluir permitir que las tormentas de tweet sean repostadas varias veces. Actualmente, solo permitimos una publicación (de nada, Buzzfeed).

Si todos los tweets se han publicado correctamente, publicamos un tweet final con un enlace a la tormenta de tweet:

Esto es lo que ve en un Tweet Storm cuando se publica:

Another example of tweet storm in my streamAnother example of tweet storm in my streamAnother example of tweet storm in my stream

Viendo la tormenta en la Web

Así, aunque pudiéramos mostrar tormentas de tweet públicamente en la web en forma de texto como Yvo Schaap, pensé que sería mejor usar incorporaciones de Twitter que el usuario pueda interactuar con, p. Seguir, responder, retweet et al.

Tweet storm shown publicly on the web with OEmbed HTMLTweet storm shown publicly on the web with OEmbed HTMLTweet storm shown publicly on the web with OEmbed HTML

Inicialmente, pensé que podría ser capaz de usar código HTML estático y sólo reemplazar el twitter_id en la vista, pero Twitter prefiere hacer una llamada OEmbed y almacenar en caché el HTML para cada tweet. He creado la tabla Embed arriba para hacer esto.

Así que, primero, vamos a crear una ruta en el UrlManager de Yii para que la ruta de nuestra aplicación pueda redirigir para ver tweetstorms por el slug URL-friendly. En /app/protected/config/main.php, agregue el redireccionamiento de slug de tormenta a continuación. Esto redirigirá las consultas a http://example.com/storm/mi-pensamientos-en-la-twitters-api a la acción de búsqueda del controlador de grupo con mi-pensamientos-en-la-twitters-api como el parámetro:

Usando los filtros de acceso del controlador de Yii, hagámoslo para que cualquier visitante público pueda ver tormentas, pero las acciones CRUD sólo son visibles para los usuarios autenticados. Modifique las accessRules en GroupController.php de la siguiente manera:

Cuando llega una solicitud para http://example.com/storm/el-nombre-de-tu-tormenta, se dirige a la acción de búsqueda del controlador Group:

El método fetchEmbeds busca primero en nuestra base de datos una copia en caché y luego hacia fuera a la API de Twitter para buscar el código HTML. El método fetchEmbeds crea una matriz de tweets HTML:

Utiliza el método fetch del modelo Embed:

Sólo inicia la conexión de OAuth a Twitter si hay al menos un tweet_id que se debe buscar y lo hace sólo una vez por razones de rendimiento.

Para concluir

Espero que haya encontrado este tutorial de tweet storm útil. Definitivamente era una característica divertida para construir. Por favor no dude en publicar correcciones, preguntas o comentarios a continuación. Intento mantenerme al día con los hilos de comentario de Tuts+. También puede contactarme en Twitter @reifman o enviarme un correo electrónico directamente.

Puedes encontrar el tutorial inicial de la API de Twitter para Birdcage aquí, y un enlace a todos mis tutoriales de la API de Twitter en mi página de autor de Tuts+ a medida que se publican. Birdcage ofrece un repositorio Github gratuito y de código abierto para comenzar con las características básicas de la API de Twitter.

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.