Использование pureXML в Flex-приложении микроблога: Часть 3. Использование Web-сервисов pureXML для публикации записей микроблога на HTML-странице

Извлечение обновлений из базы данных с поддержкой pureXML и их публикация с помощью RSS-потока или в Твиттере

Возможности PureXML®, реализованные в IBM DB2®, позволяют хранить XML в базе данных нативным образом, без каких-либо изменений, что позволяет приложениям Adobe® Flex® непосредственно читать XML-данные и заполнять пользовательские интерфейсы Flex. В этом цикле статей из трех частей мы создадим приложение микроблога, которое использует pureXML, Web-сервисы, Adobe Flex и даже позволяет публиковать заметки микроблога в Твиттере. В первой части – на примере создания и тестирования базы данных микроблога – рассказывается о Web-сервисах и о том, как включить их с помощью DB2 pureXML. Во второй части рассматривается применение Adobe Flex и ActionScript для создания пользовательского интерфейса приложения. Из этой, заключительной, статьи данного цикла вы узнаете, как использовать Web-сервисы pureXML для публикации записей микроблога на HTML-странице.

Джо Леннон, разработчик ПО, Независимый разработчик

Джо Леннон - 24-летний разработчик ПО из города Корк, Ирландия. Джон является автором вскоре выходящей в издательстве Apress книги Beginning CouchDB, а также нескольких технических статей и руководств на IBM developerWorks. В свободное время Джо любит играть в футбол, возиться с гаджетами и ставить игровые рекорды на своей Xbox 360.



29.08.2011

Предварительные условия

В этой статье для создания скриптов для приложения Profile Badge Generator и для публикации с помощью RSS-потока или в Твиттере будет использоваться язык PHP. Будет использоваться Web-сервер с открытым исходным кодом Apache и сервер баз данных DB2 Express-C, входящий в состав среды разработки. Информация о загрузке приведена в разделе Ресурсы в конце данной статьи.


Введение

Часто используемые сокращения

  • API: Application program interface(Интерфейс прикладного программирования, API-интерфейс)
  • HTML: Hypertext Markup Language
  • HTTP: Hypertext Transfer Protocol
  • RSS: Really Simple Syndication
  • SDK: Software Development Kit(Инструментарий для разработки программного обеспечения)
  • SQL: Structured Query Language(Язык структурированных запросов)
  • URL: Uniform Resource Locator
  • XML: Extensible Markup Language

В третьей, заключительной, части этого цикла, посвященного созданию приложений, взаимодействующих с базой данных IBM DB2 pureXML, мы используем популярный язык PHP для создания скриптов, обеспечивающих публикацию и синдицирование обновлений в вашей базе данных через Интернет.

Сначала мы создадим скрипт Profile Badge Generator (Генератор визиток профиля), с помощью который пользователь сможет генерировать фрагмент HTML-кода для вставки в свой блог или Web-сайт. Этот скрипт извлекает новейшие обновления из базы данных с поддержкой pureXML и представляет их в заранее заданном формате. Пользователи смогут настраивать дизайн визитки, выбирая из ассортимента возможных размеров и цветовых схем, и задавать количество обновлений, подлежащих отображению. Затем мы создадим PHP-скрипт для публикации новейших обновлений в базе данных в виде RSS-потока. И, наконец, мы создадим скрипт, который представляет пользователю все обновления состояния в базе данных при нажатии на кнопку Post to Twitter, расположенную рядом с каждым обновлением. Когда пользователь нажимает на эту кнопку, API-интерфейс Twitter берет указанное сообщение и добавляет соответствующее обновление к твиттер-потоку этого пользователя.

Прежде чем приступать к написанию программного кода, вам необходимо настроить свою среду разработки. Сначала следует установить Web-сервер – в данном случае это Web-сервер с открытым исходным кодом Apache. Затем необходимо установить PHP-пакет и сконфигурировать его для работы с Apache и DB2. Для начала загрузите и установите сервер Apache.

