Comment créer un Bot Twitter complet en PHP
Par Benjamin le 3 mai 2016 dans PersoPHPTutorielsWeb
Facebook Tweeter Google+ Commentaires Newsletter3 mai 2016 : Petite mise à jour du tutoriel, support pour le PHP7.0, nouvelles commandes pour l’installation de Oauth pour PHP (méthode 2).
Vous souhaitez créer un bot Twitter ou vous êtes tout simplement curieux sur les possibilités que ce type script peut offrir ? Ce tutoriel est fait pour vous ! Je vais vous détailler toutes les étapes pour mettre en place un robot Twitter : de la création d’une application sur le site dev.twitter.com à la partie développement PHP. Bien entendu j’ai choisi PHP qui est mon langage de prédilection mais il est possible de le faire en Python, Java, Ruby, C++ ou tout type de langage qui peut gérer du JSON et les connexions REST.
Quelle pourrait être l’utilité d’un Bot Twitter ? Et bien il peut exister plusieurs cas : Parfois l’utilisation pourra être commerciale, souvent même (ex : les comptes twitters qui vous répondent un lien, d’autres qui vont auto like/fav des tweets contenants certains mots clés, d’autres qui vont vous follower pour tenter d’être suivi à leur tour et vous envoyer un DM) et ça je ne vous le conseille pas, sauf si vous êtes très habille et que vous pouvez rendre service. Si votre bot est là pour faire bêtement du spam (des article de blog, des produits à vendre), pareil je ne vous le conseille pas.
Mais après il y a des tas de bots Twitter qui sont créés pour pleins d’autres cas :
Personnel ????
Informatif / Ludique ????
D’autre pour rappeler les dangers de diffuser des informations personnelles sur le web, comme @NeedADebitCard qui retweet tous les tweets contenant une photo de carte bancaire
Humoristique ????
@EnjoyTheFilm qui vous spoile la fin de certains films renseignés sur Twitter du genre « I’m going to watch Star Wars the force Awakens yessss » >> Pas si drôle pour l’auteur du tweet je le reconnais.
Pour faire fonctionner le bot, il faudra utiliser l’API 1.1 de Twitter, et OAuth (application only authentification) qui est l’un des protocoles de connexion les plus simple à mettre en place selon les configurations (il y avait aussi REST mais peu utile pour notre cas, plus d’infos dans la doc Twitter).
Sur le net, les services clé en main proposant de créer ses propres bots ne manquent pas, avec plus ou moins de fonctionnalités. Il existe en revanche des tutos comme celui ci qui vous permettra de créer des bots de toute pièce et aussi du coup les comprends et en avoir la maîtrise à 100% (c’est mieux non ?). Je vais essayer de faire le maximum pour vous créer un vrai BON bot, qui se lancera toutes les minutes et qui sera très très restrictif en plus d’éviter au maximum d’importuner les utilisateurs (blacklist, traitement d’un objet tweet pour en deviner sa nature [si tweet personnel ou commercial etc]). Il y a pleins de choses à connaître avant d’arriver à obtenir un super bot : précis, drôle ou qui peut répondre en fonction des interactions avec la réponse du « twittos ». Prenez conscience qu’après ce tuto il faudra encore bosser pas mal d’heures pour monter votre robot (en fonction de ses besoins), car au final ce n’est que de la procédure qui pourra être simple comme compliqué, presque le même principe que l’intelligence artificielle dans les jeux vidéos…
Reeeeaaaady ?
Sommaire
- Pré-requis
- Créer une application Twitter
- Installer l’extension OAuth pour PHP
- Première Class TwitterBot et test de connexion vers l’API Twitter
- Création des fonctions de base du Bot
- Tester manuellement et mettre en place un CRON
- Aller plus loin : réponses, blacklist
- Conclusion
Pré-requis
Les quelques pré-requis qui diffèrent un peu de l’ancien tutoriel (et oui on peut changer)
- Un serveur dédié ou ou virtuel sous Linux (pour le tutoriel j’utilise Debian)
- PHP 5.2 minimum
Créer une application Twitter
Tout d’abord, il faut créer une application à l’aide de son compte Twitter (un compte vérifié à l’aide d’un numéro de téléphone mobile). Une fois loggé allez sur la page apps.twitter.com et cliquez sur « Create new app ».
Renseignez les champs obligatoires, indiquer un site web (ou votre site perso si votre bot ne sera pas lié à un site web). Pas besoin de remplir d’autres champs que les champs obligatoires.
Une fois votre application créée, allez dans l’onglet « Permissions » afin de donner l’accès complet à votre application : Lecture, écriture et accès aux messages privées.
Puis, dans l’onglet « Keys and Access Token » vous trouverez une clé API et API secret a récupérer. Vous devriez avoir un token d’accès à générer en dessous, générez-la et récupérez la clé Token et sa clé secret.
C’est tout. Votre application a été crée sur Twitter, vous pouvez y ajouter un avatar, ajouter une description détaillée si vous vous sentez mégalo, ça ne regarde que vous !
Installer l’extension OAuth pour PHP
Si vous avez déjà OAuth, vous pouvez passer cette étape. Il y a plusieurs façon d’installer OAuth. La première est la plus simple, mais si vous avez la version 7 de PHP vous devrez utiliser la méthode 2 (car à l’heure ou j’écris ce tuto, pas de librairie oauth dans les repo debian ou ubuntu). Selon votre configuration, l’une d’entre elle fonctionnera :
Méthode 1 :
sudo apt-get install php5-oauth
Activez Oauth en éditant php.ini (faites le à la fois pour la version FPM/CGI et CLI car vous allez utilisez OAuth avec PHP en ligne de commande une fois que vous lancerez la tâche CRON !)
sudo nano /etc/php5/cli/php.ini # et /etc/php5/fpm ou cgi/php.ini
Ajoutez dans la partie « extension= » de votre php.ini (en faisant une recherche Ctrl+W) la ligne suivante :
extension=oauth.so
Redémarrez Apache/Nginx ou PHP selon votre type d’installation ou serveur (note : en CLI, pas besoin de relancer PHP puisque PHP.ini est pris en compte à chaque nouveau processus PHP).
/etc/init.d/apache2 ou php5-fpm ou nginx restart
Méthode 2 :
En installant les paquets PECL et en incorporant l’extension OAuth à php.ini :
sudo apt-get install gcc make autoconf libc-dev pkg-config
Pour les versions 5.4, 5.5 et 5.6 de PHP :
sudo apt-get install php5-dev libpcre-dev
Pour PHP 7.0 :
sudo apt-get install php7.0-dev
Ensuite, installez Oauth via la commande PECL :
sudo apt-get install libcurl3-openssl-dev
pecl install oauth
Ajoutez dans la partie « extension= » de votre php.ini (en faisant une recherche Ctrl+W) la ligne suivante :
extension=oauth.so
Personnellement, j’ai du mettre ceci puisque j’ai installé PHP depuis les paquets non officiels debian : via dotweb :
extension=/usr/lib/php/extensions/no-debug-non-zts-20131226/oauth.so
Si vous êtes dans mon cas, allez vérifier ce que contient le dossier « /usr/lib/php/extensions/ » pour changer le chemin de l’extension si dessus :
ls -l /usr/lib/php/extensions/
Redémarrez Apache/Nginx ou PHP selon votre type d’installation ou serveur (note : en CLI, pas besoin de relancer PHP puisque PHP.ini est pris en compte à chaque nouveau processus PHP).
/etc/init.d/apache2 ou php5-fpm ou nginx restart
Première Class TwitterBot et test de connexion vers l’API Twitter
Maintenant que nous avons les accès et installé OAuth, nous allons créer un premier fichier PHP que l’on appellera directement (en console ou par navigateur).
Créez le fichier tweet.php :
[cce_php][/cce_php]
Ensuite créez le fichier TwitterBot.php ou nous allons y tester la connexion et créer notre première fonction de test « Hello World » :
[cce_php][/cce_php]
Dès à présent, vous pouvez tester l’exécution de tweet.php (si vous avez renseigné vos accès dessus…). Si vous lancer le fichier depuis une console, pensez à rajouter ceci dans tweet.php juste avant <?php :
[cce_php]#!/usr/bin/php[/cce_php]
Si vous n’avez aucune erreur, c’est que tout à fonctionné. Allez sur votre compte twitter, vous devriez voir votre nouveau status :). Félicitation ^^ ! Vous êtes prêt pour la suite ?
Création des fonctions de base du Bot
Nous allons remplir la class TwitterBot() avec de nouvelles fonctions. Pour que vous compreniez mieux, on va partir du principe que l’on souhaite rechercher les nouveaux tweets qui font mention à certains mots clés. Une fois récupéré, on va tout simplement leur répondre !
Pour illustrer ce tutoriel, nous serons le bot DogBot. Ce Bot répondra « Woof Woof » (je sais c’est ridicule mais il fallait bien trouver un exemple rapidement ^^) à chaque fois qu’un twittos écrit « c’est ouf » dans un tweet… En gros je vais plus ou moins reproduire ce que fait le compte @Le_Marsu (qui répond « Houba Houba » à chaque tweet contenant « ou pas ») ^^.
Vous noterez que j’ai recherché le terme « c’est ouf » avec les guillemets, car on souhaite avoir « c’est » + « ouf » ensemble dans le même ordre (sinon on récupère les tweets contenant ces mêmes termes dans tous les sens…). Les mots clés peuvent être plus poussés, à la manière des expressions régulières. Par exemple « -love » pour ne pas afficher de résultat contenant le mot « love, « love OR hate » pour tout ce qui contient soit soit « love », soit « hate » soit les 2 etc… Vous trouverez toute la liste dans la doc de l’API ici.
1. Création du/des termes de recherche
Dans la class TwitterBot, ajoutez en haut 3 nouvelles variables :
[cce_php]class TwitterBot{ protected $url_update = 'https://api.twitter.com/1.1/statuses/update.json'; private $replies = array(); private $oauth; private $screenName;[/cce_php]
Puis à la fin de la classe, ajoutez la fonction d’ajout de termes de recherche et la fonction run() que j’expliquerai après :
[cce_php]public function addReply($terms,$regex,$type){ $this->replies[] = array('terms' => $terms,'regex' => $regex,'type' => $type); }; public function run(){ // }[/cce_php]
Dans le fichier tweet.php, commentez la fonction de test() et ajouter les 2 nouvelles fonction à exécuter. addReply() contiendra le terme de recherche à envoyer vers Twitter (et sa variante regexp dans le cas ou on désire récupérer des termes dans le tweet).
[cce_php]//$twitter->test(); $twitter->addReply(array('%22c%27est ouf%22 -RT'),'~c'est ouf (.*)~i','dogbot'); $twitter->run();[/cce_php]
Dans addReply(), plusieurs choses sont à comprendre :
- Le premier terme de recherche sera les mots clés envoyé vers Twitter. Ils sont encodés en ASCII comme les urls : les guillemets deviennent donc des %22n l’apostrophe %27 etc… (plus d’infos ou convertisseur). Notez que les espaces peuvent rester des espaces.
- Toujours dans le premier paramètre, j’ai rajouté « -RT », vous verrez que c’est bien utile, car dans les résultats s’afficheront tous les RT (Retweets, les partages quoi) et vous trouverez donc des doublons inutiles puisque vous allez répondre à toutes personnes qui ont RT alors qu’elles ne sont pas les auteurs (sauf si vous le souhaitez vraiment).
- Le second paramètre est une expression régulière. Il s’agira dans les résultats de récupérer après « c’est ouf » un mot (plus long que les autres) ou une phrase que l’on pourra analyser (et vous ferez ce que vous voulez avec ^^). Par exemple le tweet suivant « Hé mais c’est ouf mec ce tuto ! », la regexp va récupérer « mec ce tuto », si je souhaite le plus long mot j’obtiens « tuto », et si je veux le rajouter à la réponse du bot, j’aurai « Woof Woof Tuto ! »…
- Le dernier paramètre, tout simplement le nom de votre paramètre, histoire de le différencier dans la class si vous faisez plusieurs mots clés et que vous proposez des réponses différentes…
Vous aurez compris qu’en codant en objet, les possibilités sont multiples, ici vous pourrez par exemple ajouter autant de terme de recherche que possible, et côté Class vous pourrez ajouter autant de fonctions à appeler que souhaité.
2. Récupération de la liste des derniers tweets
Pour récupérer les derniers tweets, nous allons d’abord créer un petit fichier pour stocker l’id du tout dernier tweet, ce qui nous permettra ensuite de charger uniquement les nouveaux tweets depuis cet id (pour nous éviter aussi les doublons, une seule réponse suffira ^^). Pour cela, nous allons ajouter un getter/setter dans la class TwitterBot :
[cce_php]public function getSinceId($file='since_id'){ $since_id = @file_get_contents($file); if(!$since_id){ $since_id = 0; } return $since_id; } public function setSinceId($max_id=null,$file='since_id'){ file_put_contents($file, $max_id); }[/cce_php]
Créez un fichier vide since_id (avec les droits d’écriture adéquat, sinon 777).
Ensuite nous allons créer une fonction qui vérifiera si la connexion fonctionne, et récupérera l’username Twitter du bot :
[cce_php]private function verifyAccountWorks(){ try{ $this->oauth->fetch($this->url_verify, array(), OAUTH_HTTP_METHOD_GET); $response = json_decode($this->oauth->getLastResponse()); $this->screenName = $response->screen_name; return true; }catch(Exception $ex){ return false; } }[/cce_php]
On ajoute de nouvelles variables tout en haut de la class, juste en dessous de $url_update utilisé pour nos tests :
[cce_php]class TwitterBot{ protected $url_update = 'https://api.twitter.com/1.1/statuses/update.json'; protected $url_search = 'https://api.twitter.com/1.1/search/tweets.json?q=%s&result_type=recent&count=50&since_id=%s'; protected $url_verify = 'https://api.twitter.com/1.1/account/verify_credentials.json'; protected $url_token = 'https://twitter.com/oauth/request_token'; protected $url_token_access = 'https://twitter.com/oauth/access_token'; protected $url_auth = 'http://twitter.com/oauth/authorize';[/cce_php]
Enfin on insère les appels de ses fonctions dans run(), et on effectue la récupération de la liste :
[cce_php]public function run(){ //echo '========= ', date('Y-m-d g:i:s A'), ' - Started ========='."n "; $since_id = $this->getSinceId(); $max_id = $since_id; if ($this->verifyAccountWorks()){ /* For each request on tweet.php */ foreach ($this->replies as $key => $t){ /* find every tweet since last ID, or the maximum lasts tweets if no since_id */ $this->oauth->fetch(sprintf($this->url_search, urlencode($t['terms'][0]), $since_id)); $search = json_decode($this->oauth->getLastResponse()); if($search){ //echo 'Terms #'.$key.' : '.count($search->statuses).' found(s)'."n "; /* Store the last max ID */ if ($search->search_metadata->max_id_str > $max_id){ $max_id = $search->search_metadata->max_id_str; } $i = 0; foreach ($search->statuses as $tweet){ echo '@'.$tweet->user->screen_name.' : '.$tweet->text.' '; } //echo 'Terms #'.$key.' : '.$i.' valid(s)'."n "; } } /* setting new max id */ $this->setSinceId($max_id); //echo '========= ', date('Y-m-d g:i:s A'), ' - Finished ========='."n ";; } }[/cce_php]
Vous devriez afficher une liste de tweets ! Vous pouvez aussi dé-commenter les commentaires pour avoir plus d’informations. Notez que si vous réexecuter l’opération, vous devriez afficher seulement les nouveaux tweets. Si tout fonctionne, vous pouvez passer à l’étape suivante !
3. On crée nos appels dans tweet.php
Maintenant que vous pouvez récupérer les tweets en fonction des termes de recherche, nous allons mieux les filtrer et envoyer une réponse à chacun. Pour cela, nous allons éditer la boucle foreach ($search->statuses as $tweet) de run() :
[cce_php]foreach ($search->statuses as $tweet){ /* If you are the author of the tweet, we ignore it */ if ($tweet->user->screen_name == $this->screenName){ continue; } /* if tweet is a quote (like a RT), we ignore it */ if($tweet->is_quote_status){ continue; } $pass = false; switch($t['type']){ case('dogbot'): //echo '@'.$tweet->user->screen_name.' : '.$tweet->text.' '; $t['word'] = null; /* initialisation variable mot additionnel */ /* if the regex specified found something, we try to get the content */ if(preg_match($t['regex'], $tweet->text, $content)){ /* get the longest word after keyword */ $words = explode(' ',$content[1]); $maxword = null;$maxlength = 0; foreach($words as $w){ $wlength = strlen($w); if($wlength >= $maxlength){ $maxword = $w; $maxlength = $wlength; } } if($maxword){ $t['word'] = $maxword; } } $pass = true; $i++; break; default: echo 'ERROR: NO TYPE DEFINED'; break; } if($pass){ $this->sendReply($tweet, $t); /* wait 100ms */ usleep(100000); } } //echo 'Terms #'.$key.' : '.$i.' valid(s)'."n ";[/cce_php]
Pensez à regarder le contenu d’un objet $tweet à l’aide d’un print_r(), vous verrez beaucoup d’information comme la fiche de l’auteur, les urls, les images etc. Si vous voulez utiliser ces informations pour votre bot, libre à vous de le faire.
A la fin de chaque boucle, on utilise la fonction sendReply() qui va envoyer une réponse :
[cce_php]private function sendReply($tweet, $tab, $nodie=false){ switch($tab['type']){ case('dogbot'): $m3 = [' ☺',' ☺',' ????',' ????',' ????',':)','!',';)','!']; $reply = 'Woof Woof ! '.($tab['word'] ? $tab['word'].' ' : '').$m3[array_rand($m3)]; break; default: echo 'ERROR: NO TYPE DEFINED'; die(); } try{ $this->oauth->fetch($this->url_update, array('status' => '@'.$tweet->user->screen_name.' '.$reply,'in_reply_to_status_id' => $tweet->id_str,), OAUTH_HTTP_METHOD_POST); }catch(OAuthException $ex){ echo 'ERROR: '.$ex->lastResponse; if(!$nodie){ die(); } } }[/cce_php]
Testez votre code, pour cela, commentez $this->sendReply($tweet, $t); et dé-commentez les echos, ensuite exécutez la page sur votre terminal ou mieux, un navigateur :
Laissez charger quelques secondes, et voilà 50 tweets (oui parce que la limite de l’API c’est 50 à priori, bien suffisant). Les tweets sont de vrais tweets, j’ai mis des liens dessus. Patientez quelques minutes et relancez la page, vous devriez avoir une page vide ou quelques nouveaux tweets. Si vous avez ce résultat, alors tout va bien ! Vous pouvez re-commenter et passer à l’étape next !
Tester manuellement et mettre en place un CRON
Je tiens à vous prévenir, si vous tester EXACTEMENT ce tutoriel, vous risquez d’en enerver plus d’un, car il y a entre 1 et 3 tweets avec le terme « c’est ouf » par minutes sur le site de micro-blogging ^^. Pensez donc à aller sur votre compte Twitter et supprimez vos réponses le temps de faire vos tests, j’ai vécu ça aussi et NON je ne dévoilerai pas le bot dont je suis l’auteur !!!!
Il va falloir automatiser le lancement de votre script. Retournez dans votre invite de commande (en mode root ou non)…
[cce_bash]crontab -e[/cce_bash]
Dans la capture d’écran ci-dessus, je fait appel à mon script toutes les 2 minutes (= */2), pour éviter les éventuelles erreurs d’appel API sur du long terme (et être en tweetlimit), mais essayez de le faire toutes les minutes pour vos tests, après libre à vous d’indiquer une périodes (je recommande entre 2 et 5 minutes pour des mots clés fréquents) :
[cce_bash]* * * * * /usr/bin/php /path/to/directory/tweet.php[/cce_bash]
Voilà. Vous avez un bot Twitter tout simple en PHP ! Si vous voulez vraiment vous investir dans un bot, je vous conseille vivement de continuer l’étape suivante, notamment la gestion d’une liste noire ou encore interagir avec les réponses des auteurs de tweets sur vos réponses…
Aller plus loin : réponses, blacklist
Notre script est en PHP Objet, et le fichier tweet.php va permettre d’ajouter autant de recherche possible. C’est le moment d’utiliser une blackliste ! Pourquoi une blacklist :
- Tout d’abord pour les utilisateurs que vous dérangez (même s’ils peuvent vous bloquer mais ce n’est pas bon de bloquer un bot, des admins Twitter pourraient en venir à clôturer votre compte)
- Retirer les méchants Twittos ou des rageux qui vous insultent…
C’est le cas de @LeWikiBot et @Le_Marsu (j’ai que ceux là en tête désolé), chacun à leur manière : @Le_Marsu vous blackliste si vous lui répondez avec une des insulte suivante : gueule, ferme, putain, connard… La suite et bien plus. @LeWikiBot lui propose d’envoyer « STOP @LeWikiBot » et vous serez blacklisté (marche aussi en remplaçant STOP par chut ou ta gueule), cependant « REVIENT @LeWikiBot » vous fait automatiquement retiré de la blacklist…
Pour créer une blacklist, vous allez devoir recréer un fichier stop.php qui reprendra les mêmes éléments que tweet.php :
[cce_php]#!/usr/bin/php[/cce_php]
Pourquoi je vous recommande de recréer un fichier stop.php et pas tout simplement mettre detectSTOP() à la suite des fonctions dans tweet.php ? Parce que vous allez appeler tweet.php toutes les minutes, alors que pour stop.php il suffira de l’appeler qu’une fois par heure par exemple…
Créez un fichier vide stop_id comme since_id (avec les droits d’écriture adéquat, sinon 777). Ce fichier mémorisera le dernier id de Tweet comme l’ancien script.
Créez un fichier vide stop (avec les droits d’écriture adéquat, sinon 777). Ce fichier enregistrera sous la forme d’un tableau JSON tous les pseudos Twitter à blacklister.
Passez à la fonction detectSTOP() que vous rajouterez à votre Class TwitterBot() :
[cce_php]public function detectSTOP(){ $since_id = $this->getSinceId('stop_id'); $max_id = $since_id; if (!$this->verifyAccountWorks()){ die(); } $this->oauth->fetch(sprintf($this->url_search, urlencode('stop OR chut @dogbot'), $since_id)); $search = json_decode($this->oauth->getLastResponse()); $passprincipal = false; if($search){ $stop = json_decode(file_get_contents(__DIR__.'/stop'), true); $tweetArray = array(); foreach ($search->statuses as $tweet){ $pass = false; if(!in_array($tweet->user->screen_name,$stop)){ $stop[] = $tweet->user->screen_name; $tweetArray[] = $tweet; $pass = true; $passprincipal = true; } } if($passprincipal){ file_put_contents(__DIR__.'/stop',json_encode(array_values($stop))); } if($search->search_metadata->max_id_str > $max_id){ $max_id = $search->search_metadata->max_id_str; $this->setSinceId($max_id,'stop_id'); } if($pass && $tweetArray){ foreach ($tweetArray as $tweet){ $this->sendReply($tweet, array('type' => 'STOP'), true); usleep(200000); } } } }[/cce_php]
Remplacez @dogbot par le pseudo Twitter de votre robot, le code va vérifier que les personnes ayant tweeté STOP n’existent pas déjà dans le tableau et va les ajouter. Elle renvoit ensuite une réponse via la fonction sendReply qu’il faudra du coup modifier.
Rajouter une réponse dans switch($tab[‘type’]) de sendReply() :
[cce_php]switch($tab['type']){ case('dogbot'): $m3 = [' ☺',' ☺',' ????',' ????',' ????',':)','!',';)','!']; $reply = 'Woof Woof ! '.($tab['word'] ? $tab['word'].' ' : '').$m3[array_rand($m3)]; break; case('STOP'): $reply = 'Woof ciao ????'; break; case('REVIENT'): $reply = 'Woof Merci !'; break; default: echo 'ERROR: NO TYPE DEFINED'; die(); }[/cce_php]
Je vous ai rajouté le cas REVIENT c’est cadeau. Pour ReEVIENT c’est la même chose que STOP, créez un fichier revient.php, remplacez $twitter->detectSTOP() par $twitter->detectREVIENT() et dans TwitterBot ajoutez cette fonction qui enlèvera la personne de la blacklist :
[cce_php]public function detectREVIENT(){ $since_id = $this->getSinceId('revient_id'); $max_id = $since_id; if (!$this->verifyAccountWorks()){ die(); } $this->oauth->fetch(sprintf($this->url_search, urlencode('revient @dogbot'), $since_id)); $search = json_decode($this->oauth->getLastResponse()); $passprincipal = false; if($search){ $stop = json_decode(file_get_contents(__DIR__.'/stop'), true); $tweetArray = array(); foreach ($search->statuses as $tweet){ $pass = false; foreach($stop as $k => &$s){ if($s == $tweet->user->screen_name){ unset($stop[$k]); $tweetArray[] = $tweet; $pass = true; $passprincipal = true; } } } if($passprincipal){ file_put_contents(__DIR__.'/stop',json_encode(array_values($stop))); } if ($search->search_metadata->max_id_str > $max_id){ $max_id = $search->search_metadata->max_id_str; $this->setSinceId($max_id,'revient_id'); } if($pass && $tweetArray){ foreach ($tweetArray as $tweet){ $this->sendReply($tweet, array('type' => 'REVIENT'), true); usleep(200000); } } } }[/cce_php]
Si vous voulez tout simplement répondre à la personne, je n’ai pas besoin de vous expliquer : Vous faites une nouvelles fonction dans TwitterBot() et vous recherchez soit n’importe quelle réponse que vous filtrerez par des regex, soit des réponses prédéfinies :
[cce_php]public function detectREPONSE(){ /* ... */ $this->oauth->fetch(sprintf($this->url_search, urlencode('@dogbot'), $since_id)); /* n'importe quelle réponse */ $this->oauth->fetch(sprintf($this->url_search, urlencode('ok OR merci OR super OR %22je t%27aime%22 OR jtm OR excellent @dogbot'), $since_id)); /* type de réponse positive... */ $this->oauth->fetch(sprintf($this->url_search, urlencode('%22pas intéressé%22 OR non @dogbot'), $since_id)); /* type de réponse négative... */ /* ... */[/cce_php]
Conclusion
Voilà voilà, j’espère que ce tuto n’est que le début pour vous… Amusez-vous bien ! Woof fini…
Désolé pour le code mal indenté, c’est WordPress qui fait ça, mais ne soyez pas déçu, voilà la source complète ici : TwitterBot_1.0 ????. Attention ne reprenez pas bêtement ce fichier sans faire ce tutoriel sans quoi vous aurez du mal à continuer votre bot, autant bien comprendre les mécanismes de base !
Continuez sur le site...
Restez informés des Actus, Tutos et Bons-Plans en suivant BXNXG :
Tags
Rankybird SocialTool
Benji_X80
Rankybird SocialTool
Benji_X80
Anʇo
Benji_X80
Anʇo
Anʇo
Benji_X80
Anʇo
Benji_X80
Benji_X80
DigiToSell
DigiToSell.com
David hasselhoff
Benji_X80
Damien Pichevin
Laura
Benji_X80
Bernard Chabrol
Benji_X80
Bernard Chabrol
Jan
Benji_X80
Louis Oklm
Benji_X80
ZABABAB
Benji_X80
ZABABAB
DarKiev
Bonjour,
Merci pour le tuto ! J’ai une petite question : comment puis-je ajouter une image dans un tweet ?
Merci d’avance.
Benji_X80
Salut, alors pour ajouter une image, faut en gros faire un premier envoi : l’image, ça retournera un « media_id » qu’il faudra rattacher au second envoi : le tweet (la même commande qu’ici).
C’est expliqué ici https://dev.twitter.com/rest/reference/post/media/upload il suffit d’adapter la commande au code déjà existant, après la méthode d’envoi du fichier, ça ressemble à de l’envoi en POST avec méthode binaire, une petite recherche sur google de « php send file restful multipart/form-data » peut aider 😉
DarKiev
Wow, merci pour cette réponse rapide et claire !
Il me reste une petite question : Est-il possible de planifier un tweet ?
Merci d’avance pour ta réponse et ta disponibilité 🙂
Benji_X80
Salut, planifier n’est pas possible sur Twitter malheureusement. Pour planifier il faudra aller plus loin, avoir une base de données de tweet à préparer avec une date d’envoi par exemple. Avec la tâche cron du tuto, il suffira de rajouter une fonction qui ira verifier en base de données les tweets qui correspondent à la date en cours (ou anterieur) pour les envoyer (et vider ensuite de la BDD)…
DarKiev
D’accord.
En fait je comptais lancer un script php en y passant en argument des paramètres car j’ai besoin que mon tweet, à l’instant T, soit dynamique. En gros, au moment ou je lance mon script, j’ai besoin qu’il aille faire des requêtes en BDD et que mon tweet soit relatif aux résultats de la requêtes.
Il ne me restera plus qu’à planifier l’appel de ce script php.
Merci encore pour tes réponses.
dorian
slt je voudrais savoir si tu as un lien pour follow en masse sur twitter stp dans inspecter l’element dans console merci bcp 🙂
Benji_X80
Salut désolé je vois pas trop là
Mathieu
Bonsoir, encore merci pour ce tutoriel ! Tu m’aides beaucoup c’est très intéressant.
J’aimerais programmer des réponses automatiques à des questions posées par Messages Privés, pour ça il faudrait encore que je puisse les récupérer ! J’ai essayé d’ajouter ça à TwitterBot.php à partir des indications que tu m’avais donné pour autre chose :
https://pastebin.com/8d4CgTs2
Dans un autre fichier j’appelle la fonction mais elle fait une erreur :
https://i.imgur.com/yJ6ZsKh.png (La ligne 84 c’est la ligne 13 du pastebin)
Benji_X80
Salut, Pour les url en /direct_messages, as tu bien précisé dans les paramètres de ton application twitter de mettre les droits R, W et D << direct messages ?
As tu testé d'autres appels OAuth dans tes scripts (logiquement la connexion), si ça fonctionne, alors cette URL devrait fonctionner elle aussi avec RWD.
Mathieu
Il y a bien toutes les permissions dont ce qui concerne les dm.
Et OAuth marche pour le follow donc oui j’ai testé d’autres appels 🙂
Ta réponse me laisse penser que l’erreur ne te donne pas assez d’indications pour cerner mon problème 🙁
Voici la classe TwitterBot.php complète : https://pastebin.com/73KztXBc
Et la page dms.php que j’appellerai à terme avec cron mais que je teste avec le navigateur ( https://abadroch.fr/twitter/bot/dms.php ) pour le moment : https://pastebin.com/Zvq8ZMet
En espérant que tu trouveras quelque chose, merci beaucoup pour ton aide 😀