IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  XML | Open source  >

Совет: Управляйте закладками del.icio.us с помощью PHP

Использование программных интерфейсов REST, предоставляемых сервисом del.icio.us, в PHP с помощью пакетов PEAR

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Викрам Васвани (Vikram Vaswani), основатель компании, Melonfire

04.03.2009

Сервис del.icio.us позволяет создавать закладки и делать их доступными для других online-пользователей. В данной статье рассказывается как можно управлять этими закладками с помощью пакета Services_Delicious, входящего в состав PEAR. Пакет позволяет вызывать программные интерфейсы REST, предоставляемые del.icio.us, и создавать специализированные приложения на PHP.

Введение

Если вы более-менее регулярно пользуетесь интернетом, то вполне вероятно, что вы уже знаете, что такое del.icio.us: бесплатный online-сервис, позволяющий отмечать закладками интересные Web-сайты и обмениваться закладками с другими пользователями. Кроме того, существует возможность помечать закладки специальными тегами, содержащими ключевые слова, а так же просматривать наиболее популярные закладки на данный момент времени.

Одной из привлекательных функций del.icio.us является возможность получать доступ к списку закладок через основанный на REST API и использовать этот список в вашем XML-приложении. В большинстве случаев для этого необходимо писать специальный код для обращения к REST-API del.icio.us, генерации запросов и разбора ответов сервиса. Однако если ваше приложение написано на PHP, то часть работы может быть выполнена автоматически с помощью пакета Services_Delicious, входящего в состав PEAR - репозитория расширений и приложений PHP (PHP Extension and Application Repository).

Пакет Services_Delicious предоставляет API для взаимодействия с REST-API del.icio.us. С его помощью можно создавать и посылать запросы, получать и декодировать XML-ответы. Кроме того, он предоставляет надежный и простой в использовании элемент интерфейса (виджет), позволяющий просматривать, добавлять, редактировать и удалять закладки del.icio.us в любом приложении на PHP. В данной статье-совете мы кратко расскажем об этом пакете, а так же приведем примеры кода, иллюстрирующие выполнение этих базовых операций.



В начало


Установка

Пакет Services_Delicious выпущен под лицензией PHP и поддерживается Штефаном Шмидтом (Stephan Schmidt) и Тацуя Цуруокой (Tatsuya Tsuruoka). Проще всего его установить, используя автоматизированный инсталлятор PEAR, который по умолчанию включается в поставку PHP. Для инсталляции просто выполните следующую команду из командной строки:

shell> pear install Services_Delicious

Инсталлятор должен соединиться с сервером пакетов PEAR, загрузить пакет и установить его в нужном месте в вашей системе. В данной статье используется версия Services_Delicious V0.5.0.

Если вы хотите установить пакет вручную, то зайдите на страницу проекта, скачайте архив с исходным кодом и распакуйте его в нужную директорию. Обратите внимание, что ручная установка предполагает определенный уровень знаний структуры пакетов PEAR.

Пакет Services_Delicious зависит от двух других пакетов из PEAR: HTTP_Request и XML_Serializer. Оба этих пакета можно установить автоматически, используя автоматизированный инсталлятор PEAR. В противном случае вы можете найти ссылки на нужные файлы в разделе Ресурсы. Следует упомянуть, что я сталкивался со случаями некорректной работы пакет HTTP_Request в системе Windows®, поэтому все примеры в данной статье будут выполняться в среде *NIX.

Для работы Services_Delicious также необходимо установить OpenSSL и его расширение для PHP в вашей среде разработки на PHP. Если вы работаете в *NIX, то для включения этого расширения может потребоваться перекомпиляция PHP. В разделе Ресурсы приведена дальнейшая информация на тему активации расширения OpenSSL в PHP, а так же ссылки на Web-сайт OpenSSL.

Наконец, в этой статье подразумевается, что у вас уже есть учетная запись на сервере del.icio.us, а так же несколько закладок. Если же нет, то вы можете получить ее бесплатно и добавить несколько записей. Ссылка на страницу регистрации на сервере также находится в разделе Ресурсы.



В начало


Получение списка закладок

Прежде чем углубиться в работу с Services_Delicious, необходимо сказать несколько слов об API del.icio.us. Как и в случае любого сервиса, основанного на REST, API работает поверх протокола HTTP, используя средства аутентификации HTTP для проверки прав доступа пользователей. API содержит методы для добавления и удаления закладок, получения списка всех закладок пользователя, а так же для получения и переименования тегов, созданных пользователем.

