V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nyfwan123
V2EX  ›  微信

如何寻找出微信官方的微信指数 API ?

  •  
  •   nyfwan123 · 2017-03-24 11:15:22 +08:00 · 2133 次点击
    这是一个创建于 2797 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微信指数的横空出世,立即就搅了整个互联网,很多人都在观察,很多对标产品也正在紧锣密鼓的开发中。既然要使用微信指数,相信很多人都希望可以获取到微信指数的官方 API 。现在,我们就来找一找微信指数的 API 。

    第一步,手机搜索微信指数,我们发现微信搜索的 BaseUri 是https://search.weixin.qq.com,但是,这个地址却不能发送到 Windows 客户端。所以我抓包找到了https://search.weixin.qq.com/cgi-bin/searchweb/clientjump?tag=wxindex

    第二步,在微信的 Windows 客户端访问https://search.weixin.qq.com/cgi-bin/searchweb/clientjump?tag=wxindex,就可以看到微信指数的搜索页面了。如果这时,你用默认浏览器访问该 URI ,就会发现返回了一段 JSON 字符串,告诉你参数无效。

    第三步,不要气馁,我们继续来。虽然微信指数的首页不能在浏览器中直接访问,但是我们却可以搜索某个关键词进入指数详情页面,这样就可以直接使用浏览器来访问了。

    第四步,现在我们得到了https://search.weixin.qq.com/cgi-bin/h5/wxindex/detail.html?q=%E5%A4%A9%E6%B4%A5#wechat_redirect这个网址。detail 页面既然已经展示使用 highcharts 的图表,那么数据一定是通过 Ajax 传入了 Json 数据,再进行渲染的。

    第五步,打开https://search.weixin.qq.com/cgi-bin/h5/wxindex/detail.html?q=%E5%A4%A9%E6%B4%A5#wechat_redirect的源代码,从 240 行开始,我们终于要发现线索了。

    baseUrl: "https://wximg.qq.com/mmsearch/h5/dist/",指明了 js 文件所在的路径,下面的两个key分别为20170101-mmsearch-wxindex-common.js20170101-mmsearch-wxindex-detail.min.js是我们寻找的关键。

    首先我们打开https://wximg.qq.com/mmsearch/h5/dist/wxindex/wxindex-common.js?v=2,密密麻麻都是压缩过的 js 代码。没事,我们只需要寻找关键部分,就是

    var e=encodeURIComponent(encodeURIComponent(window.location.href.replace(/#[\d\w\=\?.\&]+/,""))),i="//search.weixin.qq.com/cgi-bin/searchweb/getjsapiticket?sign_url="+e;
    

    首先我们来看声明的变量e,就是经过 URL 编码后的一个字符串,然后将它以keysign_url的 GET 方式访问search.weixin.qq.com/cgi-bin/searchweb/getjsapiticket,那么我们就来尝试一下。

    将第二步中的 URI 经过 URL 编码得到https%3a%2f%2fsearch.weixin.qq.com%2fcgi-bin%2fsearchweb%2fclientjump%3ftag%3dwxindex,然后把它附加在https://search.weixin.qq.com/cgi-bin/searchweb/getjsapiticket?sign_url=的后面,直接访问它。

    又得到了 JSON 的响应,其他的我们不用管,我们只需要找到data中的timestamp,它代表了 UNIX 时间戳的格式,这个格式我们后面需要用到。

    第六步,我们打开上一步中找到的第二个 js 文件https://wximg.qq.com/mmsearch/h5/dist/wxindex/detail.min.js?v=5(注意观察这个文件的名字,是不是和https://search.weixin.qq.com/cgi-bin/h5/wxindex/detail.html?q=微信#wechat_redirect 有些地方很相似呢?)。打开这个 js 后,发现这就是我们要找的文件,比如“该词条暂未被收录”这个目前只有微信指数搜索的空结果才会提示的Error信息,正是对应该文件的标识。

    我们还是来找关键部分,

    getWxIndexData:function(){var e=this,t=new Date;if(e.end_time=t.getTime()/1e3-86400,e.start_time=t.getTime()/1e3-7776e3,e.query){var a="https://search.weixin.qq.com/cgi-bin/searchweb/getwxindex",n={query:e.query,start_time:e.start_time,end_time:e.end_time};
    

    代码其实已经很明显了,getWxIndexData就是**“获取微信指数数据”的定义,变量 t 被当前时间赋值,e.start_timee.end_time被 t 的 getTime()方法的返回值做了进一步处理,说明这两个变量就是微信指数中的“ 7 天”、“ 30 天”、“ 90 天”**的日期范围起始值,变量 a 定义了 api 的地址及我们需要的三个参数:https://search.weixin.qq.com/cgi-bin/searchweb/getwxindex?query= [关键词] &start_time= [日期范围起始时间戳] &end_time= [日期范围截止时间戳]

    最后,我们来验证一下,通过时间戳工具,我们得到了当前的时间戳1490322890,那么7 天之前( 2017 年 3 月 24 日 10:35:22 )的时间戳就是1489718155,我们来搜索一下 [天津] 这个指数,访问 URI :https://search.weixin.qq.com/cgi-bin/searchweb/getwxindex?query=%E5%A4%A9%E6%B4%A5&start_time=1489718155&end_time=1490322890

    我们得到了 json 的响应,数据为"wxindex": "11666515.00,5237192.00,4685480.00,8226879.00,8329063.50,8431248.00,8431248.00,8431248.00",从手机端搜索微信指数并对比一下,以此验证。

    以上,完。

    宁大叔小怪兽

    第 1 条附言  ·  2017-03-24 15:07:49 +08:00
    上午发完,下午就封了,好快。
    暂时失效了各位。
    第 2 条附言  ·  2017-03-24 15:38:05 +08:00

    鉴权需要在Cookie中设置pgv_pvi=xxxxx; pgv_si=xxxxx; mmsearch_user_key=xxxxx; pass_ticket=xxxxx

    pass_ticket 不以搜索关键词或时间更改

    mmsearch_user_key 会发生变动

    更改后的响应返回

    {
      "errcode": 1001,
      "msg": "invalid entry",
      "retcode": 1
    }
    
    5 条回复    2017-03-24 13:54:40 +08:00
    gen900
        1
    gen900  
       2017-03-24 11:25:32 +08:00
    厉害了
    billytom
        2
    billytom  
       2017-03-24 11:53:23 +08:00
    这个调用 API 的方法会触碰微信 IP 查询过多机制吗?
    billytom
        3
    billytom  
       2017-03-24 11:58:10 +08:00
    不知道有没有 V2 的大神能把这个来做个 Alfred 的插件
    woorz
        4
    woorz  
       2017-03-24 13:48:41 +08:00
    qiayue
        5
    qiayue  
       2017-03-24 13:54:40 +08:00
    之前这个接口是没做权限验证的,直接浏览器打开就可以
    现在统一返回 invalid user ,也就是需要鉴权了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3638 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:39 · PVG 12:39 · LAX 20:39 · JFK 23:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.