Установка Apache

Откройте предпочтительный Web-браузер и укажите ему на страницу загрузки сервера Apache HTTP Server (ссылка приведена в разделе Ресурсы).Прокрутите экран вниз и найдите версию, помеченную как best available version (наилучшая доступная версия), а затем выберите загрузку Win32 Binary without Crypto. На момент написания данной статьи новейшая доступная версия имела номер 2.2.14.

Сохраните файл в удобном для вас месте (например, на рабочем столе Windows®) и после завершения загрузки запустите файл .msi для установки.

Нажмите Next для продолжения, прочитайте лицензионное соглашение, выберите опцию I accept the terms in the license agreement (Я принимаю условия лицензионного соглашения) и снова нажмите на Next. На следующем экране вам будет представлен документ под названием Read This First (Сначала прочитайте этот текст). Для продолжения нажмите Next.

Значения, вводимые на экране Server Information, не очень важны, поскольку это среда разработки. Вы будете обращаться своей установке Apache посредством адреса localhost, поэтому можно ввести любой домен и любой адрес электронной почты. Под заголовком Install Apache HTTP Server 2.2 programs and shortcuts for: (Установить программы и ярлыки Apache HTTP Server 2.2 для:) выберите рекомендованную опцию All Users, on Port 80, as a Service (Все пользователи, порт 80, как сервис). Выбранные мной значения для этого экрана показаны на рис. 1. По готовности нажмите на кнопку Next.

Рисунок 1. Информация мастера установки Apache Server
Screen capture of the Apache Server Information dialog with network domain, server name, and administrator e-mail fields

Теперь вам будет предложено выбрать тип установки: Typical (типовая) или Custom (специальная). Если вы не собираетесь изменять состав устанавливаемых компонентов Apache Server, то можете без каких-либо опасений выбрать опцию Typical. Для продолжения нажмите Next.

На экране Destination Folder (Папка назначения) используйте опцию по умолчанию C:\Program Files\Apache Software Foundation\Apache2.2\.

Теперь можно начать процедуру установки. На экране Ready to Install the Program (Готовность к установке программы) нажмите Install для начала установки.

Установка занимает всего несколько минут. Когда она будет закончена, вы увидите экран, показанный на рис. 2. Нажмите на кнопку Finish для выхода из утилиты установки.

Рисунок 2. Установка завершена
Screen capture of the Installation completed dialog for the Apache server

Если установка прошла успешно, теперь в вашей системе исполняется сервер Apache. Первый признак этого – наличие в системном лотке на панели задач небольшой пиктограммы в виде логотипа Apache с размещенной поверх него кнопкой play (см. рис. 3).

Рисунок 3. Пиктограмма Apache в области уведомлений (System Tray)
Screen capture of the Apache system tray icon

Еще раз убедитесь в том, что сервер Apache работает. Откройте предпочтительный Web-браузер и в адресной панели введите URL-адрес http://localhost/index.html. Если установка Apache была успешной, вы должны увидеть сообщение «It works!» (Работает!), показанное на рис. 4.

Рисунок 4. It works!
Screen capture of the 'It works!' message after a successful install of the Apache server

Теперь, когда сервер Apache установлен и работает, пойдем дальше и установим PHP.

Установка PHP

Вам следует загрузить свежие двоичные файлы PHP для Windows (ссылка приведена в разделе Ресурсы). Существует несколько различных вариантов, однако вам требуется версия PHP 5.2.x VC6 x86 Thread Safe (см. рис. 5). На момент написания статьи новейший выпуск имел номер 5.2.11. НЕ используйте версию PHP 5.3, поскольку на данный момент она не поддерживает библиотеку расширений PECL (PHP Extension Community Library) . Для вышеуказанной версии выберите опцию Zip (не загружайте опцию Installer или опцию Debug Pack).