Для того чтобы посмотреть на этот API в действии, обратитесь по URL https://api.del.icio.us/v1/posts/recent в вашем браузере. Этот REST-метод возвращает список закладок, недавно добавленных пользователем. Сначала вам будет предложено авторизоваться, используя ваше имя пользователя и пароль, а затем вы должны увидеть возвращенный методом XML-документ, содержащий список последних созданных закладок. Он будет выглядеть примерно как показано в листинге 1:


Листинг 1. Пакет из XML-ответа сервиса del.icio.us
                        
<?xml version='1.0' standalone='yes'?>
<posts tag="" user="someuser">
  <post href="http://www.kernel.org/" description="The Linux Kernel Archives" 
   hash="7dae6d24e3f8c6c3c3aa1b05ce5bfe94" tag="linux kernel opensource" 
   time="2007-12-04T09:03:25Z" />
  <post href="http://www.everythingphpmysql.com/" description="How to 
   do Everything with PHP & MySQL - Vikram Vaswani" 
   hash="8c9c6572c70cb3de3fa93b87269a8d79" 
   tag="book development php mysql web beginner" time="2007-12-04T09:02:47Z" />
  <post href="http://www.mysql-tcr.com/" description="MySQL: The Complete 
   Reference - Vikram Vaswani" hash="c8d99b00cfb9a1af9d59bbc6c46848cd" 
   tag="mysql php book" time="2007-12-04T09:02:21Z" />
  ...
</posts>
        

На рисунке 1 показано, как ответ сервиса выглядит в браузере Mozilla Firefox:


Рисунок 1. Пакет XML-ответа сервиса del.icio.us, показанный в браузере Mozilla Firefox
An XML response packet from del.icio.us, as seen in Mozilla Firefox

Пример того, как получить тот же результат в приложении на PHP с помощью пакета Services_Delicious, приведен в листинге 2:


Листинг 2. Получение списка закладок
                        
<?php
// Включение файла класса
include_once 'Services/Delicious.php';

// Инициализация объекта
$sdObj = new Services_Delicious('someuser', 'somepass');

// Получение списка недавно созданных закладок
// от сервиса del.icio.us
print_r($sdObj->getRecentPosts());
?>
        

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

В листинге 2 показано, как использовать пакет Services_Delicious для соединения с Web-сервисом del.icio.us и получения списка последних созданных закладок. Вначале происходит обращение к файлу классов Services_Delicious и инициализация экземпляра класса Services_Delicious. В конструктор данного экземпляра передаются имя пользователя и пароль, которые будут использоваться при аутентификации HTTP. Затем вызывается метод getRecentPosts(), который возвращает список последних закладок, созданных пользователем. Возвращаемое значение представляет собой документ XML, который разбирается и трансформируется в серию вложенных массивов PHP.

Массив, полученный с помощью метода getRecentPosts(), выглядит, как показано в листинге 3:


Листинг 3. Пример массива в PHP, содержащего список полученных закладок
                        
Array
(
    [0] => Array
        (
            [href] => http://www.kernel.org/
            [description] => The Linux Kernel Archives
            [hash] => 7dae6d24e3f8c6c3c3aa1b05ce5bfe94
            [tag] => Array
                (
                    [0] => linux
                    [1] => kernel
                    [2] => opensource
                )

            [time] => 2007-12-04T09:03:25Z
        )

    [1] => Array
        (
            [href] => http://www.everythingphpmysql.com/
            ...
        )
)
        

С помощью цикла foreach() в PHP можно легко преобразовать массив для представления в виде HTML. Пример показан в листинге 4:


Листинг 4. Форматирование списка закладок для вывода в виде HTML
                        
<html>
  <head></head>
  <body>
    <h2>My Bookmarks</h2>
    <?php
    // Включение файла класса
    include_once 'Services/Delicious.php';
    
    // Инициализация объекта
    $sdObj = new Services_Delicious('someuser', 'somepass');
    
    // Получение списка недавно созданных закладок от сервиса del.icio.us
    // Вывод в виде маркированного списка
    $posts = $sdObj->getRecentPosts();
    echo "<ul>\n";
    foreach ($posts as $p) {
      echo "  <li>\n";
      echo "    <a href=\"" . $p['href'] . "\">" . $p['description'] . "</a><br />\n";
      echo "    <span style=\"color:red\">" . implode(' ', $p['tag']) . "</span>\n";
      echo "  </li>\n";
    }
    echo "</ul>\n";
    ?>
  </body>
</html>
        

В листинге 4 показано, как можно перебрать все элемента массива, возвращенного методом getRecentPosts(), печатая каждый из них в виде отдельного пункта HTML-списка. Снизу каждого элемента списка помешаются теги, соответствующие данной закладке. В результате должен получиться HTML-документ, схожий с показанным на рисунке 2:


