Статьи

Создание виджета Twitter с использованием Distal

Я покажу вам, как создать виджет Twitter для вашего сайта, который загружает последние твиты из вашей учетной записи Twitter с помощью API поиска Twitter и отображает их в виде таблицы.

Для загрузки твитов мы будем использовать поисковый API Twitter. Мы будем использовать HTML для создания пользовательского интерфейса, а затем Distal для динамического добавления данных в интерфейс.

Во-первых, давайте познакомимся с API Twitter. Twitter использует REST API, что означает, что нам нужно загрузить URL-адрес, содержащий поисковый запрос, и Twitter вернет форматированный текст, содержащий результаты поиска. Нам нужно загрузить этот URL в наш виджет:

  http://search.twitter.com/search.json?q={keywords}&callback={function} 

И Twitter вернет что-то вроде этого:

  Перезвони({
   "Страница 1,
   "запрос": "{ключевые слова}",
   "Результаты": [{
     "creat_at": «Понедельник, 13 февраля 2012 01:23:45 +0000»,
     "from_user": "ladiesman217"
     "from_user_id": 123456789,
     "profile_image_url": "http: //www..jpg",
     "текст": "Я ем еду!"
   }]
 }) 

URL запроса довольно прост, поэтому давайте разберем ответ. Ответ в формате обычного объекта JavaScript. У объекта есть свойство с именем «results», которое представляет собой массив объектов, и каждый объект представляет твит. У каждого твита есть свойство, которое отображает имя отправителя, твит-сообщение и дату его создания.

Чтобы сделать вызов, мы не можем использовать собственный XMLHttpRequest браузера, потому что это междоменный вызов, который не разрешен браузером по соображениям безопасности.

Вместо этого мы будем использовать технику JSON-P, что означает, что мы будем динамически добавлять тег скрипта в наш документ, который указывает на страницу Twitter. Сервер Twitter вернет объект JSON, окруженный вызовом функции, известным как обратный вызов, который будет выполнен браузером. Нам нужно определить эту функцию обратного вызова, чтобы иметь возможность получить объект JSON.

Вот наш код для вызова JSON-P:

  function searchTwitter () {
   var node = document.getElementsByTagName ("script") [0];
   var script = document.createElement ("script");
   node.parentNode.insertBefore (script, node);
   script.src = "http://search.twitter.com/search.json?q=from:dalmaer&callback=searchTwitterCallback";
 } 

Когда сервер Twitter отвечает, он передает объект JSON нашему обратному вызову, который мы можем использовать для извлечения данных из:

  function searchTwitterCallback (response) {
   //сделай что-нибудь
 } 

А пока давайте создадим интерфейс виджета Twitter. Мы хотим отобразить всю важную информацию, такую ​​как имя отправителя, его аватар, а также твит-сообщение и дату.

Там будет несколько твитов, поэтому он должен быть в виде списка. Мы могли бы отобразить его в таблице с колонкой для каждого поля, но это слишком старомодно. Мы отобразим аватар и имя пользователя слева, а сообщение справа с датой внизу в меньшем размере.

Начнем с таблицы из двух столбцов. Давайте продолжим и добавим это на нашу веб-страницу, где мы хотим разместить окно Twitter:

  <table id = "twitter_box">
   <TR>
     <TD>
       <img border = "0" /> <div class = "name"> </ div>
     </ TD>
     <TD>
       <div class = "txt"> </ div>
       <div class = "date"> </ div>
     </ TD>
   </ TR>
 <Таблица> 

Это шаблон для одного твита. Нам нужно будет повторять этот шаблон для каждого твита из Twitter.

Теперь давайте заполним эту таблицу данными из Twitter, которые хранятся в упомянутом ранее объекте JSON. Чтобы использовать Distal, нам нужно сопоставить свойства в объекте JSON с отдельными узлами в HTML.

