Bienvenido de nuevo a nuestra cobertura de la API de Twitter. Si usas Twitter, es posible que te hayas encontrado con un amigo que comparte tweets desde el bot @infinite_scream (que se muestra arriba). Sé que es principalmente un bot porque tuitea en intervalos de diez minutos. Pero varía la longitud de la cadena de sus gritos virtuales para evitar ser bloqueado por la infame API de Twitter. indocumentado restricciones Haz tweets con demasiada frecuencia o repite el mismo contenido y encontrarás que tus bots están bloqueados irremediablemente.
Recientemente, un amigo en línea me pidió que les ayudara a escribir código para un bot que podría repetirse pero que proporcione alguna variación de contenido inteligente. En el tutorial de hoy, escribiré sobre cómo hacer esto con la API de Twitter..
En el tutorial de hoy, describiré cómo construir un bot que hace lo básico:
Sin embargo, si desea utilizar un bot de la API de Twitter para promocionar eficazmente su producto o servicio en su propia cuenta sin molestar a sus seguidores, debe escribir un código que varíe de forma inteligente el tema, el contenido y la frecuencia de sus tweets de forma organizada. Estaré escribiendo sobre cómo hacer eso en futuros episodios..
Si tiene alguna pregunta o idea, por favor publíquela en los comentarios a continuación. Si desea ver algunos de mis otros tutoriales de Envato Tuts +, visite la página de mi instructor, especialmente mi serie de inicio. Empecemos.
Para el bot en el episodio uno, estoy tratando de generar tweets divertidos de forma regular mientras evito molestar a los grandes. Twitter dios del acceso restringido en el cielo.
El contenido del tweet es muy simple y se puede crear aleatoriamente combinando el texto de estado, los hashtags y las URL previamente escritos..
El bot se ejecuta en Yii, una popular plataforma basada en PHP. Mantendré la siguiente guía bastante simple para desarrolladores de PHP directos. Sin embargo, te animo a que utilices marcos. Puedes aprender más en mi Serie Yii.
Básicamente, lo primero que hice fue registrar una aplicación para obtener mis claves de Twitter:
Si no está familiarizado con la creación de una aplicación y la autorización de acceso a la API con Twitter, revise algunos de nuestros tutoriales anteriores:
Quería crear un sistema donde mi amigo (o cualquier autor aprobado) pudiera escribir variaciones de tweets y colocarlos en una base de datos para su uso continuo. Primero, creé una migración de base de datos para construir la tabla para ellos..
Todas mis tablas para este proyecto tienen el prefijo norma_
. Aquí está la tabla de Tweet o norm_tweet
:
db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_tweet', ['id' => Schema :: TYPE_PK, 'tweet' => Schema :: TYPE_TEXT. 'NOT NULL', 'media_id' => Schema :: TYPE_STRING. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norm_tweet');
Luego, usé el sistema de andamios Gii de Yii para crear un modelo y archivos CRUD para mí. Aquí está el modelo:
Y aquí está la generación CRUD:
Por lo tanto, todo este código proporciona automáticamente la vista de cuadrícula a continuación y las capacidades de edición..
Por ahora, no estoy usando la ID de medios, que es para que las imágenes que se cargan se usen en los tweets. Probablemente abordaré esto en el próximo episodio.
Bastante sencillo hasta ahora, a la derecha?
Luego, repito este proceso para los otros modelos. Aquí esta la norm_hash
Migración de hashtags:
db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_hash', ['id' => Schema :: TYPE_PK, 'tag' => Schema :: TYPE_STRING. 'NOT NULL',], $ tableOptions); función pública hacia abajo () $ this-> dropTable ('% norm_hash');
La idea es incluir aleatoriamente un hashtag seleccionado (o dos) en los tweets para que parezca que el bot es humano, variando sus tweets..
Aquí está el Hashtag UX:
No repetiré los pasos de Yii Gii desde arriba, pero los repetiré para norm_hash
y norm_url
también.
Aquí está la migración de la base de datos para agregar URLs:
db-> driverName === 'mysql') $ tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'; $ this-> createTable ('% norm_url', ['id' => Schema :: TYPE_PK, 'url' => Schema :: TYPE_STRING. 'NOT NULL', 'last_used' => Schema :: TYPE_INTEGER. 'NOT NULL', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions); public function down () $ this-> dropTable ('% norm_url');
El maestro del bot puede agregar direcciones URL en diferentes momentos. Probablemente sea mejor para este bot no usar URL antiguas o repetirlas. los utilizado por última vez
y Creado en
Las marcas de tiempo de Unix permiten que el algoritmo de tweet descrito a continuación decida cuándo usar las URL.
Aquí está la página de URL UX:
Ahora, veamos el divertido algoritmo para combinar todas estas tablas en tweets interesantes que no son molestos para Maestro Overlord de Restricciones de Twitter.
Es divertido tener un bot que tuitea una variedad de contenido, pero la variedad también es útil para evitar que Twitter lo bloquee..
Puede ver los límites de tasa de Twitter aquí, pero algunas de las reglas para la repetición de contenido no parecen estar documentadas:
Recibí indicaciones de mi amigo sobre cómo querían que el algoritmo construyera tweets de la base de datos de tweets, hashtags y URL..
Aquí está el algoritmo de construcción que decidimos por ahora; Es fácil de modificar. Lo describiré en partes.
En mi opinión, el algoritmo a continuación es bajo en el uso de hashtags y URL, y si desea una variedad de contenido más robusta, cámbiela a su gusto.
Primero nosotros use yii \ db \ Expression;
Para seleccionar correctamente un texto de un solo tweet aleatorio de la tabla:
orderBy (nueva expresión ('rand ()')) -> one ();
Luego decidimos si usar un hashtag (actualmente 1 en 5 o 20% del tiempo) y cuántos usar (actualmente está fijo a solo uno):
// decide si usar un hashtag // elige un número aleatorio entre 0 y 4 $ useHash = rand (0,4); // si rand # no es 0, sino 1,2,3 o 4, incluya el hashtag (s) // para un uso menos frecuente de las etiquetas hash, podemos cambiar esto> 2 o> 3 si ($ use Hash> 3) // así que ahora vamos a decidir cuál y cuántas etiquetas hash para // El creador decidió usar solo un hashtag por ahora $ numHash = 1; // rand (1,3); // seleccione este rand # $ numHash al azar de nuestra lista $ hash = NormHash :: find () -> orderBy (nueva expresión ('rand ()')) -> one (); else // no use ningún hashtags $ hash = falso;
Luego, decidimos si hay una URL disponible para usar. Las URL deben tener menos de una semana de antigüedad y solo pueden usarse una vez cada 72 horas (3 días). Por lo tanto, cualquier nueva URL solo puede estar disponible para su uso una, dos o tres veces antes de que caduque.
// solo usa una url si tiene menos de una semana $ url_weekago = tiempo () - 7 * 24 * 3600; $ url_3daysago = tiempo () - 3 * 24 * 3600; // solo use una url si no se ha publicado en las últimas 72 horas $ url = NormUrl :: find () -> where ('created_at>'. $ url_weekago) -> andWhere ('last_used<'.$url_3daysago) // handles unused zero case ->orderBy (['id' => SORT_DESC]) -> one ();
Finalmente, construimos el tweet en función de los datos seleccionados (las URL disponibles se agregan solo una de cada cuatro veces o 25% de probabilidad):
$ content = $ txt-> tweet; if ($ hash! == false) $ content. = '#'. $ hash-> tag; // solo agrega la URL 1/4 del tiempo si (! is_null ($ url) && rand (1,4) == 1) $ content. = ". $ url-> url; $ url-> last_used = time (); $ url-> update (); return $ content;
Yii te permite llamar a controladores de consola desde cron. Así que agrego una llamada a mi /console/DaemonController.php en crontab.
$ sudo crontab -l
Así es como están programadas mis tareas:
# mh dom mon dow comando * / 3 * * * * / var / www / bot / yii daemon / frecuente * / 15 * * * * / var / www / bot / yii daemon / quarter 0 * * * * / var / www / bot / yii daemon / hourly 15 1 * * * / var / www / bot / yii daemon / overnight 15 3 * * 5 / var / www / bot / yii daemon / semanal
Cada hora, demonio / por hora
En /console/DaemonController.php se solicita. Nuestra aplicación de bot solo decide si twittear o no una vez cada cuatro horas.
Primero, verás que tengo un NormLog
tabla que no describí anteriormente, pero que rastrea toda la salida y cuándo se hicieron los tweets. Así que mi amigo no quería twittear más de una vez al día..
función pública actionHourly () // cada hora $ current_hour = date ('G'); if ($ current_hour% 4) // cada cuatro horas se hace eco de "Revisar el plan de tweeting ..."; $ dayAgo = time () - 24 * 3600; $ nl = \ frontend \ models \ NormLog :: find () -> orderBy (['id' => SORT_DESC]) -> one (); echo 'created_at:'. $ nl-> id. ". $ nl-> created_at. '...'; echo 'dayago:'. $ dayAgo. '...'; if ($ nl-> created_at<$dayAgo) // okay to maybe tweet…
No queríamos que los seguidores de nuestro bot se molestaran con los tweets de alta frecuencia.
Luego, seleccionamos un número, básicamente las seis veces al día (cada cuatro horas), y tuiteamos si el número es 6 (o una probabilidad entre 12).
// cada cuatro horas, si se selecciona 6 de 1-12, tuiteamos // 1 de cada 12 posibilidades 12x en dos días $ r = rand (1,12); if ($ r == 6) \ frontend \ models \ NormTweet :: deliver (); echo 'tweet, 6 fue elegido ...'; else echo "no twittear, 1 en 12 # no seleccionado ..."; else else // nunca twittear dos veces en 24 horas echo 'no twittear, aún no 24 hrs ...'; echo '... lo hizo para terminar ...!'; if ($ current_hour% 6) // cada seis horas
Aquí esta la NormTweet :: entregar ()
Método llamado por el demonio para publicar el tweet:
la función estática pública deliver () // publica una actualización // construye $ contenido = NormTweet :: build (); // tweetea usando params para norm acct $ connection = new TwitterOAuth (Yii :: $ app-> params ['norm'] ['consumer_key'], Yii :: $ app-> params ['norm'] ['consumer_secret '], Yii :: $ app-> params [' norm '] [' access_token '], Yii :: $ app-> params [' norm '] [' access_token_secret ']); $ postit = $ connection-> post ("status / update", ["status" => $ content]); // guardarlo en el registro $ nl = new NormLog (); $ nl-> tweet = $ contenido; $ nl-> guardar ();
Las claves de la aplicación de Twitter de la cuenta se almacenan en /bot/frontend/config/params-local.php, configurado desde el archivo bot.ini que uso:
$ más params-local.php ['consumer_key' => $ config ['norm_consumer_key'], 'consumer_secret' => $ config ['norm_consumer_secret'], 'access_token' => $ config ['norm_access_token'], 'access_token_secret' => $ config '],' user_id '=> $ config [' norm_user_id '],],];
Los bots no son simples, pero sí lo son. divertido!
Aquí están los resultados de nuestro bot:
Es una broma! Esa es una de las diosas editoriales, Tom McFarlin. Los scripts de AI todavía no son capaces de reemplazar sus "ideas", pero Envato Tuts + me ha contratado para trabajar en esto.
Aquí está el bot real, destinado a recordar a mi amigo y sus seguidores que la nueva política de Estados Unidos no es exactamente normal. Me imagino cuales sean tus opiniones con las que estés de acuerdo..
Espero que hayas disfrutado este episodio..
A continuación, crearé una plataforma más orientada al marketing para ayudarlo a usar la API de Twitter para promover su inicio, servicios y negocios sin ser etiquetado como un bot y bloqueado..
Si tiene alguna pregunta o sugerencia sobre este tutorial, por favor publíquelos en los comentarios. Si desea mantenerse al día con mis futuros tutoriales de Envato Tuts + y otras series, visite mi página de instructor o siga a @reifman.