Рисунок 2. Документ HTML, отображающий закладки, полученные от сервиса del.icio.us
An HTML document displaying bookmarks retrieved from del.icio.us


В начало


Работа с тегами

Метод getTags() возвращает список всех тегов, использованных данным пользователем del.icio.us, вместе с информацией о том, как часто использовался каждый тег. Пример вызова метода приведен в листинге 5:


Листинг 5. Получение списка тегов
                        
<html>
  <head></head>
  <body>
    <h2>My Tags</h2>
    <?php
    // Включение файла класса
    include_once 'Services/Delicious.php';
    
    // Инициализация объекта
    $sdObj = new Services_Delicious('someuser', 'somepass');
    
    // Получение списка тегов от сервиса del.icio.us
    // Печать в виде таблицы
    $tags = $sdObj->getTags();
    echo "<table border=\"1\">\n";
    foreach ($tags as $tag => $count) {
      echo "  <tr>\n";
      echo "    <td>$tag</td>\n";
      echo "    <td>$count</td>\n";
      echo "  </tr>\n";
    }
    echo "</table>\n";
    ?>
  </body>
</html>
        

Результат должен выглядеть примерно как на рисунке 3:


Рисунок 3. Документ HTML, отображающий список тегов, полученных от сервиса del.icio.us
An HTML document displaying tags retrieved from del.icio.us

Имея список тегов, вы можете вызвать метод getPosts() для получения всех закладок, отмеченных как минимум одним из этих тегов. Для этого надо передать массив тегов в качестве первого параметра метода. В листинге 6 показывается, как запросить только те закладки, которые отмечены тегом book:


Листинг 6. Выборка закладок по заданному тегу
                        
<html>
  <head></head>
  <body>
    <h2>My Bookmarks</h2>
    <?php
    // Включение файла класса
    include_once 'Services/Delicious.php';
    
    // Инициализация объекта
    $sdObj = new Services_Delicious('someuser', 'somepass');
    
    // Получение списка недавно созданных закладок,
    // отмеченных тегом 'book'
    // Печать в виде маркированного списка
    $posts = $sdObj->getPosts(array('book'));
    echo "<ul>\n";
    foreach ($posts as $p) {
      echo "  <li>\n";
      echo "    <a href=\"" . $p['href'] . "\">" . $p['description'] . "</a><br />\n";
      echo "    <span style=\"color:red\">" . implode(' ', $p['tag']) . "</span>\n";
      echo "  </li>\n";
    }
    echo "</ul>\n";
    ?>
  </body>
</html>
        

Кстати говоря, массив тегов можно с тем же успехом использовать в качестве первого параметра метода getRecentPosts().



В начало


Добавление и удаление закладок

С помощью пакета Services_Delicious можно добавлять и удалять закладки в вашу учетную запись del.icio.us, вызывая методы addPost() и deletePost() из вашего PHP-приложения. Пример добавления новой закладки приведен в листинге 7:


Листинг 7. Добавление закладки
                        
<?php
// Включение файла класса
include_once 'Services/Delicious.php';

// Инициализация объекта
$sdObj = new Services_Delicious('someuser', 'somepass');

// Добавление закладки del.icio.us
$ret = $sdObj->addPost('http://www.google.com/', 'My fav search engine', 
  null, 'search web cool', null, null);
if ($ret === true) {
  echo 'Закладка добавлена.';
} else {
  echo 'Попытка добавления закладки закончилась неудачно.';
}
?>
        

Метод addPost() принимает шесть параметров, обязательными из которых являются только первые два. Ниже параметры перечислены в том порядке, в котором они ожидаются методом:

  • URL
  • Краткое описание ссылки
  • Подробное описание ссылки
  • Теги, которыми будет отмечена закладка
  • Дата и время создания закладки
  • Признак доступности закладки для других пользователей

Метод addPost() возвращает значение типа Boolean, с помощью которого легко проверить была закладка создана успешно или нет, и вывести пользователю соответствующее сообщение.

Кроме того, можно удалять закладки, в которых более нет необходимости. Пример приведен в листинге 8:


Листинг 8. Удаление закладки
                        
<?php
// Включение файла класса
include_once 'Services/Delicious.php';

// Инициализация закладки
$sdObj = new Services_Delicious('someuser', 'somepass');

// Удаление закладки del.icio.us
$ret = $sdObj->deletePost('http://www.google.com/');
if ($ret === true) {
  echo 'Закладка удалена.';
} else {
  echo 'Попытка удаления закладки завершилась неудачно.';
}
?>
        

Удалять закладки даже проще, чем их создавать: просто передайте нужный URL в метод deletePost() и бац... закладки как не бывало!



В начало


Пример простого приложения

