Utilisation de l'API Twitter pour tweeter un contenu répétitif

Ce que vous allez créer

Bienvenue à notre couverture de l'API Twitter. Si vous utilisez Twitter, vous avez peut-être rencontré un ami partageant des tweets provenant du bot @infinite_scream (illustré ci-dessus). Je sais que c'est surtout un bot parce qu'il tweete toutes les dix minutes. Mais il varie la longueur de la chaîne de ses cris virtuels pour éviter d'être bloqué par l'infâme API de Twitter sans papiers restrictions. Tweet trop souvent ou répète le même contenu et tu trouveras tes robots bloqués sans espoir.

Récemment, un ami en ligne m'a demandé de les aider à écrire du code pour un bot qui pourrait être répété, mais fournirait une variation de contenu intelligente. Dans le tutoriel d'aujourd'hui, je vais expliquer comment faire cela avec l'API Twitter..

Dans le tutoriel d'aujourd'hui, je vais décrire comment construire un bot qui effectue les bases:

  • intervalle de tweet aléatoire
  • sélection aléatoire du texte d'état
  • sélection aléatoire de hashtags
  • inclusion aléatoire d'URL
  • éviter d'être bloqué par Twitter

Toutefois, si vous souhaitez utiliser un bot de l'API Twitter pour promouvoir efficacement votre produit ou service sur votre propre compte sans gêner vos abonnés, vous devez écrire un code qui varie de manière organisée le sujet, le contenu et la fréquence de vos tweets. Je vais écrire sur la façon de le faire dans les prochains épisodes. 

Si vous avez des questions ou des idées, postez-les dans les commentaires ci-dessous. Si vous souhaitez voir certains de mes autres didacticiels Envato Tuts +, veuillez visiter ma page d'instructeur, en particulier ma série de startups. Commençons.

Commencer

Pour le bot de l'épisode 1, j'essaie de générer régulièrement des tweets amusants tout en évitant de contrarier Twitter, dieu de l'accès restreint dans le ciel.

Le contenu du tweet est très simple et peut être créé de manière aléatoire en combinant du texte d'état, des hashtags et des URL préalablement écrits..

Le bot tourne dans Yii, une plate-forme populaire basée sur PHP. Je vais garder le guide ci-dessous assez simple pour les développeurs PHP. Cependant, je vous encourage à utiliser des cadres. Vous pouvez en apprendre plus dans ma série Yii.

Construire le bot

Enregistrement d'une application Twitter

En gros, la première chose que j'ai faite a été d'enregistrer une application pour obtenir mes clés Twitter:

Si vous n'êtes pas habitué à créer une application et à autoriser l'accès à l'API avec Twitter, veuillez consulter certains de nos didacticiels précédents:

  • Construire avec l'API Twitter: Mise en route

    Apprenez l'API Twitter avec PHP en utilisant une application autonome open-source Yii appelée Birdcage.
    Jeff Reifman
    API Twitter
  • Construire avec l'API Twitter: Tweet Storms

    Certaines idées sont trop grandes pour 140 caractères. Publiez vos pensées sous forme de séquences de tweets numérotées avec l'API Twitter. Dans ce tutoriel, nous allons travailler à travers les…
    Jeff Reifman
    API Twitter
  • Construire votre startup avec PHP: Simplifier Onramp avec OAuth

    Pour faciliter la tâche des nouveaux utilisateurs, nous allons leur permettre de s'inscrire avec leurs comptes Google, Facebook et Twitter et permettre aux utilisateurs existants de connecter ces services…
    Jeff Reifman
    Yii

Création de contenu pour une gamme de tweets

Je voulais créer un système où mon ami (ou tout auteur approuvé) pourrait écrire des variations de tweets et les placer dans une base de données pour une utilisation continue. D'abord, j'ai créé une migration de base de données pour construire la table pour eux.

Toutes mes tables pour ce projet ont le préfixe norme_. Voici la table Tweet ou norm_tweet:

db-> nomDuPort === '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');  

Ensuite, j'ai utilisé le système d'échafaudage Giii de Yii pour créer un modèle et des fichiers CRUD pour moi. Voici le modèle:

Et voici la génération CRUD:

Donc, tout ce code fournit automatiquement la vue de grille ci-dessous et des fonctionnalités d'édition.

Pour l'instant, je n'utilise pas l'ID de média, qui est utilisé pour les images téléchargées à utiliser dans les tweets. Je vais probablement répondre à cela dans le prochain épisode.