Давайте вернемся к HTML и отметим, какие данные куда идут. Сначала мы отметим строку таблицы, которую нужно повторить для того, сколько у нас есть твитов. Мы будем использовать атрибут data-qrepeat

  <table id = "twitter_box">
   <tr data-qrepeat = "twt results">
     (Усечены)
   </ TR>
 </ Table> 

Здесь мы говорим Distal повторить элемент строки на основе массива с именем «results», найденного в объекте JSON. И для каждого элемента в этом массиве он будет представлен переменной «twt» (для твита).

Далее мы сообщаем Distal, где разместить твит-сообщение, дату и имя пользователя. Мы будем использовать атрибут data-qtext

  <table id = "twitter_box">
   <tr data-qrepeat = "twt results">
     <TD>
       <img border = "0" /> <div class = "name" data-qtext = "twt.from_user"> </ div>
     </ TD>
     <TD>
       <div class = "txt" data-qtext = "twt.text"> </ div>
       <div class = "date" data-qtext = "twt.created_at"> </ div>
     </ TD>
   </ TR>
 </ Table> 

Когда запускается Distal, он помещает значения этих свойств в узел HTML.

Далее мы сообщаем Distal, что в качестве атрибута источника изображения указывается URL-адрес аватара, представленный именем свойства объекта JSON «profile_image_url». Мы используем атрибут data-qattr

  <TD>
   <img border = "0" data-qattr = "src twt.profile_image_url" />
 </ TD> 

Обратите внимание, что нам нужно предоставить два аргумента. Первый — это имя атрибута, который нужно изменить, второй — где можно найти данные.

Теперь нам нужно подключить нашу функцию обратного вызова Twitter к Distal. Мы делаем это, определяя нашу функцию обратного вызова, которую вызывает Twitter, и внутри функции обратного вызова мы передаем данные JSON в Distal.

Чтобы вызвать Distal, нам нужно предоставить два аргумента. Первый — это узел, где должны быть размещены наши данные, второй — данные из твиттера:

  function searchTwitterCallback (response) {
   var node = document.getElementById ("twitter_box");
   дистальный (узел, ответ);
 } 

Теперь у нас есть функция для вызова Twitter, функция обратного вызова для вызова Twitter, и мы помещаем данные в шаблон HTML. Теперь нам нужен способ вызова функции Twitter при загрузке веб-страницы. В нижней части вашей веб-страницы, но перед конечным тегом body

  <Скрипт> searchTwitter (); </ скрипт> 

Теперь загрузите веб-страницу в браузере и посмотрите, как она выглядит.

Он работает нормально, но внешний вид немного скучный, так как мы еще не украсили его CSS. Мы можем оставить это как упражнение на потом, но пока что я добавлю немного стиля CSS, чтобы спасти мои глаза.

  <style type = "text / css">
   #twitter_box {font: normal 10pt Arial;  выравнивание текста: центр}
   #twitter_box td {vertical-align: top;  набивка: 0,4em 0,4em 0,2em 0,4em;  background: #eee}
   #twitter_box .name {font-size: 8pt}
   #twitter_box .txt {text-align: left;  font-style: italic}
   #twitter_box .date {text-align: left;  размер шрифта: 8pt;  цвет: # 999}
 </ Стиль> 

Поле даты также выглядит довольно длинным и многословным. Давайте сократим это, сохранив дату и убрав время. Мы изменим функцию обратного вызова и пройдемся по объекту JSON, а также изменим свойство date на более короткое.

  function searchTwitterCallback (response) {
   var list = response.results;
   for (var i = 0; i <list.length; i ++) {
     list [i] .created_at = новая дата (list [i] .created_at) .toLocaleDateString ();
   }
   var node = document.getElementById ("twitter_box");
   дистальный (узел, ответ);
 } 

Теперь снова загрузите веб-страницу в браузере и посмотрите, как она выглядит.

Теперь у нас есть отличный виджет Twitter, который мы сделали всего за несколько строк кода.

Больше информации о DISTAL и языке атрибутов шаблона: