Board logo

标题: [转贴] VBS脚本通过飞信发送短信的实现代码 [打印本页]

作者: find    时间: 2012-1-22 18:00     标题: VBS脚本通过飞信发送短信的实现代码

无意中看到百度 VBS 贴吧里一个标题为《无私的奉献出我的用飞信免费发短信接口》的帖子。
光看标题就已经觉得很牛逼了,听说过可以用 PHP 发送短信(飞信),也使用过 Python 实现的 PyFetion 发送过短信(飞信)。我也看过对应的 PHP 和 Python 源码,实现起来还是比较复杂的,难道可以用 VBS 来实现?

看到代码后更觉得牛逼,竟然是使用 10086.cn (移动官网)上面的接口来实现的,飞信官方难道已经公布飞信接口了?若不是,难道是代码的作者自己发现的接口?那也太强大了!Google 了一下才发现,哦,都不是,而是 WAP 飞信。像我这种还在用着 2005 年生产的只能打电话发短信的手机的生活在石器时代的人,当然不知道 WAP 飞信的存在。我现在连短信都很少发,更不用说飞信了,我已经不记得上一次登陆飞信是什么时候。
  1. m = "xxxyyyyzzzz" '手机号码
  2. pass = "12345678" '登陆密码
  3. msg = "Hello world" '飞信内容
  4. Const online = 1 '在线
  5. Const busy = 2 '忙碌
  6. Const away = 3 '离开
  7. Const hidden = 4 '隐身
  8. Dim http
  9. Set http = CreateObject("Msxml2.XMLHTTP")
  10. http.open "POST", "http://f.10086.cn/im/login/inputpasssubmit1.action", False
  11. http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  12. http.send "m=" & m & "&pass=" & pass & "&loginstatus=" & hidden '隐身登陆
  13. wml = http.responseText
  14. If InStr(wml, "密码输入错误") Then
  15. WScript.Echo "对不起,密码输入错误,请重新输入!"
  16. WScript.Quit '登陆失败,退出程序
  17. End If
  18. http.open "POST", "http://f.10086.cn/im/user/sendMsgToMyselfs.action", False
  19. http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  20. http.send "msg=" & msg '给自己的手机发短信
  21. wml = http.responseText
  22. If InStr(wml, "发送成功") Then WScript.Echo "发送成功"
  23. http.open "GET", "http://f.10086.cn/im/index/logoutsubmit.action", False
  24. http.send '注销登陆
复制代码
这里只是一个示例,至于怎么给别人发短信和飞信,自己琢磨吧。本来想写一个像 PyFetion 那样的 VbsFetion 的,但是想想没什么意义,这样还不如直接装个飞信 PC 客户端,于是就不折腾的,喜欢折腾的同学可以继续。
上面的程序可以很轻松地改写成其他语言,C、C++、C#、Java、JavaScript、Python、Perl、Ruby、Lua、PHP……用这个接口可以做很多有趣的事情,不是吗?

VBS短信飞信发送类(VBSFetion)

