JSON

使用 XMPP 构建一个基于 web 的通知工具(5)

字号+ 作者:H5之家 来源:H5之家 2016-07-11 17:00 我要评论( )

在此过程中,您可能会遇到错误。 将清单 、 和 中的代码放到一个将插入到 lib.inc.php 中的函数中。在这个过程中,它将发送一条消息的业务封装到一个 try/catch 语句中,该语句将把任何异常消息写入错误日志中。 清

在此过程中,您可能会遇到错误。 将清单 、 和 中的代码放到一个将插入到 lib.inc.php 中的函数中。在这个过程中,它将发送一条消息的业务封装到一个 try/catch 语句中,该语句将把任何异常消息写入错误日志中。

清单 18. 完整的 send_notification 函数,包含 try/catch 语句以记录错误

/** * Updates everyone's user interface with a message */ function send_notification($message) { // Load configuration global $CONFIG; $conn = new XMPPHP_XMPP( $CONFIG['connect']->host, 5222, $CONFIG['connect']->user, $CONFIG['connect']->pass, $CONFIG['connect']->resc); try { $conn->connect(); $conn->processUntil('session_start'); $conn->presence(); $conn->message($CONFIG['receive'], $message); $conn->disconnect(); } catch(XMPPHP_Exception $e) { error_log($e->getMessage()); } }

您可以对任意数量的公共通知应用程序使用这个简单的机制。这里,您向访问站点的所有用户发送相同的通知,但通过以下机制来定制通知是件麻烦事:

获取外部数据

接下来,您需要一个函数(参见 )来从您的指定提要检索最新的 RSS 条目:

清单 19. 获取 RSS 提要中的最新条目

function get_last_feed_item() { global $CONFIG; // Load configuration $rss = new lastRSS; // Initialize lastRSS $rss->CDATA = 'content'; if ($rs = $rss->get($CONFIG['rss'])) { if (isset($rs['items'][0])) return $rs['items'][0]; else return false; } }

这个函数初始化 lastRSS,加载您配置的 RSS 提要(这里是 IBM developerWorks Web development 专区的最新文章提要),将最顶端的条目返回为一个数组。拥有这个最新提要条目后,您需要知道自从上次检查以来,该条目是否被更改。为此,您需要使用一个小型文本文件。为保护应用程序,最好使用数据库或另一种方法,但对于测试目的,可以放心使用一个小型文件缓存。这个缓存在您每次检查时都存储最新提要条目的 URL;如果这个 URL 更改,那么您就有一个新条目,应该通知用户。另一个函数 feed_has_changed 将据此返回 true 或 false。不管是哪种情况,它都会将这个最新 URL 保存到缓存文件中,为下次检查做好准备。 展示了 feed_has_changed 函数:

清单 20. 返回任何新提要数据

function feed_has_changed($url) { global $CONFIG; $changed = false; // Check to see if the file exists, and if it does, if // the URL has changed if (!file_exists($CONFIG['cachedir'] . 'cache.txt')) { $changed = true; } else if (file_get_contents($CONFIG['cachedir'] . 'cache.txt') != $url) { $changed = true; } // If the URL has indeed changed, update the version in the cache // and return true if ($changed) { file_put_contents($CONFIG['cachedir'] . 'cache.txt', $url); return true; } // Otherwise return false return false; }

您将把最新条目的一个简单的 HTML 编码版本传递给客户端。在更高级的应用程序中,可以以 JavaScript Object Notation (JSON) 或 XML 编码该条目,多包括一些元数据,并允许客户端 JavaScript 根据设备和浏览器适当格式化它。但是,对于现在, 中的版本就够用了。

清单 21. 将一个提要条目封装在简单的 HTML 中

function last_item_html($item) { return <<< END <div> <div> <h2><a href="{$item['link']}" target="_blank">{$item['title']}</a></h2> </div> <div> {$item['description']} </div> </div> END; }

最后,在您的 /pingstream 目录中创建一个名为 backend.php 的新 PHP 文件。使用 中的简单 PHP 脚本作为文件内容。这个脚本负责检索 RSS 提要并通过 XMPP 将最新提要条目的 JSON 编码版本发送到您的接收方。

清单 22. 通过 XMPP 发送封装的提要条目

<?php require_once('lib.inc.php'); if ($lastitem = get_last_feed_item()) { if (feed_has_changed($lastitem['link'])) { send_notification(last_item_html($lastitem)); } }

这就是将动态通知发送给应用程序的公共用户所需的全部内容。理想情况下,您应该将 backend.php 脚本作为一个定期时间任务运行。但是,对于测试目的,您可以通过一个 web 浏览器手动执行该脚本。

浏览器应用程序:Strophe.js 和 jQuery

在本小节中,您将编写一些 JavaScript 函数,以便通过 BOSH 上的 XMPP 接收消息,并构建一个 HTML 用户界面来显示接收到的通知。

创建用户界面

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
r