Browse Source

增加对小视频的支持

zhgcao 8 years ago
parent
commit
95d8b12209
2 changed files with 26 additions and 0 deletions
  1. 2 0
      README.md
  2. 24 0
      wxbot.py

+ 2 - 0
README.md

@@ -164,6 +164,7 @@ python test.py
 | 10 | 撤回消息 | 不可用 |
 | 11 | 空内容 | 空字符串 |
 | 12 | 红包 | 不可用 |
+| 13 | 小视频 | 字符串,视频数据的url,HTTP POST请求此url可以得到mp4文件格式的数据 |
 | 99 | 未知类型 | 不可用 |
 
 ### 4.4 群文本消息
@@ -202,6 +203,7 @@ python test.py
 | `get_head_img(id)` | 获取用户头像并保存到本地文件 ***img_[id].jpg*** ,`id` 为用户id(Web微信数据) |
 | `get_msg_img(msgid)` | 获取图像消息并保存到本地文件 ***img_[msgid].jpg*** , `msgid` 为消息id(Web微信数据) |
 | `get_voice(msgid)` | 获取语音消息并保存到本地文件 ***voice_[msgid].mp3*** , `msgid` 为消息id(Web微信数据) |
+| `get_video(msgid)` | 获取视频消息并保存到本地文件 ***video_[msgid].mp4*** , `msgid` 为消息id(Web微信数据) |
 | `get_contact_name(uid)` | 获取微信id对应的名称,返回一个可能包含 `remark_name` (备注名), `nickname` (昵称), `display_name` (群名称)的字典|
 | `send_msg_by_uid(word, dst)` | 向好友发送消息,`word` 为消息字符串,`dst` 为好友用户id(Web微信数据) |
 | `send_img_msg_by_uid(fpath, dst)` | 向好友发送图片消息,`fpath` 为本地图片文件路径,`dst` 为好友用户id(Web微信数据) |

+ 24 - 0
wxbot.py

@@ -641,6 +641,11 @@ class WXBot:
             msg_content['data'] = msg['Content']
             if self.DEBUG:
                 print '    [Unknown]'
+        elif mtype == 43:
+            msg_content['type'] = 13
+            msg_content['data'] = self.get_video_url(msg_id)
+            if self.DEBUG:
+                print '    %s[video] %s' % (msg_prefix, msg_content['data'])
         else:
             msg_content['type'] = 99
             msg_content['data'] = content
@@ -1416,6 +1421,25 @@ class WXBot:
         with open(os.path.join(self.temp_pwd,fn), 'wb') as f:
             f.write(data)
         return fn
+
+    def get_video_url(self, msgid):
+        return self.base_uri + '/webwxgetvideo?msgid=%s&skey=%s' % (msgid, self.skey)
+
+    def get_video(self, msgid):
+        """
+        获取视频消息,下载视频到本地
+        :param msgid: 视频消息id
+        :return: 保存的本地视频文件路径
+        """
+        url = self.base_uri + '/webwxgetvideo?msgid=%s&skey=%s' % (msgid, self.skey)
+        headers = {'Range': 'bytes=0-'}
+        r = self.session.get(url, headers=headers)
+        data = r.content
+        fn = 'video_' + msgid + '.mp4'
+        with open(os.path.join(self.temp_pwd,fn), 'wb') as f:
+            f.write(data)
+        return fn
+
     def set_remarkname(self,uid,remarkname):#设置联系人的备注名
         url = self.base_uri + '/webwxoplog?lang=zh_CN&pass_ticket=%s' \
                               % (self.pass_ticket)