Прост бот за 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']); //изтриваме директното съобщение
}
}
Оптимизации върху кода може да има много, което много добре разбирам :)



Страхотен пример за Twitter API ползваемост :)
Аз от 2 дни си цъкам Twitter API-то, интересно е :)
Здравей,
Не бих нарекъл това „добро начало“, защото стилът е ужасен. По-скоро прилича на първи стъпки в 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
Правя си труда да пиша това, не за да се заяждам, а защото някой ще види този пример и ще почне да се учи по него.
Има ли такова демо и за фейсбук?
Leave your response!
За Бого
Тук, има повече за мен и за битието ми.
Ако искате да ме ангажирате като лектор или да ме наемете за консултация или проект, вижте как от тук.
Реклама
Стани част от блога
Полезни нещица
TBL Общество
Какъв ти е късмета?
Интересно
Хей, читателю
За какво пиша
Я, интересни неща
Most Commented
Последно от блога