Рисунок 5. Страница загрузки двоичных файлов PHP для Windows
Screen capture of the PHP Windows binaries download page

Сохраните этот файл в удобном месте. После завершения загрузки распакуйте содержимое Zip-архива в папку C:\php. Содержимое папки будет включать несколько dll-файлов lib и php, а также папку PEAR и другие папки (см. рис. 6.

Рисунок 6. Содержимое папки C:\php
Screen capture of the contents of the C:\php folder

Вам нужно изменить переменную Path своей системы и добавить в ее значение папку установки PHP. В Панели управления Windows откройте папку System (Система). В открывшемся окне System Properties (Свойства системы) нажмите на закладку Advanced (Дополнительно), показанную на рис. 7.

Рисунок 7. Окно System Properties (Свойства системы)
Screen capture of the Advanced tab on the System Properties dialog

Нажмите на кнопку Environment Variables (Переменные среды) для открытия следующего диалогового окна. В разделе System variables (Системные переменные) найдите переменную Path и нажмите на кнопку Edit (Изменить), выделенную на рис. 8.

Рисунок 8. Переменные среды
Screen capture of the System variables window on the Environment variables dialog

В диалоговом окно Edit System Variable (Изменение системной перемен…) добавьте в поле Variable value (Значение переменной) следующую информацию ;c:\php.

Рисунок 9. Экран Edit system variable (Изменение системной перемен…)
Screen capture of the Edit system variable dialog with ;c:\php value added

Нажмите на кнопку OK в каждом из трех открытых окон для их закрытия. В папке C:\php вы найдете файл с именем php.ini-recommended. Скопируйте этот файл в ту же папку и переименуйте копию в php.ini. Теперь необходимо загрузить расширение DB2 для PHP (ссылка приведена в разделе Ресурсы). Загрузите архив расширений PECL для PHP. Распакуйте этот архив в любое удобное место. Теперь откройте папку, в которую вы распаковали файлы из архива, и найдите файл php_ibm_db2.dll. Скопируйте этот файл в папку C:\php\ext. Теперь вы должны сконфигурировать PHP для использования этих расширений DB2.

Откройте файл C:\php\php.ini для редактирования в предпочтительном текстовом редакторе и найдите строку extension_dir = "./". Измените эту строку следующим образом: extension_dir = "c:\php\ext". Теперь найдите в этом файле раздел динамических расширений. Последняя строка будет выглядеть примерно так: ;extension=php_zip.dll. Под этой строкой добавьте следующую строку для активации расширения DB2: extension=php_ibm_db2.dll. В разделе расширений найдите строку ;extension=php_curl.dll и удалите символ комментария «;» в начале строки, чтобы строка выглядела следующим образом: extension=php_curl.dll.

Сохраните этот файл, поскольку вы уже завершили конфигурирование PHP. Пришло время сконфигурировать установку Apache и сообщить ей, где находится PHP. Откройте конфигурационный файл Apache, расположенный в следующем месте: C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf. Откройте этот файл в предпочтительном текстовом редакторе и добавьте в нижней части файла следующие строки, показанные в листинге 1.

Листинг 1. Настройка конфигурационного файла Apache для PHP (httpd.conf)
LoadModule php5_module "c:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
PHPIniDir "C:/php"

Сохраните файл httpd.conf и закройте свой текстовый редактор. Теперь нажмите левой кнопкой мыши на пиктограмме Apache в зоне уведомлений на панели задач и выберите опцию Apache2.2>Restart. Web-сервер Apache остановится, а затем запустится снова. Если все прошло хорошо, теперь ваш Web-сервер исполняется вместе со всеми правильно сконфигурированными компонентами, включая PHP и расширения DB2.

Выполните быструю проверку, чтобы убедиться в том, что PHP и расширения DB2 действительно работают. Еще раз откройте свой текстовый редактор и создайте новый файл со следующим содержимым: <?php phpinfo(); ?>.

Сохраните этот файл как test.php в папке: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs. Теперь откройте свой Web-браузер и введите в нем адрес http://localhost/test.php. Вы должны увидеть страницу с информацией о своем приложении PHP (см. рис. 10).

Рисунок 10. Информационная страница PHP
Screen capture of the PHP information page

Одна только демонстрация этой страницы подтверждает, что PHP работает, однако что можно сказать относительно расширений DB2? Прокрутите страницу вниз наполовину и найдите раздел под названием ibm_db2, показанный на рис. 11.

Рисунок 11. Информация расширений ibm_db2
Screen capture of the ibm_db2 extension information

Теперь, когда пакет PHP и расширения DB2 для PHP установлены и сконфигурированы, вы готовы приступить к работе со своей базой данных DB2 с помощью PHP. В следующем разделе вы убедитесь в том, что все это работает. Для этого вы подключитесь к своей базе данных DB2 и извлечете из нее некоторые данные с помощью PHP.


Подключение к DB2 с помощью PHP

Теперь протестируем соединение с базой данных DB2. Откройте свой текстовый редактор и создайте новый файл, добавив в него содержимое листинга 2. Сохраните этот файл под именем test_db.php в следующей папке: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs. Возможно, вам придется изменить переменные $db, $user и $pass на значения, которые вы использовали при работе с базой данных DB2 в первой части этого цикла. Переменная $user указывает на схему, в которой расположены ваши таблицы.

Листинг 2. test_db.php
<?php
$db = 'MBLOG';
$user = 'MBLOG';
$pass = 'password';
$host = 'localhost';
$port = 50000;

$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$db; " .
    "HOSTNAME=$host;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$pass; ";

$conn = db2_connect($settings, '', '');

if(!$conn) {
    echo "Connection failed<br />";
    echo db2_conn_errormsg($conn);
}

$sql = "SELECT * FROM status_updates";
$result = db2_exec($conn, $sql);
echo "<ul>";
while($row = db2_fetch_array($result)) {
    echo "<li>$row[0]</li>";
}
echo "</ul>";
?>

Чтобы открыть этот скрипт в своем Web-браузере, перейдите по адресу: http://localhost/test_db.php. Вы должны увидеть список отметок типа «дата-время» со связанными сообщениями, как на рис. 12.

Рисунок 12. Извлечение данных из DB2 с помощью PHP
Screen capture of the concatenated date-time and message data retrieved from DB2 using PHP

Вам должны быть знакомы эти данные; эта информация из базы данных DB2, которую вы создали в первой части этого цикла. Теперь, когда PHP работает и извлекает данные из вашей базы данных, можно переходит к реализации некоторых полезных функций с помощью PHP. В следующем разделе мы создадим PHP-скрипт, позволяющий генерировать визитку профиля с соответствующим HTML-кодом, который можно достаточно просто вставить в Web-сайт или в блог для добавления обновлений в микроблог на этой странице.


Создание HTML-визиток

В предыдущем разделе вы реализовали извлечение данных из своей базы данных DB2 с помощью PHP. Посмотрите снова на рис. 12. Хотя ваши данные хранятся в базе данных в формате XML, однако когда вы использовали оператор SELECT для извлечения этих сведений из базы данных, она возвращала их не в формате XML, а в виде строки со сцепленными значениями тегов date_created и text. Конечно, вам придется извлекать каждое из этих полей отдельно, чтобы надлежащим образом отформатировать свои HTML-визитки.

Сначала необходимо создать представление DB2, которое с помощью SQL/XML будет разделять данные в вашей базе данных pureXML на отдельные столбцы, легко доступные для разбора средствами PHP. При желании вы сможете использовать с этой целью XQuery.

Откройте приложение DB2 Command Editor: (Start>Programs>IBM DB2>DB2COPY1 (Default)>Command Line Tools>Command Editor). Выберите базу данных MBLOG в качестве целевой базы данных, а затем введите код из листинга 3 в окно редактора.

Листинг 3. Создание представления обновлений
CREATE VIEW updates(date_created, text) AS
SELECT t.date_created, t.text FROM status_updates su,
XMLTABLE('$u/update' passing su.data as "u"
columns date_created varchar(100) path 'date_created',
text varchar(500) path 'text') as t;

Нажмите на зеленую кнопку Play слева сверху от области редактирования для исполнения оператора. В области ответа вы должны получить сообщение об успешном исполнении. Теперь проверьте, что это представление работает надлежащим образом. В области редактирования замените вышеприведенный оператор следующим: select date_created, text from updates;.

Вы должны увидеть такой же результат, как на рис. 13.

Рисунок 13. Результат исполнения представления Updates
Screen capture of the result of executing the Updates view with separate date-time and message data

Оператор SELECT извлекает данные из таблицы status_updates в отдельные столбцы с названиями date_created и text. Вы можете использовать аналогичный оператор SELECT в PHP, что существенно облегчит работу с данными DB2.

Теперь приступим к созданию Profile Badge Generator. Первый PHP-скрипт, который вам необходимо создать, представляет собой форму для Badge Generator. Эта форма будет спрашивать пользователя, какой цвет (белая, желтая или серая) и какой размер (широкая или узкая) он желает применить для своей визитки. Когда пользователь нажимает на кнопку Generate, ему демонстрируется, как будет выглядеть его визитка, и выдается HTML-код, с помощью которого он сможет вставить эту визитку в свой блог или на Web-страницу.

Теперь вам необходимо создать скрипт generate.php и сохранить его в папке: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs. Содержимое этого скрипта показано в листинге 4.

Листинг 4. generate.php
<html>
<head>
<?php
if(isset($_GET['size']) && isset($_GET['color'])) {
    if($_GET['size'] == "wide") $size = 'width="400" height="150"';
    else $size = 'width="200" height="300"';
    ?>
    <title>Your Profile Badge is Ready!</title></head>
    <body><h1>Your Profile Badge is Ready!</h1>
    <iframe src="badge.php" frameborder="1" scrolling="auto" <?php echo 
$size; ?>
        marginheight="0" marginwidth="0"
        style="background-color: <?php echo $_GET['color']; ?>;">
        Older browser see this message as iframes aren't supported.
    </iframe><br /><br />
    Paste the following code into your blog or Website HTML code in order to add
    the Profile Badge to that page:<br />
    <textarea readonly="readonly" cols="40" rows="5">
<iframe src="http://localhost/badge.php" frameborder="1" scrolling="auto"
<?php echo $size; ?>
    marginheight="0" marginwidth="0"
    style="background-color: <?php echo $_GET['color']; ?>;">
    Older browser see this message as iframes aren't supported.
    </iframe>
    </textarea>
    <?php
} else {
    ?>
    <title>Generate Profile Badge</title></head>
    <body><h1>Generate Profile Badge</h1>
    <form method="get" action="generate.php">
    <strong>Color:</strong><br />
    <input type="radio" name="color" value="white" /> White
    <input type="radio" name="color" value="yellow" /> Yellow
<input type="radio" name="color" value="silver" /> Grey
    <br /><br /><strong>Size:</strong><br />
    <input type="radio" name="size" value="wide" /> Wide
    <input type="radio" name="size" value="narrow" /> Narrow
    <br /><br /><input type="submit" value="Generate!" />
    </form>
    <?php
}
</body></html>
?>

Если форма еще не была отправлена, скрипт покажет эту форму пользователю и попросит его выбрать цвет и размер для визитки профиля. Если пользователь уже отправил форму, будет отображен тег IFRAME для визитки профиля и HTML-код для включения этого тега IFRAME в другие страницы, указанные в нижней части. Прежде, чем вы сможете использовать приведенные выше сведения для решения каких-либо других задач, вам необходимо самостоятельно создать реальную визитку. Введите код из листинга 5 в новый файл с именем badge.php и сохраните его в той же папке, где находится файл generate.php.

Листинг 5. badge.php
<?php
$db = 'MBLOG';
$user = 'MBLOG';
$pass = 'password';
$host = 'localhost';
$port = 50000;

$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$db; " . 
    "HOSTNAME=$host;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$pass; ";

$conn = db2_connect($settings, '', '');

if(!$conn) {
    echo "Connection failed<br />";
    echo db2_conn_errormsg($conn);
}

?>
<style type="text/css">
.update { border-bottom: 1px solid black; padding: 5px; }
</style>

<?php
$sql = "SELECT text, date_created FROM updates order by date_created desc";
$result = db2_exec($conn, $sql);
if(!$result) echo db2_stmt_errormsg();
else {
echo '<div class="updates">';
while($row = db2_fetch_array($result)) {
        if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
echo '<div class="update">'
                .'<div class="update_text">'.$row[0].'</div>'
                .'<div class="update_date"><em>'.$row[1].'
</em></div>'
                .'</div>';
        }
}
echo "</div>";
}
?>

