[PerlChina] PerlChina Advent 09: Webqq::Client

2 views
Skip to first unread message

chenlin rao

unread,
Dec 9, 2014, 8:03:01 AM12/9/14
to perl...@googlegroups.com
=encoding utf8

=for advent_year 2014

=for advent_title Webqq::Client模块介绍

=for advent_author Perfi Wang


=head2 Webqq::Client 背景来源

最早的时候,加入了一个Python的群,看到群里有个QQ机器人可以自动帮大家查询天气

群里贴出来的url会自动去获取下html的 <title> 内容,感觉蛮不错的,就想着也搞一个玩一下

这个Python群的群主也很热心,搞了个开源的项目放到了github上:L<https://github.com/coldnight/twqq>

源码下载下来安装的过程很艰辛,因为一些语法特性要求必须python2.7以上版本并且依赖的pycurl包也非常难编译安装

折腾了很久总算也跑起来了,但毕竟不是Perl写的,不是很熟悉,用起来也觉得不爽

在github上搜索了下 "webqq",得到很多搜索结果,有各种语言的实现,但活跃的项目不多

尤其是基于Perl开发的项目少之又少,反而Python的倒一大堆,看不惯这种情况,决定自己亲自用Perl写一个

在这个过程中也了解到了,目前存在的各自版本的qq机器人都基本上是基于腾讯的webqq协议来实现的

因此要自己从头开发一个难度并不大,另外,自己有管理几个Perl的QQ群

群里经常会有一些新手不知道该去哪里找模块,去哪里查文档,讨论一些代码问题的时候

也总是不方便,因此也萌生了用Perl写一个智能化的QQ机器人,能够在群里协助大家学习Perl语言

例如在QQ群里发一个perldoc -f open,机器人就会自动把相关的文档贴出来,聊天过程中提到了某个模块的名字

机器人也会自动的把模块相关的介绍、作者、用法自动贴出来,很贴心有木有?

当然一个机器人能做的事情远远不止这些,Webqq::Client提供的只是一个客户端的框架,剩下的任凭你的想象力

=head2 原理说明

模块采用AnyEvent的异步框架,尽可能的减少依赖模块,以便于安装和使用,提供面向对象的使用方式

如果你对AnyEvent有一定了解,那么相信不需要花费太多时间就很容易掌握模块的使用方法,如果你并不了解AnyEvent

也没有关系,你要做的仅仅是三件事:

1、登录

2、设置感兴趣的回调函数,在回调函数中对消息进行处理

3、运行

=head2 模块用法简介

    use Webqq::Client;
    use Digest::MD5 qw(md5_hex);
    my $qq = 12345678;

    #你的qq密码请使用md5加密后再传递给Webqq::Client
    #我可不想被怀疑有盗号行为
    my $pwd = md5_hex('your password');

    #通过new来初始化一个客户端对象
    #debug=>1来打印debug信息方便调试
    my $client = Webqq::Client->new(debug=>0);

    #通过login进行登录
    $client->login( qq=> $qq, pwd => $pwd);

    #客户端加载ShowMsg插件,用于打印消息内容
    $client->load("ShowMsg");

    #登录成功后设置客户端的发送消息回调函数
    $client->on_send_message=sub{
        #当发送完消息后,传递给回调函数的是三个参数
        my $msg = shift;   #发送的原始消息
        my $is_success = shift; #发送消息状态,True为成功,False为失败
        my $status = shift; #发送消息状态,UTF8编码的中文,"发送成功" 或者 "发送失败"

        #客户端执行插件,这个插件的作用是直接打印消息到屏幕
        $client->call("ShowMsg",$msg);
    };

    #登录成功后设置客户端的接收消息回调函数
    $client->on_receive_message = sub{
        #当收到消息后,传递给回调函数的唯一参数是原始消息的一个hash引用
        my $msg = shift;

        #客户端执行插件,这个插件的作用是直接打印消息到屏幕
        $client->call("ShowMsg",$msg);

        #你可以对收到的消息进行任意其他的处理
        #你也可以使用Data::Dumper这样的模块来查看消息的结构,比如
        #use Data::Dumper;
        #print Dumper $msg;

        ...;
    };
    #客户端进入事件循环,正式开始运行
    $client->run();

更多使用方法和介绍请参见文档

=head2 关于回调函数

目前提供了几种回调函数,可以满足大多是使用场景,请参见模块的文档介绍


