Coding:
Twitter API: курс молодого бійця

Отже, давайте спочатку визначимося ось з чим. Навіщо він, власне, потрібен цей Twitter API і яку користь він може принести вебмайстру? Середньостатистичному клепателю псевдосайтов він, швидше за все, буде марний, але -професіоналу API цієї популярної соціальної мережі може принести відчутну користь і як база для створення нових сервісів / стартапів, і як засіб розробки додаткових інструментів просування для цілком конкретного сайту.
Для розуміння і застосування знань, викладених у цій статті, нам знадобитися таке:
- Знання PHP на твердому середньому рівні;
- Знання і розуміння соціальної мережі Twitter;
- Наявність вільного часу для експериментів;
- Традиційно — прямі руки.
Понад 27% користувачів українського Twitter пишуть українською (рік тому таких було тільки 15%).
5% від усіх твітів — це ретвіти, 25% містять в собі твітер-нік. 67% твітів містять посилання, з яких 40% — скорочені посилання, а 12% — посилання на ЗМІ. Ця статистика загальна для кириличного Twitter.
Принцип роботи
У загальному і цілому, всю роботу з Twitter API можна звести до наступної схеми:
- Відправляємо GET-запит з параметрами(якщо є) за адресою потрібної нам функції;
- Отримуємо XML або JSON дані (в залежності від обраного формату);
- Якщо є потреба — Парсимо ці дані.
Наприклад, для того, щоб отримати всю інформацію про потрібний нам акаунт, достатньо відправити GET-запит на адресу
http://twitter.com/users/show/імя_аккаунта
У відповідь, Twitter видасть нам повну інформацію про це акаунт, включаючи текст останнього твіту.
Ця схема підходить під абсолютної більшість функцій Твіттера. Різниця буде лише в переданих параметрах і структурі одержуваних даних. Складно? Добре, давайте докладно розберемо найпростіший Twitter-додаток, яке буде запитувати і виводити основні параметри обраного облікового запису.
Приклад програми
Для початку, традиційно, виконаємо підготовку інтерфейсу — в нашому випадку, це буде простенька форма:
Далі, дивимося у список опцій на порталі dev.twitter.com і вибираємо потрібну нам функцію. Оскільки ми вирішили створювати додаток, який буде виводити основні параметри обраного облікового запису, то зупинимо свій вибір на функції users/show. Як параметр, ця функція приймає ім'я облікового запису, для якого необхідно отримати характеристики (є і деякі інші параметри, але в навчальних цілях, ми зупинимося тільки на цьому).
Ось приклад готового модуля, що реалізує запит числа фоловерів, фолловінг і останнього твіту вибраного облікового запису. Зверніть увагу, для роботи цього скрипта вам потрібно в змінних $username і $password вказати ім'я і пароль від будь-якого облікового запису в Твіттері, який буде використовуватися для формування запитів.
$account = ІМЯ_АККАУНТА;
$username = ИМЯ_АККАУНТА_ОТ_КОТОРОГО_БУДЕМ_ПОСЫЛАТЬ_ЗАПРОС;
$password = ПАРОЛЬ_АККАУНТА_ОТ_КОТОРОГО_БУДЕМ_ПОСЫЛАТЬ_ЗАПРОС;
$context = stream_context_create(array(
`http` => array(
`header` => "Authorization: Basic ".base64_encode("$username:$password")
)
)); // виконуємо авторизацію
$api_page = `http://twitter.com/users/show/`.$account; // адресу сторінки-функції для запиту
$xml = @file_get_contents($api_page, false, $context); // виконуємо запит
$profile = new SimpleXMLElement($xml); // розбираємо отриманий XML-потік
echo `фоловерів: `.$profile->followers_count.`
`; // виводимо число фоловерів
echo `фолловінг: `.$profile->friends_count.`
`; // виводимо число фолловінг
echo `Останній твіт: `.$profile->status->text.`
`; // виводимо останній твіт
?>
Просто, правда? Давайте вбудуємо цей алгоритм у наш код з формою і подивимося на результат.
<form action=`twiapi.php` method=`POST`> <input type=`edit` name=`account` value=`=isset($_POST[`account`])?$_POST[`account`]:``?>` />
<input type=`submit` name=`Submit` value=`Отримати дані` /> form> if (isset($_POST) and !empty($_POST[`account`])){ $account = $_POST[`account`]; $username = `ВВЕДІТЬСЮДИ ІМ'Я ВАШОГО Аккаунта у Твіттер `; $password = `ВВЕДІТЬ СЮДИ ПАРОЛЬ Вашого аккаунта в Твіттер`; $context = stream_context_create(array( `http` => array( `header` => "Authorization: Basic ".base64_encode("$username:$password") ) )); $api_page = `http://twitter.com/users/show/`.$account; $xml = @file_get_contents ($api_page, false, $context); $profile = new SimpleXMLElement ($xml); echo `фоловерів: `.$profile->followers_count.`
`; echo `фолловінг: `.$profile->friends_count.`
`; echo `Останній твіт: `.$profile->status->text.`
`; } ?>
У принципі, цей скрипт готовий до вживання, але я пропоную трохи його доопрацювати, щоб він коректно обробляв можливі помилки з боку Твіттера, які зустрічаються у нього з незавидною частотою (наприклад, класична помилка з перевищенням навантаження на сервер Twitter, викликає картинку, де пташки намагаються підняти слона). Для цього додамо пару обробників, які я не буду наводити окремо.
Ось підсумковий код скрипта, що коректно обробляє ситуації, коли зазначеного облікового запису не існує або він заблокований, а також будь-які інші помилки з боку Twitter.
<form action=`twiapi.php` method=`POST`><input type=`edit` name=`account` value=`=isset($_POST[`account`])?$_POST[`account`]:``?>` />
<input type=`submit` name=`Submit` value=`Отримати дані` />form> if (isset($_POST) and !empty($_POST[`account`])){ $account = $_POST[`account`]; $username = ``; $password = ``; $context = stream_context_create(array( `http` => array( `header` => "Authorization: Basic ".base64_encode("$username:$password") ) )); libxml_use_internal_errors(true); $api_page = `http://twitter.com/users/show/`.$account; $xml = @file_get_contents ($api_page, false, $context); if ($xml == false) { if ($hdrs = @get_headers(`http://twitter.com/users/show/`.$account)) { if (substr(strchr($hdrs[0], ``), 1, 3)===`404`) { echo `Данийакаунт заблокований або не існує `; exit(1); } } else { echo `Помилка сервера`; exit(1); } } try {
$profile = new SimpleXMLElement ($xml);
}
catch (Exception $ex)
{
echo `Помилка сервера`;
exit(1);
}
echo `фоловерів: `.$profile->followers_count.`
`;
echo `фолловінг: `.$profile->friends_count.`
`;
echo `Останній твіт: `.$profile->status->text.`
`;
}
?>
Скрипт завершений і готовий до вживання! Тепер давайте розберемо кілька чвстих питань.
Питання і відповіді по Twitter API
Як отримати число листів (listed), в які був доданий конкретний запис?
Нажаль, готової функції для цього, програмісти Twitter не передбачили, хоча їх неодноразово про це просили. Тому я пропоную своє рішення для отримання цього параметра. Ось готова функція, приймає в якості єдиного параметра, ім'я облікового запису для, якого необхідно підрахувати число listed:
function get_twitter_listed($account)
{
$username = `Введете СЮДИ ІМ'Я ВАШОГО АККАУНТ в Твіттер `;
$password = `Введете СЮДИ ПАРОЛЬ Вашого аккаунта в Твіттер`;
$context = stream_context_create(array(
`http` => array(
`header` => "Authorization: Basic ".base64_encode("$username:$password")
)
));
$api_page = "http://api.twitter.com/1/$account/lists/memberships.xml";
$xml = @file_get_contents ($api_page, false, $context);
$memberships = new SimpleXMLElement ($xml);
$listed_count = count($memberships->lists->list);
while(count($memberships->lists->list))
{
$api_page = "http://api.twitter.com/1/$account/lists/memberships.xml?cursor=".$memberships->next_cursor;
$xml = @file_get_contents ($api_page, false, $context);
$listed_count += count($memberships->lists->list);
}
return $listed_count;
}
?>
Принцип її роботи простий: вона "пробігається" по всіх листам, в які був доданий аккаунт і підраховує їх сумарну кількість. Рішення дуже ресурсоємне, але іншого поки немає. До речі в Twirate працює саме воно.
Як збільшити ліміт запитів, що накладається на акаунт?
Кожен стандартний обліковий запис може зробити не більше 150 запитів до Twitter API на годину. Але в ряді випадків цієї квоти не вистачає і хочеться більшого. Для цього розробники Твіттера ввели процедуру під назвою whitelistening (я називаю її "відбілювання" :). Виконується вона досить просто: йдемо за і заповнюэм наступні форми:
- Do you want to whitelist an IP( s)in addition to your account?. Якщо вам не потрібна прив'язка вашого "вибіленого" облікового запису до IP - залишаємо це поле порожнім;
- Describe your project in detail. Тут описуємо свій проект для якого нам потрібен "вибілений" аккаунт і чітко обгрунтовуємо для чого нам потрібні додаткові потужності. Поставтеся до цього пункту серйозно, будь кому вони ресурси не виділяють;
- Please provide contact information. Про всяк випадок вказуємо тут свій email;
- Whitelist your user account?. Якщо в даний момент ви як раз виконали вхід тим обліковим записом, який потрібно "відбілити" - ставимо тут галочку;
Ось і все - відправляємо форму і чекаємо на розгляд заявки протягом двох тижнів (іноді більше, іноді менше). Якщо все пройде вдало, ліміт вашого облікового запису стане 20000 запитів на годину.
Як подивитися ліміт запитів у облікового запису?
Введіть в браузер наступну адресу
http://api.twitter.com/1/account/rate_limit_status.xml?account=ІМЯ_АККАУНТА
Вам буде виданий XML-потік. залишкових запитів буде зазначено в полі "remaining-hits". До речі, цим методом можна відстежувати, "вибілили" ваш акаунт після відправлення вами заявки з попереднього питання чи ще ні.
Висновок
Розробка додатків під Twitter - це ціла область знань, яка стане (і вже стає!) прибутковим напрямком ведення справ. Сподіваюся, цей невеликий лікнеп дозволить вам зануритися в цей захоплюючий світ, де взаємодіє програмний код і великий дата-центр синьої пташки.
До речі, незайвим буде заглянути і в нещодавно сформований .
За матеріалами:
19.03.2011
Коментарі (14) | Залишити коментар
| Danyon | 17.04.2011 04:23 |
| TYVM you′ve solved all my porlbems |
| Julissa | 17.04.2011 19:40 |
| IMHO you′ve got the right anewsr! |
| KERMIMALM | 12.06.2011 04:38 |
| Оказываем услуги по поиску потенциальных клиентов для Вашего Бизнеса Подробнее узнайте по телефону: +79133913837 Email: prodawez@mixmail.com ICQ: 6288862 Skype: prodawez3837 |
| grunge | 02.02.2012 15:05 |
| Дуже допомогла стаття. Дякую)) |
| Buy oem Software | 10.02.2012 22:09 |
| r7XOfZ Thanks a lot! An extremely interesting comment!!.... |
| Buy oem Software | 10.02.2012 22:19 |
| oj8PDx See it for the first time!!.... |
| cheap oem software | 11.02.2012 04:07 |
| pXuYQ7 Yeah, it is clear now !... Just can not figure out how often do you update your blog?!.... |
| Buy oem Software | 11.02.2012 08:29 |
| IrcoFx I almost accidentally visited to this site, but stayed here for a long time. Stayed because everything was very interesting. Surely will share with all my friends!.... |
| buy cheap oem software | 12.02.2012 14:24 |
| NjIYxy Uh, well, explain me a please, I am not quite in the subject, how can it be?!... |
| Buy Cheap OEM Software | 07.03.2012 14:41 |
| ypf2M5 Really enjoyed this article post.Really looking forward to read more. Will read on... |
| Adobe OEM Software | 07.03.2012 14:42 |
| h0qYcy I really liked your article. |
| Adobe OEM Software | 07.03.2012 19:55 |
| RIToTN I really enjoy the blog.Much thanks again. Fantastic. |
| Discount OEM Software | 07.03.2012 19:57 |
| 15Tnv2 I appreciate you sharing this article post. Really Great. |
| wholesale men clothing | 20.03.2012 23:00 |
| This is one awesome article.Really looking forward to read more. Really Great. |