Этот скрипт подключается к вашей базе данных DB2 и извлекает обновления состояния из представления DB2, созданного в начале этого раздела. Он убеждается в том, что поля text и date_created содержат некоторые данные, а затем отображает эти данные. Вызов этого скрипта в тег IFRAME осуществляется другими страницами, поэтому он демонстрируется внутри этих страниц, что существенно облегчает его включение в блоги или в Web-сайты..

Откройте свой Web-браузер и перейдите по адресу: http://localhost/generate.php. Вы должны увидеть страницу, показанную на рис.14.

Рисунок 14. Страница Generate Profile Badge
Screen capture of the Generate Profile Badge page with color and size radio buttons

Выберите параметры Color (цвет) и Size (размер), а затем нажмите на кнопку Generate!. Вы должны увидеть страницу, подобную показанной на рис. 15.

Рисунок 15. Страница результатов Profile Badge
Screen capture of the Profile badge result page with list of date-time stamps and messages plus the code in the iframe

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


Публикация RSS-потока

В этом разделе вы будете использовать PHP для генерации RSS-потока для своего приложения микроблога. В текстовом редакторе создайте новый файл и сохраните его как: rss.php in the folder C:\Program Files\Apache Software Foundation\Apache2.2\htdocs. Содержимое этого файла показано в листинге 6.