但有一点你需要注意,客户端是单线程的,你不应该在回调函数中长时间阻塞,这样会导致整个客户端阻塞,什么事都不做

=head2 关于插件

客户端提供了一个基本的插件管理的机制,来方便你编写和运行插件,我们举个具体的例子说明下什么是插件,怎么写一个插件

比如我想实现一个插件,作用就是当收到群消息的时候就回复一个hello world到这个群上

第一步:写一个插件模块

    package Webqq::Client::Plugin::HelloWorld;
    #模块中定义一个call函数
    sub call{
        #记住,call函数第一个参数永远是客户端对象
        my $client = shift;

        #这个插件还需要额外传入一个客户端收到的群消息才能进行后续的处理
        my $msg = shift;

        #我们只对群消息感兴趣
        return if $msg->{type} ne 'group_message';

        #使用客户端的reply_message()方法进行消息回复
        $client->reply_message($msg,"hello world");
    }
    1;

第二步:加载插件

    #使用load方法进行加载,会自动查找Webqq::Client::Plugin::HelloWorld模块
    $client->load("HelloWorld");

第三部:使用插件

    #使用call()方法调用插件
    $client->on_receieve_message = sub{
        my $msg = shift;
        $client->call("HelloWorld",$msg);
    };
    $client->run();


=head2 模块从哪里获取

目前模块已经发布到了github和cpan上



github更新会比较频繁,建议使用github随时保持和最新版本同步

=head2 补充

腾讯的新版本是smartqq,老版本是webqq,这里统一都称之为webqq,webqq功能本身受限并不能向PC端那样做很多事情

另外,模块还处于不断开发完善中,存在bug和很多不完善之处是必然的,有什么问题或想法欢迎跟作者反馈

如果你是新手,希望有一个一起学习交流Perl的地方,欢迎加入我所在的QQ群: PERL学习交流 群号:144539789

如果你是高手,又乐于助人,对新手有足够的耐心,也非常欢迎加入

=head2 作者

Perfi, E<lt>sjd...@163.comE<gt>

=cut


感谢灰灰的投稿,欢迎更多 Perler 参与活动。本文网页地址见: http://advent.perl-china.com/calendar/2014/09/

arrow...@gmail.com

unread,
Dec 9, 2014, 9:31:13 AM12/9/14
to perl...@googlegroups.com
讚!但是聽說 webqq近期要關閉,不知道還能用多長時間。

==============================================
9月30日消息,近日登录腾讯WebQQ的用户会看到“WebQQ告别会 相聚有时 后会无期”的公告页面。预示着WebQQ即将停止服务,但公 告页面并没有给出停止服务的具体时间,目前WebQQ及SmartQQ也仍然能正常使用。

据了解,WebQQ于2009年9月15日正式上线,是腾讯公司推出的使用网页方式上QQ的服务,特点是无需下载和安装QQ软件,只要能打 开 WebQQ的网站就可以登录QQ与好友保持联系。具有Web产品固有的便利性,同时在Web上最大限度的保持了客户端软件的操作习惯。去年9 月,WebQQ更名为SmartQQ全新发布,但仍保留了原WebQQ版本。

此外,腾讯“我的QQ中心”的“好友”功能已于2014年7月15日停止服务。据悉,此次WebQQ是继此之后的又一业务调整。

--
您收到此邮件是因为您订阅了Google网上论坛上的“PerlChina Mongers 讨论组”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+...@googlegroups.com
要发帖到此群组,请发送电子邮件至perl...@googlegroups.com
访问此群组:http://groups.google.com/group/perlchina
要查看更多选项,请访问https://groups.google.com/d/optout

chenlin rao

unread,
Dec 9, 2014, 10:39:17 AM12/9/14
to perl...@googlegroups.com
鹅厂应该是关闭webqq保留smartqq吧?完全放弃网页版不现实啊,连微信都有网页版。

arrow...@gmail.com

unread,
Dec 11, 2014, 6:15:17 AM12/11/14
to perl...@googlegroups.com
微信現在用的人很多啊,周圍好多人都用微信,感覺微信、QQ用的人一半一半吧。



On 2014年12月09日 23:39, chenlin rao wrote:
鹅厂应该是关闭webqq保留smartqq吧?完全放弃网页版不现实啊,连微信都有网页版。

