php机器人程序_如何将您PHP应用程序变成机器人

php机器人程序

是否曾经想过与您的一个PHP应用程序聊天? 您沉迷于即时消息吗? 如果是这样,我有适合您的模块吗? 该模块位于PHP应用程序和扩展存储库(PEAR)中,可让您PHP应用程序附加到Internet中继聊天(IRC)服务器并响应其消息。 本质上,PEAR模块将您PHP应用程序变成bot 。

机器人的价值在于您可以通过经常使用的机制与它进行通信:即时消息传递。 如果您一直在聊天室中,那么您现在不必离开他们来查找当地的天气情况。 本文向您展示了如何在PHP中创建一个IRC机器人,该机器人可以告诉您邮政编码的实时天气。

IRC基础

如果您不熟悉IRC系统,请阅读以下内容。 IRC系统具有两个组件:服务器和客户端。 服务器创建了几个虚拟通道,人们可以登录以彼此通信。 给频道提供熟悉的名称,这些名称应该映射到对话的主题或主题。

然后,IRC客户端软件通过指定主机名,端口号和请求的昵称将其连接到服务器。 客户端成功连接到服务器后,它可以加入任意数量的通道并开始发送和接收消息。 要发送消息,只需像在其他即时消息客户端中一样,在文本框中键入消息并按Enter键即可。 然后,客户端将该消息发送到服务器,服务器再将该消息广播到已加入该频道的所有其他客户端。 IRC客户端软件可用于每个操作系统以及便携式设备。

机器人的行为就像其他客户一样。 它们连接到服务器,然后加入一个或多个渠道。 一般来说,漫游器不会独立发送消息。 而是,他们在适合特定格式的频道中侦听来自用户的消息。 僵尸程序会发出响应这些特殊格式请求的消息。

本文中的漫游器会寻找以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服务器

创建IRC僵尸程序的下一步是设置该僵尸程序可以登录的服务器。 您可以让漫游器登录到公共服务器,但是我建议您首先在本地安装服务器以进行测试。

我选择为Windows运行“小心ircd”服务器。 (也可以在Linux上使用beware ircd服务器的版本。)我查看了一些服务器,这是最容易使用的服务器。 安装当心ircd服务器很容易,我将其放在C:\ ircd中。 在该目录中,我通过打开命令提示符并键入以下命令来运行服务器:

C:\ircd> bircd

注意:无需更改配置。

但是,您如何知道服务器正在运行? 要验证这一点,您需要安装IRC客户端。

安装IRC客户端

要测试本地服务器以及与机器人通信,您需要安装IRC客户端。 我选择为Windows安装流行的mIRC客户端。 (在撰写本文时,V6.16是最新版本。)您可以选择适合您的平台的客户端。

安装了mIRC客户端后,我从“ 开始”菜单中启动了mIRC应用程序。 然后,我使用Connect命令连接到localhost 。 我使用菜单中的join命令将其附加到#weather频道,如图1所示。

图1.从IRC客户端加入#weather频道
从IRC客户端加入#weather频道

加入频道后,将出现图2所示的窗口。 从这里,我可以与其他人或机器人聊天。

图2. #weather频道的聊天界面
#天气频道的聊天界面

现在,在本地运行服务器,启动IRC客户端并运行并且安装了PEAR模块的情况下,我可以编写PHP机器人来检索家乡的天气情况。

从连接开始

我将创建脚本的多个版本。 每个版本将添加更多功能。 清单2显示了PHP bot脚本的第一个版本。在此脚本中,我登录到IRC服务器并创建一个将响应特定类型消息的类。 该模块专门用于为IRC创建机器人。

清单2.该机器人的第一个简单版本
<?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方法。 此方法响应天气请求,并发送回(此时)“是的,天气”。 (到本文结尾,它将告诉您天气情况。)

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

C:\ircd> php ircbot.php

该脚本登录到本地IRC服务器,然后经历无限循环。

图3显示了天气bot登录到服务器。 它还显示了我在文本窗口中输入weather并按Enter

图3.与天气机器人对话
与天气机器人交谈

然后,天气机器人以固定的字符串“ Yeah, weather作出响应。

这是一个好的开始。 现在,你如何得到天气?

得到天气

要获取天气,请使用Weather Web服务PEAR模块。 清单3显示了该模块,我对其进行了修改,以提供家乡的天气情况。

清单3.报告天气的天气机器人
<?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。

从那里,我获得了第一天的天气信息,并通过IRC频道将天气结果作为消息发送出去。 图4显示了结果文本窗口。

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

但是我确定你不想要我家乡的天气情况。 那么,您如何获得所在城市的天气?

获取所需的天气信息

获取与您相关的天气信息需要解析请求文本。 这意味着对天气方法进行微小的更改,如清单4所示。

清单4.新的天气方法
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数组中作为数组引用的messageex 。 在这种情况下,第一项将是邮政编码。

