Прост бот за Twitter

Aко искате да започнете да програмирате за twitter под PHP, ето ви и добро начало. Да създадем един прост бот, който при получаване на директно съобщение със съдържание ‘късмет’ да връща на подателя късметче.

Tова колкото и да е просто, като логика, може да ви запознае с начина на работа на API на Twitter, за което и аз ще се погрижа по-нататък, но е добре, ако започнете сами :)

Лесно и полезно!

Дефинираме класа и задаваме променливите:

Class bTwitter{
var $username = ""; //тук се слага потребителското име на twiter акаунта, който ще слушаме
var $password = ""; //тук се слага паролата

Стъпка 2: Да напишем функция, която да взема директното съобщение от входящата ви кутия в Twitter:


function getmessages()
{
$username = $this->username;
$password = $this->password;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_URL, "http://twitter.com/direct_messages.json");
return $result = curl_exec($curl);
curl_close($curl);
}

Стъпка 3: Да напишем функция, която да изтрива съобщението, след като сме изпратили късметчето:


function deletemessage($id)
{
$username = $this->username;
$password = $this->password;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_URL, "http://twitter.com/direct_messages/destroy/".$id.".json");
curl_setopt($curl, CURLOPT_POST, true);
return $result = curl_exec($curl);
curl_close($curl);
}

Стъпка 4: Да направим функция, която да връща случаен късмет:

function getKasmet()
{
$k[] = "Държавна лотария, тото, на твоя страна е числото! ";
$k[] = "Стягай багажа за воаяжа! ";
$k[] = "Кариера ще ти е приоритет –я министър, депутат – напред! ";
$k[] = "Тук няма искаш и не щеш – в службата ще порастеш! ";
$k[] = "Не се шегувам, ти печелиш – късмета скоро ще намериш. ";
$k[] = "На съседа бричката си подари,че нова кола ще караш ти!";
$k[] = "От Бил Гейтс ще се отървеш, с компютър с Линукс ще се обзаведеш";
$k[] = "Паричките ти в портмонето ще са като звездичките в небето. ";
$k[] = "Яки запивки, чаровни забивки и много усмивки! Успехи в бранша и чупки в ханша, здраве в изобилие и радост до безсилие ";
$k[] = "По-добре е да не започваш, отколкото да спреш на половината път.";
$k[] = "За плахия и колебаещия се, всичко е невъзможно, защото му изглежда така.";
$k[] = "Не е познал сладкото този, който не е изпитал горчивото. Силата е търпение и време.";
$k[] = "Можете да постигнете всичко, което пожелаете, но не може да имате всичко на този свят...";
return $k[rand(0, 12)];
}

Стъпка 5: Да направим функция, която да изпраща съобщението до подателя:


function sendmessage($to)
{
$kasmet = $this->getKasmet();
$postData = array("user"=>"$to", "text"=>$kasmet);
print_r($postData);
$username = $this->username;
$password = $this->password;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
curl_setopt($curl, CURLOPT_URL, "http://twitter.com/direct_messages/new.xml");
return $result = curl_exec($curl);
curl_close($curl);
}
}

Да изпробваме какво сме направили:

$bt= new bTwitter; // инициираме класа
$result = $bt->getmessages(); //вземаме съобщенията от входящата кутия
$r=json_decode($result,true); //декодираме формата им от json към масив
$size = count($r);
for ($i = 0; $i<$size; $i++) //започваме да ги обхождаме { // ако съдържат ключовата дума 'късмет' if (ereg('късмет',$r[$i]['text'])) { $bt->sendmessage($r[$i]['sender_screen_name']); // изпращаме съобщението
$bt->deletemessage($r[$i]['id']); //изтриваме директното съобщение
}
}

Оптимизации върху кода може да има много, което много добре разбирам :)

4 мнения за “Прост бот за Twitter

  • Reply Васил Светославов 30.06.2009 at 8:49

    Има ли такова демо и за фейсбук?

  • Reply doni 26.06.2009 at 10:32

    Здравей,

    Не бих нарекъл това „добро начало“, защото стилът е ужасен. По-скоро прилича на първи стъпки в PHP.

    1. Изнасяне на curl нещата в отделен метод ще съкрати кода.
    2. json_decode в метода за работа с curl
    3. „return $result = curl_exec($curl);
    curl_close($curl);“
    предполагам виждаш, че това е глупост
    4. strstr вместо ereg
    5. ‘var’ е остаряло, би трябвало да се ползва public/private/protected/…
    6. return $k[rand(0, 12)], да е return $k[array_rand($k)];
    7. в конкретната ситуация – foreach, вместо for

    Правя си труда да пиша това, не за да се заяждам, а защото някой ще види този пример и ще почне да се учи по него.

  • Reply Манол Трендафилов 25.06.2009 at 21:21

    Аз от 2 дни си цъкам Twitter API-то, интересно е :)

  • Reply Махало Медия 25.06.2009 at 17:37

    Страхотен пример за Twitter API ползваемост :)

Оставете ми коментар

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните ви за коментари.