`
hunix
  • 浏览: 21874 次
  • 性别: Icon_minigender_1
  • 来自: 孝感
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

编程实现PHP应用程序变成聊天机器人(bot)

阅读更多
有一个免费的模块可以用于将 PHP 应用程序连接到 IRC 服务器,并对消息作出响应。为了说明如何使用该模块,本文向您展示如何在 PHP 中创建一个 IRC 聊天机器人(bot)(bot 是 automatic robot 的简称),用于向您告知按邮政编码查询的天气情况。
您不断想要与您的 PHP 程序进行交谈?您痴迷于即时消息?如果是这样,我可以为您提供一个模块!该模块存在于 PHP 扩展及应用资料库(PHP Application and Extension Repository,PEAR)中,用于将 PHP 应用程序连接到 Internet 中继聊天(Internet Relay Chat,IRC)服务器,并对服务器的消息作出响应。实际上,PEAR 模块是将 PHP 应用程序变成 bot。

聊天机器人(bot)是什么?

您不知道 bot 是什么?其实并不只有您不知道。聊天机器人(bot) 是一个程序,可以登录到一个系统中(例如,IRC 系统或西洋双陆棋服务器)并回答问题或进行游戏。


聊天机器人(bot)的意义在于,您能够通过经常使用的机制 —— 即时消息 —— 与其进行通信。如果您总是在聊天室中,那么现在不需要离开聊天室就可以得到当地的天气信息。本文向您展示如何在 PHP 中创建一个 IRC 聊天机器人(bot),用于以向您告知按邮政编码查询的天气情况。

IRC 基础

假如您不熟悉 IRC 系统,可以从这里入门。IRC 系统由两部分组成:服务器和客户机。服务器创建数个虚拟信道供用户登录并互相通信。信道被给予一个熟悉的名称,以与对话的主题匹配。

通过指定主机名称、端口号和所需的别名,将 IRC 客户机软件连接到服务器。客户机在成功地连接到服务器之后,就能够加入任何数目的信道并开始发送和接收消息。要发送消息,只需在一个文本框中输入消息,并按 Enter 键,就跟任何其他的即时消息客户机一样。然后客户机发送消息到服务器,服务器然后将消息广播到加入该信道的所有其他的客户机。IRC 客户机软件对所有的操作系统及便携设备可用。

聊天机器人(bot)可以像其他的客户机那样运行。它们连接到服务器,然后加入一个或多个信道。一般而言,聊天机器人(bot) 不会自主地发出消息。更确切地说,它们侦听信道中来自用户的符合特定格式的消息。聊天机器人(bot)发出消息以响应这些特定格式的请求。

本文中 聊天机器人(bot)查找的用户消息以 weather 开始,后跟邮政编码。(但是一开始,我仅查找 weather 以使例子简单。)


安装 PEAR 模块

从安装几个 PEAR 模块开始。PEAR 是用户提供的模块组成的资料库。这些模块涵盖了读写不同类型的文件、使用不同的 Web 服务、科学模块以及更多内容。

PEAR 的一个主要功能是,站点为 Microsoft® Windows®、Linux® 以及 Mac OS X 操作系统提供了脚本,使您能够通过计算机的命令行方便地安装 PEAR 模块。下面是我在 Windows 命令提示窗口下的会话,通过该会话安装了 Net_SmartIRC 模块:


清单 1. Windows 命令提示窗口下的会话

    C: >pear install Net_SmartIRC
    downloading Net_SmartIRC-1.0.0.tgz ...
    Starting to download Net_SmartIRC-1.0.0.tgz (185,991 bytes)
    ........................................done: 185,991 bytes
    install ok: Net_SmartIRC 1.0.0
 


安装 IRC 服务器

技巧

要使用本文中的代码,需要安装 Net_SmartIRC 和 Services_Weather 模块, 以及它们依赖的模块(参见 参考资料 获得下载地址)。例如,Services_Weather 需要 XML_Serializer(包含在其他模块中)。PEAR 脚本列出了必须安装的组件。注意:如果 PEAR 脚本提示没有现有模块的已发布版本,那么使用强制选项 (-f) 来强制安装模块。


创建 IRC 聊天机器人(bot)的下一个步骤是设置聊天机器人(bot)能够登录的服务器。您可能已经使聊天机器人(bot) 登录到了一个公共服务器,但是我建议先安装一个本地服务器用于测试。

我选择运行 Windows 版本的 “beware ircd” 服务器(beware ircd 服务器还有一个 Linux 版本)。我查看了几台服务器,发现这一台是最容易使用的。安装 beware ircd 服务器很简单,我将其安装在 C:ircd 目录下。从该目录下,我通过打开命令提示符并键入如下命令,运行该服务器:


    C:ircd> bircd
 



注意:无需更改任何配置。

但是如何知道服务器是否正在运行呢?要进行验证,需要安装 IRC 客户机。



安装 IRC 客户机

要测试本地服务器,并且与聊天机器人(bot)进行通信,需要安装 IRC 客户机。我选择安装用于 Windows 的常见的 mIRC 客户机(在撰写本文时,V6.16 是最新版本)。您可以选择适合您的平台的客户机。

安装 mIRC 客户机后,我从 Startstart mIRC 应用程序。接着使用 Connect 命令连接到 localhost。我使用菜单中的 join 命令,连接到 #weather 信道,如图 1 所示。


图 1. 从 IRC 客户机加入 #weather 信道


连接信道后,将显示如图 2 所示的窗口。从这里我可以与其他人或者是聊天机器人(bot)交谈。


图 2. #weather 信道的聊天界面


现在,服务器已在本地运行,IRC 客户机已安装好并在运行,并且安装了 PEAR 模块,我就可以编写接收我所在地区的天气状况的 PHP 聊天机器人(bot) 了。

从连接开始

我将创建脚本的几个版本。每一个版本都会添加更多的函数。PHP 聊天机器人(bot)脚本的第一个版本如清单 2 所示。在该脚本中,我登录到 IRC 服务器并创建了一个对特殊类型的消息作出响应的类。该模块专门用于为 IRC 创建 聊天机器人(bot)。


清单 2. 聊天机器人(bot)第一个简单的版本

    <?php
    include_once('Net/SmartIRC.php');
   
    class weatherbot
    {
    function weather(&$irc, &$data)
    {
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    'Yeah, weather');
    }
    }
   
    $host = "localhost";
    $port = 6667;
    $nick = "weather";
    $chan = "#weather";
   
    $bot = &new weatherbot( );
    $irc = &new Net_SmartIRC( );
    $irc->setUseSockets( TRUE );
    $irc->registerActionhandler( SMARTIRC_TYPE_CHANNEL,
    '^weather', $bot, 'weather' );
    $irc->connect( $host, $port );
    $irc->login( $nick, 'Weather bot', 0, $nick );
    $irc->join( array( $chan ) );
    $irc->listen( );
    $irc->disconnect( );
    ?>
 



脚本中重要的部分是 registerActionhandler 方法,该方法连接到具有特殊动作字符串和方法的 bot 对象。^weather 字符串是一个正则表达式,如果该字符串与进入 IRC 信道的任何文本类型相匹配,那么将调用动作处理器。

脚本中其他重要的部分是 Weatherbot 类中的 weather 方法。该方法对天气请求作出响应,并且传回(在此时)“Yeah, weather”。(在本文的结尾部分,它将告诉您天气状况。)

要启动脚本,我使用下列命令在命令提示符下运行它:


    C:ircd> php ircbot.php
 



脚本注册到本地 IRC 服务器,并开始进行无限循环。

图 3 展示了注册到服务器的 weather 聊天机器人(bot)。同时也展示了我在文本窗口中输入 weather 并按 Enter 键。


图 3. 与 weather 聊天机器人(bot)进行交谈


Weather 聊天机器人(bot)接着能够以固定的字符串 Yeah, weather 作出响应。

这是一个好的开始。现在,如何获得天气状况呢?


获得天气状况

要获得天气状况,将使用 Weather Web 服务 PEAR 模块。清单 3 展示了该模块,我对该模块进行了修改以提供我所在地区的天气状况。


清单 3. 报告天气状况的 weather 聊天机器人(bot)

<?php
include_once('Net/SmartIRC.php');
include_once('Services/Weather.php');

$weather = new Services_Weather();
$wdc = $weather->service( "Weatherdotcom" );

class weatherbot
{
  function weather(&$irc, &$data)
  {
     global $wdc;
     $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
            'Yeah, weather');

     $fc = $wdc->getForecast( 94587, 1 );
     foreach( $fc['days'] as $day )
     {
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Condition: ".$day['day'][ 'condition' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "High: ".$day[ 'temperatureHigh' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Low: ".$day[ 'temperatureLow' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Wind: ".$day['day'][ 'wind' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Wind Degrees: ".$day['day'][ 'windDegrees' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Wind Direction: ".$day['day'][ 'windDirection' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Precipitation: ".$day['day'][ 'precipitation' ] );
       $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
          "Humidity: ".$day['day'][ 'humidity' ] );
     }
  }
}

$host = "localhost";
$port = 6667;
$nick = "weather";
$chan = "#weather";

$bot = &new weatherbot( );
$irc = &new Net_SmartIRC( );
$irc->setUseSockets( TRUE );
$irc->registerActionhandler( SMARTIRC_TYPE_CHANNEL,
  '^weather', $bot, 'weather' );
$irc->connect( $host, $port );
$irc->login( $nick, 'Weather bot', 0, $nick );
$irc->join( array( $chan ) );
$irc->listen( );
$irc->disconnect( );
?>
 



我所做的第一个更新是添加 include 指令以引用天气服务模块。然后创建了一个天气服务对象。在 weather 方法中,调用 getForecast 方法并请求给定邮政编码地区的天气预报 —— 在本例中,邮政编码是 94587,即 Union City, Calif 的邮政编码。

从那里,我得到第一天的天气信息,并通过 IRC 信道将天气结果以消息的形式发送出去。图 4 展示了产生的文本窗口。


图 4. 带有硬编码邮政编码的天气响应


但是我想您并不想要得到我 所在地区的天气信息。那么,如何得到您所在城市的天气信息呢?






 



得到您需要的天气信息

要得到与您相关的天气信息,需要解析请求的文本。这就意味着要对 weather 方法做一些小小的修改,如清单 4 所示。


清单 4. 新的 weather 方法

    class weatherbot
    {
    function weather(&$irc, &$data)
    {
    global $wdc;
   
    $zip = $data->messageex[1];
   
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Yeah, weather for $zip");
   
    $fc = $wdc->getForecast( $zip, 1 );
    foreach( $fc['days'] as $day )
    {
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Condition: ".$day['day'][ 'condition' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "High: ".$day[ 'temperatureHigh' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Low: ".$day[ 'temperatureLow' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Wind: ".$day['day'][ 'wind' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Wind Degrees: ".$day['day'][ 'windDegrees' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Wind Direction: ".$day['day'][ 'windDirection' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Precipitation: ".$day['day'][ 'precipitation' ] );
    $irc->message(SMARTIRC_TYPE_CHANNEL, $data->channel,
    "Humidity: ".$day['day'][ 'humidity' ] );
    }
    }
    }
 



IRC 模块巧妙地将用户输入的消息断开为单词,可以在 messageex 数组中以数组的方式引用这些单词。在本例中,第一个条目是邮政编码。

图 5 展示了如何使用具有邮政编码的天气请求。正如所看到的,我输入 19081,这是 Swarthmore, Pa.,Swarthmore College 所在地的邮政编码。


图 5. Swarthmore, Pa. 的天气情况


当然,我应该进行更多的错误检查,例如确保邮政编码是有效的。但是我将这些留给您自己来完成。






 

结束语

本文涵盖了连接 PHP 应用程序到 IRC 的基本内容。您可以使用该应用程序作为起点,并且添加自己的 PHP 类到代码中。然后您就可以通过 IRC 利用浏览器使用您的 Web 应用程序了。

我是让用户使用他们喜欢的交流方式的坚定的拥护者 —— 发送电子邮件消息或者是通过即时消息客户机。本文所提供的仅仅是在 PHP 应用程序中放入另一种类型的接口的一个例子。我鼓励在带有 PHP 代码的标准的 Web 范围之外进行思考。

另外,我鼓励您将自己的模块提供给 PEAR。最好是提供干净压缩的代码,这将有益于大家。
0
0
分享到:
评论

相关推荐

    line-bot-sdk-php-master.zip_9OO_bot

    总结来说,"line-bot-sdk-php-master.zip_9OO_bot" 提供的是一个用PHP实现的Line聊天机器人的SDK项目,开发者可以通过这个项目学习如何与Line API进行交互,创建具有各种功能的聊天Bot。虽然描述中的"today is a ...

    LINE-Bot-Starter-PHP.rar_bot_line_php

    为了帮助开发者构建与用户交互的聊天机器人,LINE 提供了一个名为 LINE Messaging API 的服务,允许开发者创建自己的 LINE Bot。在这个“LINE Bot Starter for PHP”项目中,我们将深入探讨如何使用 PHP 这种广泛...

    搭建好看QQ群机器人网站附源码.rar_MTQ_QQ机器人_qq群bot源码_q群机器人搭建_网站QQ机器人

    源码通常由Python、JavaScript或其他编程语言编写,通过调用腾讯提供的QQ群机器人API来实现与QQ服务器的交互。 在"QQ群机器人网站源码.rar"这个文件中,包含的应该是该机器人系统的前端和后端代码。前端部分可能...

    基于PHP的青团网机器人客服源码.zip

    PHP是一种广泛使用的服务器端脚本语言,尤其在构建动态网站和Web应用程序方面具有很高的实用性。在这个项目中,开发者可能利用PHP的灵活性和效率来实现一个能够自动响应用户查询、提供信息和支持的机器人客服系统。 ...

    chatbot-master_PHPAIML_

    7. **编程接口**:这个PHP库提供了一套API,让开发者能够轻松地在自己的应用程序中嵌入聊天机器人。通过调用这些接口,你可以接收用户的输入,发送到机器人,获取并显示机器人的回复。 8. **调试和日志**:为了优化...

    FrisAI:FrisAI是使用PHP制作的基于AI的聊天机器人

    在技术实现上,FrisAI可能采用了自然语言处理(NLP)和机器学习(ML)算法,这些技术是现代聊天机器人背后的关键。NLP使得机器人能够解析和理解人类的自然语言,而ML则让机器人通过学习和改进来提高其回答问题的能力...

    Amp-async-chatter-bot.zip

    【标题】"Amp-async-chatter-bot.zip"是一个基于AMP PHP框架的异步聊天机器人项目,它展示了如何在PHP环境中实现高效的并发处理和非阻塞I/O操作。AMP(Asynchronous & Multiplexed PHP)框架是专为构建高性能、低...

    LegalBotApp_news54m_robot_bot/api.php?content_legalbot_

    文件名"LegalBotApp"可能指的是整个应用程序的源代码,可能包含配置文件、模型、控制器、视图、数据库迁移以及其他支持文件。通过这个文件,开发者可以查看和理解整个应用的结构,包括如何处理请求,如何与数据库...

    bot-anti-captcha:可以绕过验证码PHP机器人

    【标题】:“bot-anti-captcha:绕过验证码的PHP机器人技术详解” 在这个项目中,“bot-anti-captcha”是一个专门用于PHP环境的工具,它能够帮助自动化过程绕过常见的验证码系统。验证码(CAPTCHA)通常被网站用作一...

    bot.php

    网络爬虫是自动抓取互联网信息的程序,而聊天机器人则是模拟人类对话的软件,通常应用于客户服务、在线助手等领域。在PHP中实现这些功能,开发者可能使用了诸如cURL库来发送HTTP请求,或者使用了像Guzzle这样的现代...

    qq-bot:php 实现的 webqq 接口

    这个项目旨在提供一种方式,使得自动化处理、消息发送和接收成为可能,从而实现简单的聊天机器人功能。下面将详细阐述该项目的核心知识点。 1. **WebQQ 接口**: WebQQ 是腾讯推出的一种网页版 QQ 服务,它通过 ...

    Ragnarok PHP Bot-开源

    这个开源项目为开发者提供了丰富的可能性,允许他们通过回调函数来构建和调整机器人的行为逻辑,从而创建出符合特定需求的交互式聊天机器人。 在【描述】中,我们了解到PHProbot的核心特性是其AI系统。这种基于回调...

    PHP IRC bot-开源

    【PHP IRC bot-开源】项目是一个使用PHP编程语言编写的互动聊天机器人,它专为集成到Internet Relay Chat(IRC)网络中设计。IRC是一种实时的通信协议,常用于在线聊天和协作。这个PHP IRC bot的开源特性意味着其源...

    机器人

    总的来说,这个压缩包可能包含了一个使用Node.js或PHP实现的Viber聊天机器人,涵盖了JavaScript编程、HTTP服务器构建、API交互和聊天机器人设计等多个IT知识点。为了进一步了解和使用这个项目,开发者需要熟悉上述...

    SlackBolt一个用于构建Slack应用程序的框架

    `SlackBolt` 是由 Slack 官方推出的一个用于构建 Slack 应用程序的框架,它简化了与 Slack API 的交互,使得开发者能够更快速、更容易地创建功能丰富的 Slack 应用。该框架基于 JavaScript,支持 Node.js 环境,特别...

    cryptotrader:这是一个用PHP编写的实验性交易机器人框架。 它可能包含错误,不应该花很多钱来信任

    的它有什么作用? 此coinbase-pro.php是coinbase-pro.php文件,该文件是用PHP编写的 API的简单... 使用php运行机器人或示例脚本机器人Bot 1:上升趋势冲浪者第一个bot是最简单的一个。 该机器人将以美元/欧元的价格购买

    PHP EL Bot-开源

    总结,PHP EL Bot 是一个以PHP实现的开源在线游戏机器人,它展示了PHP在游戏开发领域的应用,同时也为开发者提供了一个学习和合作的平台。无论你是想了解PHP编程、游戏机器人开发,还是想要参与到开源项目中,PHP EL...

    PHP - MSN Bot Framework-开源

    **PHP-MSN Bot Framework 开源项目详解** PHP-MSNBot是一个基于PHP...通过掌握PHP-MSNBot,开发者可以构建出功能丰富的聊天机器人,实现与全球MSNMessenger用户的互动,同时也为学习和实践PHP编程提供了有趣的平台。

    [其他类别]搜索引擎蜘蛛跟踪器(PHP)_bot.zip

    在互联网上,搜索引擎蜘蛛(也称为网络爬虫或机器人)是自动抓取网页并建立索引的程序,这些索引用于搜索引擎提供搜索结果。通过创建一个蜘蛛跟踪器,我们可以更好地理解搜索引擎如何与我们的网站互动,从而优化SEO...

Global site tag (gtag.js) - Google Analytics