Теперь, когда вы имеет представления о возможностях пакета Services_Delicious, как насчет использования его в реальном приложении? В листинге 9 приведен код программы-менеджера закладок del.icio.us, который использует вышеописанные методы, позволяя пользователям просматривать и добавлять закладки в интерактивном режиме:


Листинг 9. Интерактивный менеджер закладок
                        
<html>
  <head></head>
  <body>
    <h2>My Bookmarks</h2>
    <?php
    // Включение файла класса 
    include_once 'Services/Delicious.php';

    // Использование HTML-формы
    // для добавления новой закладки
    if (isset($_POST['submit'])) {
      $url = trim($_POST['url']);
      $desc = trim($_POST['desc']);
      $tags = trim($_POST['tags']);
      $sdObj = new Services_Delicious('someuser', 'somepass');
      $ret = $sdObj->addPost($url, $desc, null, $tags, null, null);
      if ($ret === true) {
        echo 'Закладка сохранена!';
      } else {
        echo 'Не удалось сохранить закладку!';
      }
      unset($sdObj);
    }

    // Получение списка недавно созданных закладок от сервиса del.icio.us
    // Печать в виде маркированного списка
    $sdObj = new Services_Delicious('someuser', 'somepass');
    $posts = $sdObj->getRecentPosts();
    echo "<ul>\n";
    foreach ($posts as $p) {
      echo "<li>\n";
      echo "<a href=\"" . $p['href'] . "\">" . $p['description'] . "</a><br />\n";
      echo "<span style=\"color:red\">" . implode(' ', $p['tag']) . "</span>\n";
      echo "</li>\n";
    }
    echo "</ul>\n";
    ?>

    <h2>Add New Bookmark</h2>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      URL *: <br /> <input type="text" name="url" size="30" /> <br />
      Description *: <br /> <input type="text" name="desc" size="30" /> <br />
      Tags: <br /> <input type="text" name="tags" size="30" /> <br />
      <input type="submit" name="submit" value="Save" />
    </form>
  </body>
</html>
        

В листинге 9 используются два метода, о которых вы уже знаете:

  • Метод getRecentPosts(), возвращающий список недавно добавленных закладок.
  • Метод addPost(), который обновляет список закладок, получая необходимую информацию из HTML-формы с данными.

Главная страница приложения показана на рисунке 4:


Рисунок 4. HTML-форма для добавления новой закладки через сервис del.icio.us
The HTML form for adding a new bookmark to del.icio.us

На рисунке 5 показана главная страница после добавления новой закладки:


Рисунок 5. Обновленный список, полученный от сервиса del.icio.us, после добавления новой закладки
The new bookmark list from del.icio.us, after adding a bookmark

Как можно заключить на основе приведенных примеров, пакет Services_Delicious предоставляет удобную обертку методов REST-API сервиса del.icio.us. Он очень полезен в случае, если вам необходимо смешивать данные del.icio.us с данными, полученными от других Web-сервисов, или же если вы просто хотите создать собственный интерфейс для работы с del.icio.us. Поэкспериментируйте с этим пакетом и составьте собственное мнение!



Ресурсы

Научиться

Получить продукты и технологии
  • Скачайте пакет Services_Delicious, предоставляющий клиентские возможности для обращения Web-сервису REST del.icio.us для создания, управления и распространения вашей коллекции Web-сайтов. (EN)

  • Скачайте пакет XML_Serializer, позволяющий создавать произвольные документы XML без использования DOM. (EN)

  • Скачайте пакет HTTP_Request, поддерживающий операции GET/POST/HEAD/TRACE/PUT/DELETE, а так же базовую аутентификацию, работу через прокси (включая аутентификацию на прокси-сервере), SSL и добавление файлов на сервер. (EN)

  • Скачайте пакет OpenSSL. Он представляет собой инструментарий, реализующий протоколы SSL (Secure Sockets Layer версии 2 и 3) и TLS (Transport Layer Security версии 1), а так же содержит криптографическую библиотеку общего назначения. (EN)

  • Скачайте ознакомительные версии программного обеспечения IBM: Используйте в вашем следующем проекте ознакомительные версии ПО, которые можно скачать прямо с сайта IBM developerWorks. (EN)


Обсудить


Об авторе

Викрам Васвани (Vikram Vaswani) – основатель и президент консалтинговой фирмы Melonfire, специализирующейся на технологиях и инструментах с открытым исходным кодом. Также является автором книг Решения по программированию на PHP and Как сделать все что угодно с помощью PHP и MySQL .




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



 


 


 


Поделиться этой статьей:

забобрить забобрить memori сохранить в memori




В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.
    IBM в России Конфиденциальность Контакты