本来想把昨天《用VBS发送短信(飞信)》里的 VBS 程序改写成 PHP 的,不过为了不重复造轮子,事先 Google 了一下,发现已经有人实现了,详见PHP飞信发送类(PHPFetion)v1.2发布。好吧,既然已经有人把它封装成 PHP 类了,我就封装一个 VBS 类吧。
  1. Class VBSFetion
  2. Private [$mobile], [$password], http
  3. 'Author: Demon
  4. 'Website: http://demon.tw
  5. 'Date: 2011/6/11
  6. '初始化事件
  7. Private Sub Class_Initialize
  8. Set http = CreateObject("Msxml2.XMLHTTP")
  9. End Sub
  10. '结束事件
  11. Private Sub Class_Terminate
  12. Call Logout()
  13. Set http = Nothing
  14. End Sub
  15. '初始化函数
  16. 'mobile 手机号
  17. 'password 登陆密码
  18. Public Function Init(mobile, password)
  19. [$mobile] = mobile
  20. [$password] = password
  21. str = Login()
  22. If InStr(str, "密码输入错误") Then
  23. Init = False
  24. Else
  25. Init = True
  26. End If
  27. End Function
  28. '发送飞信
  29. 'mobile 对方手机号
  30. 'message 发送内容
  31. Public Function SendMsg(mobile, message)
  32. If message = "" Then Exit Function
  33. If mobile = [$mobile] Then
  34. Send = ToMyself(message)
  35. Else
  36. uid = GetUid(mobile)
  37. If uid <> -1 Then Send = ToUid(uid, message, False)
  38. End If
  39. End Function
  40. '发送短信
  41. 'mobile 对方手机号
  42. ' 'message 发送内容
  43. Public Function SendShortMsg(mobile, message)
  44. If message = "" Then Exit Function
  45. If mobile = [$mobile] Then
  46. Send = ToMyself(message)
  47. Else
  48. uid = GetUid(mobile)
  49. If uid <> -1 Then Send = ToUid(uid, message, True)
  50. End If
  51. End Function
  52. '登陆
  53. Private Function Login()
  54. url = "/im/login/inputpasssubmit1.action"
  55. data = "m=" & [$mobile] & "&pass=" & [$password] & "&loginstatus=4"
  56. Login = Post(url, data)
  57. End Function
  58. '登出
  59. Private Function Logout()
  60. url = "/im/index/logoutsubmit.action"
  61. Logout = Post(url, "")
  62. End Function
  63. '给自己发飞信
  64. Private Function ToMyself(message)
  65. url = "/im/user/sendMsgToMyselfs.action"
  66. message = "msg=" & message
  67. ToMyself = Post(url, message)
  68. End Function
  69. '给好友发送飞信(短信)
  70. 'uid 飞信ID
  71. 'message 飞信(短信)内容
  72. 'isshort True为短信,False为飞信
  73. Private Function ToUid(uid, message, isshort)
  74. If isshort Then
  75. url = "/im/chat/sendShortMsg.action?touserid=" & uid
  76. data = "msg=" & message
  77. Else
  78. url = "/im/chat/sendMsg.action?touserid=" & uid
  79. data = "msg=" & message
  80. End If
  81. ToUid = Post(url, data)
  82. End Function
  83. '获取飞信ID
  84. 'mobile 手机号
  85. Private Function GetUid(mobile)
  86. url = "/im/index/searchOtherInfoList.action"
  87. data = "searchText=" & mobile
  88. str = Post(url, data)
  89. Set re = New RegExp
  90. re.Pattern = "/toinputMsg\.action\?touserid=(\d+)"
  91. If re.Test(str) Then
  92. Set ms = re.Execute(str)
  93. GetUid = ms.Item(0).Submatches(0)
  94. Else
  95. GetUid = -1
  96. End If
  97. End Function
  98. '发送HTTP POST请求
  99. Private Function Post(url, data)
  100. url = "http://f.10086.cn" & url
  101. http.open "POST", url, False
  102. http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  103. http.send data
  104. Post = http.responseText
  105. End Function
  106. End Class
  107. 示例程序:
  108. '初始对象
  109. Set fetion = New VBSFetion
  110. '登陆飞信
  111. If fetion.Init("11122223333", "123456") Then
  112. '发送飞信
  113. fetion.SendMsg "44455556666", "Hello world"
  114. '发送短信
  115. fetion.SendShortMsg "77788889999", "Hello world"
  116. End If
复制代码
转自:http://www.jb51.net/article/27910.htm
作者: Demon    时间: 2012-1-22 20:13

垃圾脚本之家

http://demon.tw/programming/vbs-fetion.html

http://demon.tw/my-work/vbsfetion.html
作者: lqh123108    时间: 2012-2-1 10:35

回复 1# find


    这里说有个类,是个什么东东?

怎么使用它,是把这个类保存什么文件,在什么位置,还是需要编译过呀
作者: daols    时间: 2012-2-3 06:21

有两处改了一下,否则不能获取返回值...
  1. '发送飞信
  2. 'mobile 对方手机号
  3. 'message 发送内容
  4. Public Function SendMsg(mobile, message)
  5. If message = "" Then Exit Function
  6. If mobile = [$mobile] Then
  7. SendMsg = ToMyself(message)
  8. Else
  9. uid = GetUid(mobile)
  10. If uid <> -1 Then SendMsg = ToUid(uid, message, False)
  11. End If
  12. End Function
  13. '发送短信
  14. 'mobile 对方手机号
  15. 'message 发送内容
  16. Public Function SendShortMsg(mobile, message)
  17. If message = "" Then Exit Function
  18. If mobile = [$mobile] Then
  19. SendShortMsg = ToMyself(message)
  20. Else
  21. uid = GetUid(mobile)
  22. If uid <> -1 Then SendShortMsg = ToUid(uid, message, True)
  23. End If
  24. End Function
复制代码
示例程序改成:
  1. '示例程序:
  2. '设置默认值
  3. myphone="$phone"
  4. mypwd="$pwd"
  5. yourphone=myphone
  6. msgtoyou="Hello Fetion"
  7. shortmsgtoyou=msgtoyou
  8. successmsg="发送成功"
  9. ' 初始对象
  10. Set fetion = New VBSFetion
  11. '登陆飞信
  12. If fetion.Init(myphone, mypwd) Then
  13. 'fetion.ToMyself msgtoyou ' 发给自己?
  14. ' 发送飞信
  15. SendMsg=fetion.SendMsg(yourphone, msgtoyou)
  16. ' 发送短信
  17. SendShortMsg=fetion.SendShortMsg(yourphone, shortmsgtoyou)
  18. '返回消息
  19. If InStr(SendMsg, successmsg) Then : msgbox "飞信发送成功" : else : msgbox SendMsg : end if
  20. If InStr(SendShortMsg, successmsg) Then : msgbox "短信发送成功" : else : msgbox SendShortMsg : end if
  21. else
  22. msgbox "飞信用户名或密码错误,登录失败退出."
  23. End If
复制代码

作者: Demon    时间: 2012-2-3 11:39

有两处改了一下,否则不能获取返回值...示例程序改成:
daols 发表于 2012-2-3 06:21


除了把缩进去掉,我没看出来你改了什么地方。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2