CSK.Blog--个人原创Weblog

« Autostereogram(立体画)的原理、观看以及制作截获网页客户端的IPCAM视频用于OpenCV等程序 »

飞信(Fetion)的Perl命令行版本

飞信我就不多介绍了,随着网上出现了libFetion后,各类第三方飞信客户端程序就纷纷涌现,对于飞信的协议分析资料也不少。不过一直比较遗憾的是用于命令行的客户端版本不多,目前只有基于PHP的实现,同时libFetion似乎不开源,无法基于它作开发。

其实纯命令行的实现有很多优势,比如可以写一个自动天气预报脚本,每天定时运行,采集到天气信息后就可以用命令行的飞信程序发送到手机了。

我原本打算用bash script实现一个飞信客户端,不过考虑到perl几乎每个linux发行版本都自带,且处理文本更加方便,所以这个周末就参照着网上一些PHP版的飞信实现,写了一个perl版本的飞信客户端脚本。同时因为之前从没有写过perl脚本也完全不会,所以也称趁这个机会速成一把。所谓实践出真知,写了这个脚本觉得自己的perl水平应该能算中等水平:-P

因为我写这个脚本主要就是为了发送短信用,所以功能很单纯,就是用飞信给一个手机号码发送指定的文本短信息。至于例如查询好友、加好友等复杂功能我没有考虑,各位可以发挥各自想象力,在以后的脚本基础上添加即可。本程序采用GPL作为许可证。

不明真相的截图

脚本的使用和要求:

按照飞信的协议要求,脚本中需要通过HTTP协议也要通过TCP socket发送SIPC文报。后者perl提供了POSIX一致的socket规范,前者我采用了curl命令,所以请确保自身系统中安装了合适的curl。对于win32,我没有做过测试,不过相信只要有相应的win32版程序,还是可以工作的。

如果要发送中文短信,请确保自己的shell环境是采用UTF8编码的。否则请用iconv自己转换。

要发送短信,请使用下面的命令:

perlfetion.pl <绑定飞信的手机号码> <飞信密码> <发送目标手机号码> <发送的文本>

这里要注意的是参数中所有手机号码都是应当绑定了飞信帐号的,且已经和发送手机建立了飞信好友关系。否则将发送失败。

如果发送成功,将有如下回应:

$ ./perlfetion.pl 138***** ***** 138***** "Hello World!"
Retrieving the config xml...
Retrieving the SSIAPP URL...
Retrieving the SIPC Address...
Trying to get the fetion number of the current account...
Connecting to the SIPC via TCP socket...
Login OK
Send SMS succeed

为了各位调试或者了解协议详情,本脚本支持dump模式,请修改脚本,在执行前调用函数:fetion_verbose();脚本会将所有通讯文报打印至stdout。

 

脚本代码:

http://www.csksoft.net/data/code/perlfetion.pl.txt

 

  • quote 1.bear
  • 配好curl和perl后 在windows下跑了一下 好像跑不起来
    代码中的curl_http_post函数中的$curl_cmd是不是有点问题呢
  • 7/28/2009 10:23:07 AM 回复该留言
  • quote 2.csk
  • Windows下的确没有测试过,$curl_cmd本身不可能有问题,
    你看看是不是把curl所在目录加到PATH环境变量了。
  • 7/28/2009 3:33:00 PM 回复该留言
  • quote 4.bear
  • 原来评论和回复显示在最右边。。。
    我想知道飞信协议的具体格式 好自己改写一个windows版的
  • 7/29/2009 11:28:01 AM 回复该留言
  • quote 5.jerry
  • $curl_cmd有问题在windows平台下,报错为:

    cannot retrieve the config xml... exit
    此时不应有 |。

    curl_http_post中有这段:
    $curl_cmd = "echo -n ".quotemeta(@_[1])."|".$curl_cmd." @_[0]";

    这个'|'在windows平台下有问题.去掉的话更出问题
  • 11/6/2009 9:49:26 AM 回复该留言
  • quote 6.csk
  • 你的具体测试环境是? 应该不是管道符的问题,而是echo命令的关系。这个需要有cygwin或者mysys等类posix子系统支持。
    Windows shell的echo不支持-n开关的。

    或者可以找类似的等价命令替换echo -n的作用,可以写个很简单的小程序,比如
    int main(int argc, char *argv[])
    {
    printf(argv[1]);
    for (int pos = 2; pos<argc; pos++)
    {
    printf(" %s", argv[pos]);
    }
    return 0;
    }
  • 11/6/2009 1:52:46 PM 回复该留言
  • quote 7.农夫三拳
  • 把SendSms改为SendCatSms可以发长短信.
    我现在遇到的一个问题是,给自己发没问题,给好友发就不行了.
    Login OK之后直接退出了...不知何故.
  • 12/14/2009 10:53:17 PM 回复该留言
  • quote 8.农夫三拳
  • 错误代码:
    SendSMS Response:
    SIP-C/2.0 488 Not Acceptable Here
    T: tel:1391032****
    I: 2
    Q: 1 M
  • 12/14/2009 11:03:52 PM 回复该留言
  • quote 9.
  • 有没有朋友发送成功的呢?
    我也是给自己发可以,给好友里的手机发就不行了
    Login OK之后直接退出了...不知何故.
  • 12/25/2009 4:09:08 PM 回复该留言
  • quote 10.roselone
  • 下载代码时显示链接无效……
    lz能否发一份给我学习一下?
  • 2/3/2010 12:11:02 AM 回复该留言
  • quote 15.农夫三拳
  • 如果用手机号,只能给自己发,换成飞信号,改动相关的一些代码,就可以给好友发了。
  • 2/23/2010 7:42:00 AM 回复该留言

发表评论:

注意:为了有效防止SPAM,任何含有http://字样的消息会被阻止发布同时,本站仅供技术交流,请不要讨论任何政治敏感话题或者低级趣味问题。

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)