图5显示了如何使用带有邮政编码的天气请求。 如您所见,我输入了19081 ,这是Swarthmore College的所在地宾夕法尼亚州Swarthmore的邮政编码。

图5.宾夕法尼亚州斯沃斯莫尔的天气
斯沃斯莫尔,宾夕法尼亚的天气。

当然,我应该包括更多的错误检查,以确保邮政编码有效。 但我会留给你。

外箱思考

本文介绍了将PHP应用程序连接到IRC的基础知识。 您可以将此应用程序作为起点,并将自己PHP类连接到代码。 然后,您可以将Web应用程序与浏览器一起使用,并通过IRC使用。

我坚决主张以用户喜欢的交流方式来吸引用户-发送电子邮件或通过即时消息客户端。 本文仅提供在PHP应用程序中放置另一种类型的接口的一个示例。 我鼓励您在标准Web框之外考虑PHP代码。

与此相关的是,我鼓励您为PEAR贡献自己的模块。 这是对干净封装的代码的很好的介绍,并且对社区有所帮助。


翻译自: https://www.ibm.com/developerworks/opensource/library/os-phpbot/index.html

php机器人程序

<?php namespace BotMan\BotMan; use React\Socket\Server; use BotMan\BotMan\Http\Curl; use React\EventLoop\LoopInterface; use BotMan\BotMan\Cache\ArrayCache; use BotMan\BotMan\Drivers\DriverManager; use BotMan\BotMan\Interfaces\CacheInterface; use Symfony\Component\HttpFoundation\Request; use BotMan\BotMan\Interfaces\StorageInterface; use BotMan\BotMan\Storages\Drivers\FileStorage; class BotManFactory {     private static $extensions = [];     /**      * @param $methodName      * @param $callable      */     public static function extend($methodName, $callable)     {         self::$extensions[$methodName] = $callable;     }聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序。“Eliza”和 “Parry”是早期非常著名的聊天机器人。它试图建立这样的程序:至少暂时性地让一个真正的人类认为他们正在和另一个人聊天。Chatterbots已应用于在线互动游戏Tinymuds。一个单独的玩家可以在等待其他“真实”的玩家时与一个chatterbot进行互动。目前至少有一个公司正在制造一种产品,这种产品让你建立一个chatterbot以便用来掌握相关市场或关于你网站的其它问题。不难想象两个chatterbots互相交谈甚至互相交换关于自身的信息,如此一来,他们的对话将会变得更为复杂。(看看人工智能就会知道这个想法如果实现了会引起怎样的惊慌)。当然,他们可以使用更多普通的聊天缩略词
环境要求 PHP >= 7.0 PHP fileinfo 拓展 储存文件需要用到 PHP gd 拓展 控制台显示二维码 PHP posix 拓展 控制台显示二维码(linux) PHP 系统命令 拓展 执行clear命令 PHP SimpleXML 拓展 解析XML 安装 请确保已经会使用composer! 运行微信账号的语言设置务必设置为简体中文!!否则可能出现未知的错误! 1、git git clone https://github.com/HanSon/vbot.git cd vbot composer install 2、composer composer require hanson/vbot 运行 正常运行 php example/index.php 带session运行 php example/index.php --session yoursession 关于session : 带session运行会自动寻找设定session指定的cookies,如不存在则新建一个文件夹位于 /tmp/session 中,当下次修改代码时再执行就会免扫码自动登录。 如果不设置,vbot会自动设置一个6位的字符的session值,下次登录也可以直接设定此值进行面扫码登录。 PS:运行后二维码将保存于设置的缓存目录,命名为qr.png,控制台也会显示二维码,扫描即可(linux用户请确保已经打开ANSI COLOR) 警告!执行前请先查看index.php的代码,注释掉你认为不需要的代码,避免对其他人好友造成困扰 请在terminal运行!请在terminal运行!请在terminal运行! 目录结构 vbot demo (vbot 当前在运行的代码,也欢迎大家提供自己的一些实战例子) example (较为初级的实例) src (源码) tmp (假设缓存目录设置在此) session hanson (设定值 php index.php --session hanson) 523eb1 (随机值) users 23534234345 (微信账号的UIN值) file (文件) gif (表情) jpg (图片) mp3 (语音) mp4 (视频) contact.json (联系人 debug模式下存在) group.json (群组 debug模式下存在) member.json (所有群的所有成员 debug模式下存在) official.json (公众号 debug模式下存在) special.json (特殊账号 debug模式下存在) message.json (消息) 体验 扫码后,验证输入“echo”即可自动加为好友并且拉入vbot群。 vbot并非24小时执行,有时会因为开发调试等原因暂停功能。如果碰巧遇到关闭情况,可加Q群 492548647 了解开放时间。执行后发送“拉我”即可自动邀请进群。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值