Assez simple jusqu'à présent, à droite? 

Ajout d'une plage de hashtags

Ensuite, je répète ce processus pour les autres modèles. Ici se trouve le norm_hash migration pour les hashtags:

db-> nomDuPort === '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);  public function down () $ this-> dropTable ('% norm_hash');  

L'idée est d'inclure au hasard un hashtag sélectionné (ou deux) dans les tweets pour donner l'impression que le bot est un humain, variant ses tweets. 

Voici le Hashtag UX:

Je ne vais pas répéter les étapes Yii Gii d'en haut, mais je les répète pour norm_hash et norm_url ainsi que.

Ajout d'une variété d'URL

Voici la migration de la base de données pour ajouter des URL:

db-> nomDuPort === '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' => Schéma :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schéma :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions);  public function down () $ this-> dropTable ('% norm_url');  

Le maître de bot peut ajouter des URL à des moments différents. Il est probablement préférable que ce bot n'utilise pas d'anciennes URL ou ne les répète pas. le last_used et créé à Les timestamps Unix permettent à l'algorithme de tweeting décrit ci-dessous de décider quand utiliser les URL.

Voici la page URL UX:

Maintenant, regardons l'algorithme amusant pour combiner toutes ces tables en tweets intéressants qui ne sont pas gênants Maître maître des restrictions de Twitter.

Randomiser le contenu de Tweets Bot

C'est amusant d'avoir un bot qui tweete une variété de contenu, mais cette variété est également utile pour l'empêcher d'être bloqué par Twitter. 

Vous pouvez voir les limites de taux Twitter ici, mais certaines des règles de répétition du contenu ne semblent pas documentées:

J'ai demandé à un ami comment il souhaitait que l'algorithme crée des tweets à partir de la base de données de tweets, de hashtags et d'URL..

Voici l'algorithme de construction que nous avons choisi pour l'instant; c'est facile à peaufiner. Je vais le décrire en parties.

À mon avis, l'algorithme ci-dessous utilise peu les hashtags et les URL, et si vous souhaitez une variété de contenu plus robuste, modifiez-le à votre guise..

Premièrement, nous utilisez yii \ db \ Expression; pour sélectionner correctement un texte de tweet aléatoire aléatoire dans le tableau:

orderBy (new Expression ('rand ()')) -> un (); 

Ensuite, nous décidons d’utiliser un hashtag (actuellement 1 sur 5 ou 20% du temps) et combien d’utilisateurs (actuellement fixé à un seul):

// décide s'il faut utiliser un hashtag // choisit un # aléatoire entre 0 et 4 $ useHash = rand (0,4); // si rand # n'est pas 0 mais à la place 1, 2, 3 ou 4, incluez un hashtag (s) // pour une utilisation moins fréquente des balises de hachage, nous pouvons changer ceci> 2 ou> 3 si ($ useHash> 3)  // donc nous allons maintenant décider quelles sont les balises de hachage et combien de celles-ci // Le créateur a décidé de n'utiliser qu'un seul hashtag pour le moment $ numHash = 1; // rand (1,3); // sélectionne ce rand # $ numHash de manière aléatoire dans notre liste $ hash = NormHash :: find () -> orderBy (new Expression ('rand ()')) -> one ();  else // n'utilisez pas de hashtags $ hash = false; 

Ensuite, nous décidons s'il existe une URL à utiliser. Les URL doivent avoir moins d'une semaine et ne peuvent être utilisées qu'une fois toutes les 72 heures (3 jours). Ainsi, toute nouvelle adresse URL ne sera peut-être disponible qu'une, deux ou même trois fois avant son expiration..

// n'utilise une URL que si elle a moins d'une semaine $ url_weekago = time () - 7 * 24 * 3600; $ url_3daysago = time () - 3 * 24 * 3600; // n'utilise une url que si elle n'a pas été postée au cours des dernières 72 heures $ url = NormUrl :: find () -> where ('created_at>'. $ url_weekago) -> andWhere ('last_used<'.$url_3daysago) // handles unused zero case ->orderBy (['id' => SORT_DESC]) -> un ();

