写了一个微信公众平台 Python 开发包,支持模拟登陆,欢迎围观,求意见 >_< - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
doraemonext
V2EX    分享创造

写了一个微信公众平台 Python 开发包,支持模拟登陆,欢迎围观,求意见 >_<

  •  3
     
      doraemonext
    doraemonext 2014-08-23 17:03:22 +08:00 15341 次点击
    这是一个创建于 4125 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在给社团写微信的一个管理后台,本身是订阅号但运营的那伙人想要各种高级功能……今天总算把这个开发包写得差不多了,下一步开发也方便多了,分享出来,希望对大家有用

    项目地址: https://github.com/doraemonext/wechat-python-sdk (star一下也不错呢 >_<)

    文档地址: http://wechat-python-sdk.readthedocs.org/

    现在只是把基本功能写出来了,下一步会继续添加缓存,Session支持

    下面直接把 README 贴出来

    非官方微信公众平台 Python 开发包,包括官方接口和非官方接口。

    • 官方接口依据公众平台开发者文档编写,可以实现公众平台开发者文档中的所有内容,具体不列举,请查看 WechatBasic 文档;

    • 非官方接口采用模拟登陆的方式,可以实现更多高级功能,但也存在相应风险。尤其注意,本开发包不提供群发功能,此功能被微信公众平台明令禁止。

    目前提供的非官方接口功能有:

    • 主动对指定用户发送文本消息
    • 主动对指定用户发送图片消息
    • 主动对指定用户发送语音消息
    • 主动对指定用户发送视频消息
    • 获取指定用户的个人信息
    • 获取用户列表
    • 获取分组列表
    • 获取图文信息列表
    • 获取与指定用户的对话内容
    • 向指定用户发送图文消息(必须从图文库里选取消息ID传入)
    • 上传素材至素材库 (图片/语音/视频)
    • 向特定用户发送媒体文件 (图片/语音/视频)
    • 获取素材库文件列表
    • 获取用户头像
    • 获取新消息的数目
    • 获取最新一条消息
    • 获取消息列表
    • 根据消息ID获取图片消息内容
    • 根据消息ID获取语音消息内容
    • 根据消息ID获取视频消息内容

    请注意:本开发包并不打算提供一个独立的完整微信解决方案,我们更希望这个开发包可以非常融洽的在各个框架中进行集成并使用,对于HTTP请求及响应方面并不涉及,该开发包仅仅接受必要参数,提供各种微信操作的方法,并返回相应的可以响应微信服务器的数据(Response)或操作执行结果。

    第 1 条附言    2014-12-09 13:36:34 +08:00
    又做了一次比较大的更新,更新至 v0.5.0:

    * 新增了针对 Django 的上下文对话支持
    * 新增了非官方接口下的验证码登录及获取验证码功能
    * 新增了在素材库中创建图文消息功能
    * 修正了编码转换问题
    * 更正了 WechatBasic 中的解释说明链接
    * 更新文档,增加了一个快速上手示例
    * 增加了FAQ文档

    完全兼容上一版本,可以无压力直接升级。
    20 条回复    2014-12-09 13:34:38 +08:00
    whtsky
        1
    whtsky  
       2014-08-23 17:28:25 +08:00 via iPhone   1
    顺便给自己的「独立的完整微信解决方案」 WeRoBot 打个广告=。=
    代码: http://github.com/whtsky/WeRoBot (欢迎 Pull Request )
    文档: https://werobot.readthedocs.org/

    能和 Flask, Django 和 Tornado 比较好的整合,也可以独立运行。
    doraemonext
        2
    doraemonext  
    OP
       2014-08-23 17:33:25 +08:00
    @whtsky 官方接口里面的东西基本都是从你那偷的 >_<
    kookxiang
        3
    kookxiang  
       2014-08-23 19:10:41 +08:00
    收藏了,刚好缺主动消息这块的
    bcxx
        4
    bcxx  
       2014-08-23 19:20:25 +08:00
    api 可以简化一下吧,没必要把 check signature 这部分交出来让用户来做,太繁琐了。
    Aegwynn
        5
    Aegwynn  
       2014-08-23 19:27:59 +08:00
    我想问下,上传素材到微信服务器有效期只有三天的问题,怎么解决的?
    renzhn
        6
    renzhn  
       2014-08-23 19:29:27 +08:00
    "不提供群发功能,此功能被微信公众平台明令禁止。"
    咦,我用一个php版的自动上传素材,获取id,群发消息很久了。。微信号ahutapp
    doraemonext
        7
    doraemonext  
    OP
       2014-08-23 20:34:29 +08:00
    @Aegwynn 通过官方接口上传的素材有有效期限制,通过模拟登陆上传的素材都是永久的
    doraemonext
        8
    doraemonext  
    OP
       2014-08-23 20:35:48 +08:00
    @renzhn 只是说风险大而已 =。= 没有说一定会被封……这东西一般不都是看微信心情么……
    doraemonext
        9
    doraemonext  
    OP
       2014-08-23 20:37:17 +08:00
    @bcxx 这只是可选的,完全可以不做,主要是不想过多干涉HTTP请求处理这方面,对用户而言更灵活一些吧 =。=
    whtsky
        10
    whtsky  
       2014-08-23 20:48:44 +08:00 via iPhone   1
    @kookxiang 主动消息这块儿有官方版的 API 啊,就是有一定限制(好像是两天之内给你的微信公共号发过信息)
    https://werobot.readthedocs.org/en/latest/client.html
    kookxiang
        11
    kookxiang  
       2014-08-23 20:51:02 +08:00
    @whtsky 要刚加微信的才有效吧
    whtsky
        12
    whtsky  
       2014-08-23 21:02:43 +08:00 via iPhone
    @kookxiang 应该没有这个限制.
    doraemonext
        13
    doraemonext  
    OP
       2014-08-23 21:35:21 +08:00
    @kookxiang 其实这里非官方接口实现的这些功能大部分是为了订阅号的,如果本身就是认证的服务号,其实基本用不着模拟登陆的,直接用官方API的客服消息就可以主动了
    yakczh
        14
    yakczh  
       2014-08-23 21:39:53 +08:00
    这个可以每天群发吗?
    wangleineo
        15
    wangleineo  
       2014-08-23 21:48:38 +08:00
    原来模拟登录可以用Ajax做啊,我都用无头浏览器去做的..
    有几个问题请教:
    用ajax模拟登录不会要求验证码吗?
    不明白为什么不能群发,官网页面可以群发图文消息的呀。
    还有,你怎么知道这些url能返回json的?官网都是直接获取html的吧
    还是感觉非官方的接口很脆弱,说不定哪天就改了,上个月好像就改过。
    doraemonext
        16
    doraemonext  
    OP
       2014-08-23 22:09:51 +08:00
    @yakczh 下一个版本会添加模拟官网群发的API,这次写完的API还是有点少了……

    好像说的不能群发有点歧义……我指的是不会提供一个接口,可以直接对用户批量主动发送消息,这样应该就直接撞微信规定枪口上了……因为这样就能每天不限次数给用户发送消息了……(不过根据这里提供的API自己组合也就几句代码就能组合出来……自己组合好了>_<风险自负)
    doraemonext
        17
    doraemonext  
    OP
       2014-08-23 22:16:36 +08:00   1
    @wangleineo
    验证码目前还没出现过,不过如果出现验证码的话会抛出 LoginError 异常,捕获后多试几次什么的;或者手动登陆之后把 token 和 cookies 传入,定时保持活动,这样应该也算一种方法吧(没有验证,纯属YY)

    下一版本会添加 T_T 应该明天就好了,我也会把语言重新组织一下……这个群发有歧义了……

    直接拦截各种请求然后慢慢找就好了……另外还借鉴了 https://github.com/dodgepudding/wechat-php-sdk 上面的一些内容

    及时找到新的地址就好了,如果发现了哪个不能用了,fork改好之后请发个pull request或者直接提一个issue,会尽快更正过来发布新版本的 >_<
    fire5
        18
    fire5  
       2014-08-29 11:30:28 +08:00
    c386
    &bsp;   19
    c386  
       2014-10-17 11:21:11 +08:00
    @doraemonext 使用了一下非官方的接口群发消息,非常赞!!
    我这里还有一个小疑问想请教一下,如果是用官方接口来自动回复语音、视频,那么回复的midea_id必须是通过官方接口上传的素材才会有,而且三天后就删除。那我想要长期实现这些素材的自动回复,是不是应该写 如果midea_id存在, 则回复;else:上传素材,返回midea_id,再回复 这样呢?
    谢谢!
    doraemonext
        20
    doraemonext  
    OP
       2014-12-09 13:34:38 +08:00
    @c386 不好意思。。。才发现有回复。。。

    是这样的 =.=
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3617 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 00:49 PVG 08:49 LAX 16:49 JFK 19:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86