Листинг 6. rss.php
<?php
header("Content-type: text/rss+xml");
header("Pragma: no-cache");

echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<rss version="2.0">';
echo '<channel>';
echo '  <title>Microblog RSS Feed</title>';
echo '  <description>An RSS Feed of Microblog Status'. 
'Updates</description>';
echo '  <link>http://localhost/rss.php</link>';
echo '  <language>en-us</language>';
echo '  <generator>DB2 Microblog</generator>';

$database = 'MBLOG';
$user = 'JOE LENNON';
$password = 'password';
$hostname = 'localhost';
$port = 50000;

$settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
    "HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;" .
    "UID=$user;PWD=$password;";

$conn = db2_connect($settings, '', '');

$sql = "select text, date_created from updates order by date_created desc";
$result = db2_exec($conn, $sql);

while($row = db2_fetch_array($result)) {
    if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
        $pub_date = $row[1];
        $pub_date = str_replace('T', '-', $pub_date);
        $pub_date = str_replace(':', '-', $pub_date);
        $date_array = explode("-", $pub_date);
        $timestamp = mktime($date_array[3], $date_array[4], 
$date_array[5], $date_array[1], $date_array[2],
$date_array[0]);
        $rss_date = date(DATE_RSS, $timestamp);

        echo '<item>';
        echo '  <title>'.htmlentities($row[0]).'</title>';
        echo '  <description>'.htmlentities($row[0]).'</description>';
        echo '  <pubDate>'.$rss_date.'</pubDate>';
        echo '  <link>http://localhost/generator.php</link>';
        echo '</item>';
    }
}