在 2014年12月9日 下午10:31,arrow...@gmail.com <arrow...@gmail.com>写 道:
讚!但是聽說 webqq近期要關閉,不知道還能用多長時間。

==============================================
9月30日消息,近日登录腾讯WebQQ的用户会看到“WebQQ告别会 相聚有时 后会无期”的公告页面。预示着 WebQQ即将停止服务,但公 告页面并没有给出停止服务的具体时间,目前WebQQ及SmartQQ也仍然能正常使用。

据了解,WebQQ于2009年9月15日正式上线,是腾讯公司推出的使用网页方式上QQ的服务,特点是无需下载和安 装QQ软件,只要能打 开 WebQQ的网站就可以登录QQ与好友保持联系。具有Web产品固有的便利性,同时在Web上最大限度的保持了客户端软件的操作习惯。去年9 月,WebQQ更名为SmartQQ全新发布,但仍保留了原WebQQ版本。

此外,腾讯“我的QQ中心”的“好友”功能已于2014年7月15日停止服务。据悉,此次WebQQ是继此之后的又一 业务调整。



On 2014年12月09日 21:02, chenlin rao wrote:
=encoding utf8

=for advent_year 2014

=for advent_title Webqq::Client模块介绍

=for advent_author Perfi Wang


=head2 Webqq::Client 背景来源

最早的时候,加入了一个Python的群,看到群里有个QQ机器人可以自动帮大家查询天气

群里贴出来的url会自动去获取下html的 <title> 内容,感觉蛮不错的,就想着也搞一个玩一下

这个Python群的群主也很热心,搞了个开源的项目放到了github上:L<https://github.com/coldnight/twqq>

源码下载下来安装的过程很艰辛,因为一些语法特性要求必须python2.7以上版本并且依赖的 pycurl包也非常难编译安 装

折腾了很久总算也跑起来了,但毕竟不是Perl写的,不是很熟悉,用起来也觉得不爽

在github上搜索了下 "webqq",得到很多搜索结果,有各种语言的实现,但活跃的项目不多

尤其是基于Perl开发的项目少之又少,反而Python的倒一大堆,看不惯这种情况,决定自己 亲自用Perl写一个

在这个过程中也了解到了,目前存在的各自版本的qq机器人都基本上是基于腾讯的webqq协议来 实现的

因此要自己从头开发一个难度并不大,另外,自己有管理几个Perl的QQ群

群里经常会有一些新手不知道该去哪里找模块,去哪里查文档,讨论一些代码问题的时候

也总是不方便,因此也萌生了用Perl写一个智能化的QQ机器人,能够在群里协助大家学习 Perl语言

例如在QQ群里发一个perldoc -f open,机器人就会自动把相关的文档贴出来,聊天过程中提到了某个模块的名字

机器人也会自动的把模块相关的介绍、作者、用法自动贴出来,很贴心有木有?

当然一个机器人能做的事情远远不止这些,Webqq::Client提供的只是一个客户端的框 架,剩下的任凭你的想象力
但有一点你需要注意,客户端是单线程的,你不应该在回调函数中长时间阻塞,这样会导致整个客户端 阻塞,什么事都不做

=head2 关于插件

客户端提供了一个基本的插件管理的机制,来方便你编写和运行插件,我们举个具体的例子说明下什么 是插件,怎么写一个插件

arrow...@gmail.com

unread,
Dec 11, 2014, 6:16:52 AM12/11/14
to perl...@googlegroups.com
問下,Webqq::Client能不能接收圖片或文件?



On 2014年12月09日 23:39, chenlin rao wrote:
鹅厂应该是关闭webqq保留smartqq吧?完全放弃网页版不现实啊,连微信都有网页版。

在 2014年12月9日 下午10:31,arrow...@gmail.com <arrow...@gmail.com>写 道:
讚!但是聽說 webqq近期要關閉,不知道還能用多長時間。

==============================================
9月30日消息,近日登录腾讯WebQQ的用户会看到“WebQQ告别会 相聚有时 后会无期”的公告页面。预示着 WebQQ即将停止服务,但公 告页面并没有给出停止服务的具体时间,目前WebQQ及SmartQQ也仍然能正常使用。

据了解,WebQQ于2009年9月15日正式上线,是腾讯公司推出的使用网页方式上QQ的服务,特点是无需下载和安 装QQ软件,只要能打 开 WebQQ的网站就可以登录QQ与好友保持联系。具有Web产品固有的便利性,同时在Web上最大限度的保持了客户端软件的操作习惯。去年9 月,WebQQ更名为SmartQQ全新发布,但仍保留了原WebQQ版本。

