Hope you’ve all read the first part of this series – Create Your Own Automated Twitter Robot in PHP and got your own prototype up and running. Today we’ll be adding a remote control feature to our robot. It’ll be working through direct messages and running in crontab every 5 minutes or so. You can extend this as far as you want (adding retweet capabilities, follow/unfollow, direct messaging other people, etc) but we’ll stick to simple status updating in this post, might cover the others later on.
So, direct messaging the robot’s twitter account with the text “update status text” would make him tweet “status text” to the public timeline. Remember we had three branches of actions – feed, reply and rthx? Let’s add a fourth one and call it dm. This branch will simply scan through the account’s latest direct messages, find those sent by you and tweet them out loud. Again, as I said in the first tutorial, this is simply a prototype, just to get things up and running. You’ll have to polish this off for actual use and yeah, storing the access keys, dm_since_id, etc on disk is not such a good idea, you should probably use the database. Here’s the code:
// The id of the latest read direct message will be stored in // a file called dm_since_id, just like mentions_since_id // in the previous examples $since_id = @file_get_contents("dm_since_id", true); if ($since_id > 0) { } else { $since_id = 1; } // Retrieve the direct messages into $dms and parse the xml string $dms = $oauth->OAuthRequest("http://twitter.com/direct_messages.xml" , array("count" => 10, "since_id" => $since_id), "GET"); $dms = simplexml_load_string($dms); // If it's valid read the latest id and store into dm_since_id if (count($dms)) { $last_id = ($dms->direct_message[0]->id > $since_id) ? $dms->direct_message[0]->id : $since_id; file_put_contents("dm_since_id", (string)$last_id, FILE_USE_INCLUDE_PATH); } // Loop through the messages foreach ($dms->direct_message as $dm) { // Make sure you're the sender $sender = $dm->sender->screen_name; if ($sender == "kovshenin") { // What should we do if (strtolower(substr($dm->text, 0, 7)) == "update ") { // Construct the message, tweet and wait a few seconds $message = substr($dm->text, 7); $oauth->OAuthRequest('https://twitter.com/statuses/update.xml', array('status' => $message), 'POST'); echo "Tweeting: " . $message; sleep(rand(5,30)); } // Add more actions here } }
Read through the comments in the code and you should be able to get the idea. The direct messages Twitter API method is documented here. Test it out a few times through your SSH client by sending a direct message to your robot with the text “update Updating my status” or whatever, then run:
# php robot.php dm Tweeting: Updating my status
If everything works fine you might as well add the action to your cron, say 5 minutes:
*/5 * * * * php /home/youruser/twibots/robot.php dm
And done! Your robot is now remote controlled. A few suggestions to more advanced remote controlled operations would be:
- Retweet capabilities by regular expression
- Adding and removing feed sources, prefixes and postfixes
- Turning on and off other operations (feeding, replying, rthxing)
- Adding people to “reply ignore lists” (ones that talk to your robot too much)
- Adding people to “rthx ignore lists” (ones that retweet too much, twitterfeed for instance)
I think that’s enough for a start, oh and please don’t build dumb and annoying spammish robots. Stick to intelligent, smart twibots! ;)
Upd. Continued: Twitter Robot in PHP: Twibots Draft
[…] This post was mentioned on Twitter by kovshenin, Michael Davis. Michael Davis said: Automated Twitter Bot in PHP: Remote Control http://bit.ly/ay3dO […]
Still stuck at the first post. I got something wrong with my crontab, but hey, it's working!
Go Chrissy, go Chrissy! You can do it! ;)
[…] Continued: Automated Twitter Bot in PHP: Remote Control and Twitter Robot in PHP: Twibots […]