echo '</channel>';
echo '</rss>';
?>

Этот скрипт генерирует XML-документ в формате стандарта RSS 2.0, извлекая записи из вашей базы данных DB2. Для просмотра RSS-потока откройте RSS-совместимый Web-браузер или приложение RSS Feed Reader и перейдите по адресу: http://localhost/rss.php.Вы должны увидеть примерно такую картину, как на рис. 16.

Рисунок 16. RSS-поток в действии
Screen capture of he RSS feed for a microblog with a list of link items

Сейчас ваш генератор RSS-потока связывает каждую запись со страницей скрипта Profile Badge Generator. Если у вас есть Web-сайт, на котором каждому обновлению выделяется отдельная страница, то вы сможете предоставлять ссылки на эти страницы в RSS-потоке. Кроме того, генератор извлекает данные из базы данных при каждом ее исполнении. Более совершенное решение могло бы использовать cron-задание или инициируемую по расписанию задачу, которые будут с заранее заданными интервалами вызывать PHP-скрипт, генерирующий RSS-поток и сохраняющий его в файле с именем rss.xml. После этого вы могли бы указывать своим читателям/подписчикам на файл rss.xml, а не на динамический скрипт rss.php..


Интеграция с Твиттером

Заключительный скрипт, который вы создадите, позволяет вам извлекать запись микроблога из нашей базы данных и отправлять ее в Твиттер с помощью интерфейса Twitter API. В этом скрипте вы сначала представите пользователю список всех обновлений в базе данных, снабженных ссылками Push to Twitter (Отправить в Твиттер). При нажатии на такую ссылку интерфейс Twitter API добавляет соответствующую запись в Твиттер в качестве нового обновления.