此外,腾讯“我的QQ中心”的“好友”功能已于2014年7月15日停止服务。据悉,此次WebQQ是继此之后的又一 业务调整。



On 2014年12月09日 21:02, chenlin rao wrote:
=encoding utf8

=for advent_year 2014

=for advent_title Webqq::Client模块介绍

=for advent_author Perfi Wang


=head2 Webqq::Client 背景来源

最早的时候,加入了一个Python的群,看到群里有个QQ机器人可以自动帮大家查询天气

群里贴出来的url会自动去获取下html的 <title> 内容,感觉蛮不错的,就想着也搞一个玩一下

这个Python群的群主也很热心,搞了个开源的项目放到了github上:L<https://github.com/coldnight/twqq>

源码下载下来安装的过程很艰辛,因为一些语法特性要求必须python2.7以上版本并且依赖的 pycurl包也非常难编译安 装

折腾了很久总算也跑起来了,但毕竟不是Perl写的,不是很熟悉,用起来也觉得不爽

在github上搜索了下 "webqq",得到很多搜索结果,有各种语言的实现,但活跃的项目不多

尤其是基于Perl开发的项目少之又少,反而Python的倒一大堆,看不惯这种情况,决定自己 亲自用Perl写一个

在这个过程中也了解到了,目前存在的各自版本的qq机器人都基本上是基于腾讯的webqq协议来 实现的

因此要自己从头开发一个难度并不大,另外,自己有管理几个Perl的QQ群

群里经常会有一些新手不知道该去哪里找模块,去哪里查文档,讨论一些代码问题的时候

也总是不方便,因此也萌生了用Perl写一个智能化的QQ机器人,能够在群里协助大家学习 Perl语言

例如在QQ群里发一个perldoc -f open,机器人就会自动把相关的文档贴出来,聊天过程中提到了某个模块的名字

机器人也会自动的把模块相关的介绍、作者、用法自动贴出来,很贴心有木有?

当然一个机器人能做的事情远远不止这些,Webqq::Client提供的只是一个客户端的框 架,剩下的任凭你的想象力
但有一点你需要注意,客户端是单线程的,你不应该在回调函数中长时间阻塞,这样会导致整个客户端 阻塞,什么事都不做

=head2 关于插件

客户端提供了一个基本的插件管理的机制,来方便你编写和运行插件,我们举个具体的例子说明下什么 是插件,怎么写一个插件
腾讯的新版本是smartqq,老版本是webqq,这里统一都称之为webqq,webqq功 能本身受限并不能向PC端那样 做很多事情

另外,模块还处于不断开发完善中,存在bug和很多不完善之处是必然的,有什么问题或想法欢迎跟 作者反馈

如果你是新手,希望有一个一起学习交流Perl的地方,欢迎加入我所在的QQ群: PERL学习交流 群号:144539789

如果你是高手,又乐于助人,对新手有足够的耐心,也非常欢迎加入

=head2 作者

Perfi, E<lt>sjd...@163.comE<gt>

=cut


感谢灰灰的投稿,欢迎更多 Perler 参与活动。本文网页地址见: http://advent.perl-china.com/calendar/2014/09/
--
您收到此邮件是因为您订阅了Google网上论坛上的“PerlChina Mongers 讨论组”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+...@googlegroups.com
要发帖到此群组,请发送电子邮件至perl...@googlegroups.com
访问此群组:http://groups.google.com/group/perlchina
要查看更多选项,请访问https://groups.google.com/d/optout
--
您收到此邮件是因为您订阅了Google网上论坛上的“PerlChina Mongers 讨论组”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到perlchina+...@googlegroups.com
要发帖到此群组,请发送电子邮件至perl...@googlegroups.com
访问此群组:http://groups.google.com/group/perlchina
要查看更多选项,请访问https://groups.google.com/d/optout

galaxy2004

unread,
Dec 11, 2014, 7:56:56 AM12/11/14
to perlchina
 
搞个微信群还好啊,perl,
2014-12-11
galaxy2004

发送时间:2014-12-11 19:16
主题:Re: [PerlChina] PerlChina Advent 09: Webqq::Client
收件人:"perlchina"<perl...@googlegroups.com>
抄送:
Reply all
Reply to author
Forward
0 new messages