
По состоянию на март 2011 года среднее число твитов, отправляемых по миру в день, составляет 140 миллионов. В этом руководстве показано, как создать собственный виджет Twitter с нуля, который использует API Twitter, Web Intents и @Anywhere. Использование платформы Twitter для создания забавного интерактивного инструмента для вашего сайта может быть полезным как в отделах обучения, так и в отделах продвижения!
Несколько плюсов и минусов
Плюсы:
- Большая настройка, чем виджет Twitter по умолчанию .
- Кэш-файл предотвращает проблемы с ограничением скорости Twitter API и проблемами с избыточной емкостью.
Минусы:
- Требуется Twitter oAuth, если вы хотите использовать расширенные функциональные возможности @Anywhere
- Настройка задания Cron может быть сложной (существует множество конфигураций сервера веб-хостинга и панелей управления)
Теперь давайте начнем!
Шаг 1. Разметка и стилизация
В этом руководстве предполагается, что у вас есть знания CSS и HTML, и он начинается с базовой разметки и стиля для виджета. Обратите внимание, что содержимое виджета находится в <div id="tweet"></div> и создается с использованием jQuery, Twitter API и PHP.
HTML
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<!— Begin Content —>
<div id=»content»>
<!— Begin Twitter Feed Area —>
<div class=»twitterfeed»>
<img src=»images/twitter_bird.png» width=»99″ height=»75″ alt=»Follow Nettuts+ and Tuts+ on Twitter» />
<h3>Follow <a href=»http://twitter.com/envatowebdev»>Nettuts+</a> and <a href=»http://twitter.com/tutsplus»>Tuts+</a> on Twitter</h3>
<div id=»tweet»></div>
</div>
<!— End Twitter Feed Area —>
</div>
<!— End Content —>
|
CSS
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
#content .twitterfeed {
float: left;
background-color: #fff;
width: 385px;
margin: 10px 0px 30px 10px;
border: 1px solid #d8d8d8;
padding: 5px 5px 15px 5px;
}
#content img {
margin: 5px 0px 0px 10px;
}
#content h3 {
float: right;
color: #000;
background-color: #f2f2f2;
font-size: 18px;
font-weight: bold;
width: 235px;
padding: 10px 5px 10px 10px;
margin: 10px 10px 25px 0px;
text-shadow: 0 1px 0 #fff;
border: 1px solid #d8d8d8;
}
#content h3 a {
text-decoration: none;
}
#content hr {
width: 90%;
height: 1px;
background: #dfdfdf;
display: block;
border: none;
margin: 20px 0px 20px 18px;
}
#tweet {
float: none;
clear: both;
}
#tweet p {
margin: 15px 15px 10px 15px;
}
#web_intent {
margin: 0px 0px 0px 15px;
}
#web_intent a:link, #web_intent a:visited, #web_intent a:active {
margin: 0px 10px 0px 0px;
}
#web_intent img {
margin: 0px 3px 0px 0px;
position: relative;
top: 2px;
}
#web_intent .time {
margin: 0px 10px 0px 0px;
}
#follow-envatowebdev {
margin: 0px 10px 0px 75px;
}
.log-button {
margin: 10px 10px 0px 115px;
}
|
Идентификатор #content может потребоваться изменить в зависимости от вашей темы и расположения виджета (например, #content, #sidebar, #footer)
Шаг 2. Скрипт PHP «Cache File»
На момент написания статьи лимит Twitter для вызовов без аутентификации API составлял 150 запросов в час. Вызовы OAuth разрешены при 350 запросах в час и oauth_token с oauth_token используемым в запросе.
Чтобы гарантировать, что наш пользовательский виджет Twitter не столкнется с проблемами ограничения скорости Twitter API, необходимо создать сценарий PHP «кеш-файл». Этот скрипт извлекает информацию Twitter API «GET statuses / user_timeline» и сохраняет ее в файле «TXT», расположенном в каталоге кэша на вашем сервере.
Если у вас еще нет каталога кеша, вам нужно его создать. Вам также необходимо создать каталог на вашем сервере для скрипта PHP-файла кэша.
Создайте файл PHP, который содержит следующий код.
|
01
02
03
04
05
06
07
08
09
10
11
|
<?php
$cache = dirname(__FILE__) .
$data = file_get_contents(‘http://api.twitter.com/1/statuses/user_timeline/twitter_screen_name.json?count=3&include_rts=true&include_entities=true’);
$cachefile = fopen($cache, ‘wb’);
fwrite($cachefile,utf8_encode($data));
fclose($cachefile);
?>
|
Часть кода «count = 3» определяет, сколько «твитов» будет отображаться в вашем виджете Twitter. Если вы хотите отобразить только один твит, измените код на «count = 1».
Обратите внимание, что "&include_rts=true" необходимо включить, если вы хотите, чтобы ваш виджет Twitter отображал «ретвиты». Посетите раздел API Twitter «GET statuses / user_timeline» для получения дополнительной информации и доступных опций.
Шаг 3. Настройка Cron Job
Затем необходимо создать задание Cron, которое выполняет сценарий PHP установленное число раз в час. Как настраивается задание Cron, зависит от панели управления вашего веб-хостинга. Пожалуйста, обратитесь к разделу «Планирование задач с помощью Cron Jobs» для более подробного руководства.
Ниже приведен пример настроек вкладки Cron для панели управления Plesk, которая запускает задание Cron (4) раза в час (каждые пятнадцать минут) каждый день.
- Минута = * / 15
- Час = *
- День месяца = *
- Месяц = *
- День недели = *
- Команда = / usr / bin / curl -s http://your_domain.com/twitter-widget/twitter-cron.php> / dev / null
Шаг 4. Добавьте jQuery и Twitter-теги для веб-скриптов
Нам нужно убедиться, что наша веб-страница ссылается на библиотеку jQuery. В этом руководстве библиотека jQuery включена с использованием CDN jQuery .
Между заголовками тегов вашей веб-страницы добавьте
|
1
|
<script src=»http://code.jquery.com/jquery-1.6.2.min.js»></script>
|
В дополнение к использованию Twitter API виджет Twitter использует Twitter Web Intents для добавления функций «Retweet», «Reply» и «Favorite».
Чуть ниже тега jQuery добавьте
|
1
|
<script src=»http://platform.twitter.com/widgets.js»></script>
|
Шаг 5. Код JQuery
Необходимо создать внешний файл JavaScript, «twitter-widget.js». Этот файл JavaScript содержит код jQuery, который генерирует «контент» виджета Twitter. Код jQuery получает информацию об API Twitter из файла кэша, созданного сценарием PHP на втором шаге.
В файле JS добавьте следующий код jQuery.
|
1
2
3
4
5
6
7
8
9
|
// Display Latest Tweet
$(document).ready(function(){
$.getJSON(‘cache/twitter-json.txt’, function(data){
$.each(data, function(index, item){
$(‘#tweet’).append(‘<div><p>’ + item.text.linkify() + ‘</p></div>’ + ‘<div id=»web_intent»>’ + ‘<span class=»time»>’ + relative_time(item.created_at) + ‘
});
});
|
jQuery .getJSON () используется для загрузки данных в кодировке JSON из TXT-файла кэша. Используя jQuery .append () , содержимое отображается через <div id = «tweet»> </ div> разметки XHTML. Каждый элемент API Twitter имеет префикс «item». Элементы API Twitter, используемые в коде jQuery:
- text (item.text) — текст каждого твита
- create_at (item.created_at) — дата публикации каждого твита
- id_str (item.id_str) — уникальный идентификационный номер каждого твита
Примечание редактора: Если вы хотите извлечь этот мутный HTML из своего JavaScript, подумайте об использовании шаблонного плагина jQuery.
Шаг 6. Преобразование метки времени Twitter в относительное время (время назад)
Данные, извлекаемые с помощью API Twitter, являются «необработанными» данными и должны быть исправлены для виджета Twitter.
В файле twitter-widget.js под кодом jQuery добавьте следующий код JavaScript.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// Convert Twitter API Timestamp to «Time Ago»
function relative_time(time_value) {
var values = time_value.split(» «);
time_value = values[1] + » » + values[2] + «, » + values[5] + » » + values[3];
var parsed_date = Date.parse(time_value);
var relative_to = (arguments.length > 1) ?
var delta = parseInt((relative_to.getTime() — parsed_date) / 1000);
delta = delta + (relative_to.getTimezoneOffset() * 60);
var r = »;
if (delta < 60) {
r = ‘a minute ago’;
} else if(delta < 120) {
r = ‘couple of minutes ago’;
} else if(delta < (45*60)) {
r = (parseInt(delta / 60)).toString() + ‘ minutes ago’;
} else if(delta < (90*60)) {
r = ‘an hour ago’;
} else if(delta < (24*60*60)) {
r = » + (parseInt(delta / 3600)).toString() + ‘ hours ago’;
} else if(delta < (48*60*60)) {
r = ‘1 day ago’;
} else {
r = (parseInt(delta / 86400)).toString() + ‘ days ago’;
}
return r;
}
});
|
Этот код преобразует метку времени Twitter в относительное время, например, «3 часа назад».
Шаг 7. Создание работоспособных якорных ссылок
В файле twitter-widget.js ниже кода метки времени преобразования добавьте следующий код JavaScript.
|
1
2
3
4
5
6
|
// Create Usable Links
String.prototype.linkify = function() {
return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+/, function(m) {
return m.link(m);
});
};
|
При использовании Twitter API ссылки, содержащиеся в постах Twitter, отображаются только в текстовом формате, а не в виде активных ссылок привязки. Приведенный выше код преобразует только стандартные текстовые URL-ссылки в работающие ссылки.
Шаг 8. Добавление расширенных функций с помощью Twitter @Anywhere
Теперь мы создали довольно аккуратный, настраиваемый виджет Twitter, который включает в себя некоторые основные интерактивные функции пользователя. Но что, если мы хотим добавить действительно классную, расширенную функциональность в наш виджет Twitter? Благодаря сервису Twitter @Anywhere мы можем сделать это довольно легко.
Зарегистрируйтесь в службе Twitter @Anywhere по адресу https://dev.twitter.com/apps/new .
Создайте новое «приложение» и выполните шаги процесса онлайн-регистрации. Посетите эту статью для получения подробной помощи по завершению процесса регистрации.
«Свойство URL обратного вызова (установленное в вашей учетной записи @Anywhere) вашего приложения должно соответствовать как субдомену, так и домену веб-приложения, использующего @Anywhere».
Следующие несколько шагов этого руководства объясняют, как добавить расширенную функциональность Twitter @Anywhere.
Шаг 9. Добавьте тег @Anywhere Script
Как можно ближе к верхней части веб-страницы добавьте тег сценария @Anywhere:
|
1
|
<script src=»http://platform.twitter.com/anywhere.js?id=Your_Consumer_Key&v=1″></script>
|
Обратите внимание, что ваш ключ потребителя Twitter oAuth необходимо добавить в тег скрипта.
Шаг 10. Логин пользователя и авторизация
Некоторые функции сервиса Twitter @Anywhere не требуют входа пользователя в Twitter. Hover Cards и Auto-linkification имен пользователей Twitter в качестве примеров. Однако большинство функций @Anywhere действительно требуют, чтобы пользователь входил в систему и авторизовал ваш сайт для доступа. Кнопка «Подключиться к Twitter» позволяет пользователям безопасно проходить аутентификацию в Twitter.
Ниже <div id = «tweet»> </ div> добавьте следующий код.
|
1
2
3
4
|
<div class=»log-button»>
<span id=»login-logout»>
<script src=»js/twitter-login.js»></script>
</div>
|
Теперь создайте внешний файл JavaScript «twitter-login.js», содержащий следующий код.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<script>
jQuery(function () {
twttr.anywhere(function (T) {
if (T.isConnected()) {
$(«#login-logout»).append(‘<button id=»signout» type=»button»>Sign out of Twitter</button>’);
$(«#signout»).bind(«click», function () {
twttr.anywhere.signOut();
});
}
else {
T(«#login-logout»).connectButton();
}
});
});
</script>
|
Шаг 11. Определение подключенного состояния

@Anywhere предоставляет несколько способов определения того, вошел ли пользователь в Twitter и уже предоставил разрешение на доступ к вашему приложению. Для этого урока мы будем использовать события authComplete и signOut.
Чуть ниже тега <body> веб-страницы добавьте следующее:
|
01
02
03
04
05
06
07
08
09
10
11
|
<script>
twttr.anywhere(function (T) {
T.bind(«authComplete», function (e, user) {
// triggered when auth completed successfully
});
T.bind(«signOut», function (e) {
// triggered when user logs out
});
});
</script>
|
После добавления приведенного выше кода события authComplete и signOut теперь запускаются функцией ANY @Anywhere.
Шаг 12. Добавление функциональности Hovercard

Hovercard отображает данные о пользователе Twitter во всплывающей подсказке, а также содержит кнопку «следовать / отменить подписку».
Чтобы добавить ховеркарту, которая «развернута» по умолчанию, добавьте следующий код под кодом authComplete и signOut, чуть ниже тега <body> веб-страницы:
|
1
2
3
4
5
|
<script type=»text/javascript»>
twttr.anywhere(function (T) {
T(«#tweet»).hovercards({ expanded: true });
});
</script>
|
Обратите внимание, что если вы добавите функциональность Hovercard, автоматическое связывание имен пользователей Twitter также будет добавлено по умолчанию. Это делает "T.linkifyUsers()" добавление функции "T.linkifyUsers()" на вашу веб-страницу.
Шаг 13. Добавление кнопки «Follow»

Чтобы добавить кнопку отслеживания Twitter в виджет, под <div id="tweet"></div> добавьте следующий код.
|
1
|
<span id=»follow-twitter_screen_name»>
|
|
1
2
3
4
5
|
<script type=»text/javascript»>
twttr.anywhere(function (T) {
T(‘#follow-twitter_screen_name’).followButton(«twitter_screen_name»);
});
</script>
|
Обратите внимание, что вам нужно добавить свое имя в Twitter в приведенный выше код.
Шаг 14. Добавление твитбокса

Если вы хотите добавить ящик для твитов вместо кнопки следования, ниже <div id = «tweet»> </ div> добавьте следующий код.
|
1
|
<div id=»tbox»></div>
|
|
1
2
3
4
5
6
7
8
|
<script type=»text/javascript»>
twttr.anywhere(function (T) {
T(«#tbox»).tweetBox({
height: 90,
width: 350,
});
});
</script>
|
Все сделано!
Посмотреть готовую демонстрацию. Создание виджета, управляемого Twitter, с нуля, использующего API Twitter, Web Intents и @Anywhere, требует небольшой работы. Тем не менее, вы можете создать что-то интерактивное и веселое для посетителей вашего сайта!
Обратите внимание, что коды JavaScript для относительного времени и создания работоспособных якорных ссылок благодаря этой статье .
Для тех из вас, кто предпочел бы создать простой виджет, управляемый Twitter, без использования Twitter oAuth и @Anywhere, в исходные файлы zip включены базовые демонстрации. Есть также две демонстрации, которые отображают изображения профиля Twitter рядом с каждым твитом.
Если у вас есть какие-либо вопросы по поводу этого руководства, задайте их, используя «Добавить поле для комментариев» ниже.