Для начала создайте новый файл в текстовом редакторе и сохраните его под именем twitter.php в папке: C:\Program Files\Apache Software Foundation\Apache2.2\htdocs. Содержимое этого файла показано в листинге 7.

Листинг 7. twitter.php
<?php
if(isset($_GET['text'])) {
    $ch = curl_init("http://www.twitter.com/statuses/update.xml?status=".
urlencode(stripslashes(urldecode($_GET['text']))));
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
    curl_setopt($ch, CURLOPT_USERPWD, "joelennon:password");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
    $result = curl_exec($ch);
    $res_info = curl_getinfo($ch);
    curl_close($ch);

    if($res_info['http_code'] == '200') {
        echo '<h1>Yippee! Your update was posted to Twitter!</h1>';
    } else {
        echo '<h1>Whoops! Something seemed to go wrong when posting '.
'to Twitter...</h1>';
    }
} else {
    $database = 'MBLOG';
    $user = 'JOE LENNON';
    $password = 'password';
    $hostname = 'localhost';
    $port = 50000;

    $settings = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
        "HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;" .
        "UID=$user;PWD=$password;";

    $conn = db2_connect($settings, '', '');
    $sql = "select text, date_created from updates order by ".
"date_created";
    $result = db2_exec($conn, $sql);

    echo '<h1>Push to Twitter</h1>';
    echo '<ul>';
    while($row = db2_fetch_array($result)) {
        if(strlen($row[0]) > 0 && strlen($row[1]) > 0) {
            echo '<li><strong>'.htmlentities($row[0]).'</strong>'.
' (<a href="twitter.php?text='.htmlentities($row[0]).'">Push to '.
'Twitter</a>)<br /><em>Posted '.$row[1].'</em></li>';
        }
    }
    echo '</ul>';
}
?>

