Home » PHP, Мишмаш, Технологии

Прост бот за Twitter

25 юни 2009 4 Comments

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 Comments »

  • Махало Медия said:

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

  • Манол Трендафилов said:

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

  • doni said:

    Здравей,

    Не бих нарекъл това „добро начало“, защото стилът е ужасен. По-скоро прилича на първи стъпки в 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

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

  • Васил Светославов said:

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

Leave your response!

Add your comment below, or trackback from your own site. You can also subscribe to these comments via RSS.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

This is a Gravatar-enabled weblog. To get your own globally-recognized-avatar, please register at Gravatar.