Enfin, nous construisons le tweet en fonction des données sélectionnées (les URL disponibles ne sont ajoutées qu'une fois sur quatre, soit 25% de chance):

$ content = $ txt-> tweet; if ($ hash! == false) $ content. = '#'. $ hash-> tag;  // ajoute seulement l'URL 1/4 du temps si (! is_null ($ url) && rand (1,4) == 1) $ content. = ". $ url-> url; $ url-> last_used = time (); $ url-> update (); retourne $ contenu;

Choisir quand tweeter

Yii vous permet d’appeler les contrôleurs de la console à partir de cron. J'ajoute donc un appel à mon / consoles/DaemonController.php dans crontab.

$ sudo crontab -l

Voici comment mes tâches sont planifiées:

# mh dom commande mon dow * / 3 * * * * / var / www / bot / démon yii / fréquentes * / 15 * * * * / var / www / bot / démon yii / quarter 0 * * * * * / var / www / bot / yii daemon / hourly 15 1 * * * / var / www / bot / yii daemon / pendant la nuit 15 3 * * 5 / var / www / bot / yii daemon / hebdomadaire

Toutes les heures, démon / horaire dans /console/DaemonController.php est demandé. Notre application de bot ne décide que de tweeter ou non une fois toutes les quatre heures.

Tout d'abord, vous verrez que j'ai un NormLog tableau que je n'ai pas décrit ci-dessus, mais qui suit toutes les sorties et quand les tweets ont été faits. Donc, mon ami ne voulait pas tweet plus d'une fois par jour. 

fonction publique actionHourly () // toutes les heures $ current_hour = date ('G'); if ($ current_hour% 4) // toutes les quatre heures echo "Consultez le 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… 

Nous ne voulions pas que les abonnés de notre bot soient ennuyés par les tweets à haute fréquence.

Ensuite, nous choisissons un numéro, essentiellement les six fois par jour (toutes les quatre heures), et tweetons si le nombre est 6 (ou une chance sur 12).

 // toutes les quatre heures, si 6 est choisi de 1 à 12, nous tweetons // 1 chance sur 12 12x dans deux jours $ r = rand (1,12); if ($ r == 6) \ frontend \ models \ NormTweet :: deliver (); echo 'tweet, 6 a été choisi…';  else echo "ne tweet pas, 1 sur 12 # n'a pas été choisi…";  else // ne tweet jamais deux fois en 24 heures echo 'ne tweet pas, pas encore 24 heures…';  echo '… l'a fait se terminer…!';  if ($ current_hour% 6) // toutes les six heures 

Livrer le Tweet à l'API Twitter

Ici se trouve le NormTweet :: deliver () Méthode appelée par le démon pour poster le tweet:

fonction statique publique deliver () // publie une mise à jour // construct $ content = NormTweet :: build (); // tweetez-le en utilisant params pour 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 ("statuses / update", ["status" => $ content]); // l'enregistre dans le journal $ nl = new NormLog (); $ nl-> tweet = $ content; $ nl-> save (); 

Les clés d'application Twitter du compte sont stockées dans /bot/frontend/config/params-local.php, configuré à partir du fichier bot.ini que j'utilise:

$ plus 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 [3] '],' user_id '=> $ config [' id_utilisateur_ norm '],],]; 

Les robots ne sont pas simples, mais ils le sont amusement!

Examiner les résultats

Voici les résultats de notre bot:

Je rigole! C'est l'une des déesses éditoriales, Tom McFarlin. Les scripts d'intelligence artificielle ne sont pas encore capables de remplacer ses "idées", mais Envato Tuts + m'a engagé pour travailler sur ce sujet.. 

Voici le bot en question, destiné à rappeler à mon ami et à ses partisans que la nouvelle politique américaine n'est pas tout à fait normale. J'imagine quel que soit votre point de vue, vous seriez d'accord avec ça.

J'espère que vous avez apprécié cet épisode.

Et après?

Ensuite, je vais créer une plate-forme davantage axée sur le marketing pour vous aider à utiliser l'API Twitter afin de promouvoir votre démarrage, vos services et votre entreprise sans être étiqueté comme un bot et bloqué..

Si vous avez des questions ou des suggestions concernant ce didacticiel, veuillez les publier dans les commentaires. Si vous souhaitez suivre mes futurs tutoriels et séries d’Envato Tuts +, veuillez visiter ma page d’instructeur ou suivre @reifman.. 

Liens connexes

  • Comment programmer avec la série Yii2 (Envato Tuts +)
  • Yii2 Developer Exchange
  • Documentation développeur Twitter
  • Bibliothèque Twitter OAuth PHP