Этот скрипт действует следующим образом. Когда пользователь первый раз откроет данную страницу, он увидит список обновлений состояния, каждое из которых имеет ссылку Push to Twitter (Отправить в Твиттер). При нажатии пользователя на такую ссылку скрипт использует curl-расширения PHP (которые были активированы ранее в этой статье при конфигурировании PHP), чтобы отправить соответствующее обновление в Твиттер с помощью интерфейса Twitter API. Не забудьте изменить значение параметра CURL_USERPWD на свою учетную запись в Твиттере. Введите в свой Web-браузер адрес http://localhost/twitter.php, после чего вы должны увидеть нечто подобное показанному на рис. 17.

Рисунок 17. Отправка обновлений в Твиттер (Push to Twitter)
Screen capture of the Push Updates to Twitter page

Когда вы нажимаете на какую-либо из ссылок Push to Twitter ваше обновление должно быть отправлено в Твиттер. Если скрипт получит подтверждение об успехе этой отправки, вы увидите следующее сообщение (рис. 18.

Рисунок 18. Успешная отправка обновления в Твиттер
Screen capture of the Twitter status updated

Теперь вам осталось лишь проверить свою страницу в Твиттере, чтобы увидеть там свою новую запись. Я посетил свою страницу по адресу http://twitter.com/joelennon и посмотрел на свое обновление, которое теперь сможет увидеть весь мир (см. рис. 19).

Рисунок 19. Обновление в Твиттере
Screen capture of the update on the author's Twitter page

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


Заключение

В этой, заключительной статье данного цикла, посвященного созданию приложения микроблога с помощью IBM DB2 pureXML и Flex, вы детально ознакомились с тем, как использовать данные своего микроблога в разных полезных скриптах. Сначала вы установили Web-сервер Apache и PHP, а также расширения PHP для поддержки IBM DB2. Затем на языке PHP вы создали инструмент Profile Badge Generator, генерирующий аккуратный HTML-код, готовый к интеграции в блог или в Web-страницу. После этого с помощью RSS вы синдицировали свои обновления микроблога и, наконец, интегрировали свое приложение с Твиттером, позволив пользователю оправлять обновления своего микроблога в Твиттере с помощью curl-расширений и интерфейса Twitter API.

Данный цикл охватывает обширный диапазон тем: IBM DB2 Express-C, DB2 pureXML, SQL/XML, XQuery, pureXML Web-сервисы, IBM Data Studio, IBM WebSphere Application Server Community Edition, Adobe Flex, Apache, PHP, RSS-потоки и Twitter API. Теперь вы располагаете вполне достаточным опытом работы со всеми перечисленными технологиями, чтобы двигаться вперед и создавать еще более совершенные приложения.


Загрузка

ОписаниеИмяРазмер
Исходный код к статьеxmlflexpt3.source.zip5 KБ

Ресурсы

Научиться

Получить продукты и технологии

  • Страница загрузки Apache HTTP Server: Здесь можно получить исходный код реализации сервера Apache HTTP (Web) Server. Новейшая доступная версия – 2.2.13.(EN)
  • Двоичные файлы PHP Point для Windows-платформ: Получите новейшие двоичные файлы PHP Point для Windows. В этой статье использовалась версия PHP 5.2.11. НЕ ИСПОЛЬЗУЙТЕ версию PHP 5.3, поскольку на данный момент она не поддерживает расширения PECL.(EN)
  • Расширение DB2 для PHP: Загрузите это расширение и настройте его для создания учебного приложения.(EN)
  • Wiki-ресурс по Twitter API: Посетите этот ресурс, который содержит документацию, ответы на вопросы и примеры по протоколу OAuth, списки адресатов, семинары и другие ресурсы сообщества.
  • DB2 Express-C: Получите бесплатную версию сервера базы данных IBM DB2 –превосходную основу для разработки приложений для малого и среднего бизнеса.(EN)

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Information Management, Open source
ArticleID=754567
ArticleTitle=Использование pureXML в Flex-приложении микроблога: Часть 3. Использование Web-сервисов pureXML для публикации записей микроблога на HTML-странице
publish-date=08292011