怎样批量备份下载人人网相册的照片?

听闻人人网要关闭了。相比之前变成一座空城,这次可能是真的关闭。

如果停止服务的话,那曾经在上面留下的美好回忆,岂不全都随风而去?

比如那些挂过的科,比如那些花过的痴,比如那些晒过的娃。

得想个办法下载人人相册里的照片。

方法是这样的:

1.在书签栏创建一个新书签

2.在 URL 中填写如下代码

javascript:void(function(){var a = document.querySelectorAll('.photo-box a img');var r='';for(var i=0;i<a.length;i++){r += a[i].src.replace(/p\/.*?_/,'') + '<br>'};document.write(r);})()

然后保存。

3. 打开人人相册,向下滚动,待所有照片加载完成

4.点击刚才创建的书签,出现图片地址

5.将这些地址全选复制到迅雷或其他支持批量下载的工具中,开始下载

以上步骤,需要每个相册操作一次。虽然略显繁琐,但比一张一张下载方便多了。其实我还写了一个能自动完成下载的浏览器插件,如果你愿意赏几两奶粉,我就可以发给你啦。


动动手指关注简直哥

看看原文★聊聊数据

2016/9/15 posted in  数据

一个 QQ 群及微信群监听系统的实现方案

群是一种特殊形式的社区,有相同兴趣或需求的用户聚集在这个社区里,谈天说地。当然,他们也经常会讨论一些产品信息,分享体验,甚至拼团购买。因此,群里的讨论对于品牌来说相当重要,成为品牌的销售机会、售后服务平台,以及危机公关的风向标。

需求

批量聆听 QQ 群/微信群的聊天内容。并在此基础上实现分析、预警等功能。

原理

主要技术方案:用 QQ 账号登录聊天软件网页版,记录存储收到的消息,并做进一步处理。

Collect->Queue: for storage
Collect->Notify: for alert
Queue-->Storage: save messages
Storage->Application: do sth

流程

  • 准备 QQ 小号
  • 启动服务
  • 服务器端启动登录,发送二维码到邮箱
  • 用手QQ机扫描邮箱中收到的二维码,确认登录(二维码过期时间约为两分钟,如果没有完成,会收到一个新的二维码)
  • 程序开始记录消息,提供简单的在线报告

效果

用 ElasticSearch + Kibana 实现的在现报表

对比不同 QQ 群的数据

重点

  • 保证账号在线(下线通知/人工职守)
  • 消息处理(将监听到的消息作快速分析)
  • 监控预警(分析消息后得出结论,进行预警)
  • 在线报告(OEM 订制界面)

备选技术方案

  • 方案1: Mojo-Webqq(最强,服务器端部署) —> 独立实现
  • 方案2: notification center 采集(信息少,可能仅有消息内容)
  • 方案3: 群聊记录导出(实时性差,需要硬件配合)
  • 方案4: 浏览器插件
2016/9/15 posted in  数据

微信公众号文章数据 API 文档

请求地址

http://kolranking.com/account/:biz.json?page

方法

GET

参数

  • biz,公众号的唯一标识,可从公众号文章链接中获取
  • page,页码,非零整数,若不设置则默认为 1

请求示例

http://jianzhiim.com/account/MjM5MjAxNDM4MA==.json?page=6

返回示例

{
  status: "ok",
  page: "6",
  count: 84,
  continue: false,
  items: [{
      likeCount: 2640,
      mid: "2666130445",
      accountDes: "参与、沟通、记录时代。",
      rewardCount: 0,
      oriUrl: "https://mp.weixin.qq.com/s?__biz=MjM5OTU5MzcyMg==&amp;mid=2653165267&amp;idx=1&amp;sn=97b74151b15e7e6cf54c1065e5b87110&amp;scene=1&amp;srcid=0603wSzk3BaRthjQTZhFv7xy&amp;pass_ticket=t8uNkNNr9SJs6dZHLmCWyRF1ddsOi3HcZslXhMeDlE9uIaJofapA%2B83g84nsz3g3#rd",
      copyrightStat: "0",
      cover: "http://mmbiz.qpic.cn/mmbiz/xrFYciaHL08BbzpB5pP8PgGibDnsKFjibJO77Gvd5W7rkKZ3zDgibEeRLkSp146WxkicXb4UTGq7YmgF4L10Q059ePg/0?wx_fmt=jpeg",
      digest: "来源:中国教育报(ID:Zhongguojiaoyubao)  2016年高考马上就要开始了,今年高考有哪些",
      title: "禁止名校掐尖、全部录取结束延迟11天…2016高考新变化,你都知道吗?",
      author: "人民日报",
      commentCount: 13,
      url: "http://mp.weixin.qq.com/s?__biz=MjM5MjAxNDM4MA==&mid=2666130445&idx=1&sn=263d9b49043d839ae76196e506b898cf&3rd=MzA3MDU4NTYzMw==&scene=6#rd",
      idx: "1",
      biz: "MjM5MjAxNDM4MA==",
      user_name: "gh_363b924965e9",
      readCount: 100001,
      accountId: "rmrbwx",
      ct: "1464931060",
      updateTime: "2016-08-09T09:19:59.946Z",
      date: "2016-06-03",
      time: "13:17:40"
    },
    ...
  ]
}

返回字段说明

字段 说明
status 返回状态标识,若正常返回,则为 ok
page 页码
count 返回条目数,最大为 200
continue 是否有下一页,true 表示有,false 表示无
items 条目列表
accountId 公众号的微信号
author 公众号名称
accountDes 公众号简介(功能说明)
user_name 公众号原始 id
biz 公众号标识
mid 文章所在消息编号
idx 文章在当次推送中的位置,1 表示头条
title 文章标题
digest 文章摘要
oriUrl 阅读原文链接,若无原文链接则为空
copyrightStat 原创标识,1 表示原创,2表示转载,0 表示未标明
cover 头图地址
url 文章链接
readCount 阅读数,100001 表示 10万+
likeCount 点赞数,100001 表示 10万+
commentCount 评论数(留言数)
rewardCount 打赏数
ct 文章发布时刻的 UNIX 时间戳
date 文章发布日期(东 8 区)
time 文章发布时间
updateTime 数据更新时间

其他说明

此接口仅返回已经成功跑数的文章结果,若结果为空,需要先回溯跑数(先跑数,后请求)。

跑数周期

  • 开始服务后大约三天内,简直数据平台将对所提交监测公众号进行一次完整回溯;
  • 此后,会实时监测公众号的新文章,并在新文章发布大约 1 小时后采集一次阅读数、点赞数、评论数和打赏数;
  • 每周固定时段会再统一进行一次回溯以查看相对的最终结果;
  • 若需要更频繁的数据更新,需要单独提需求,按量付费

安全认证

若从后端请求,需提供请求数据的 IP 地址;若前端请求,也可提供安全域名。两种方式互斥,只能选一种。

2016/9/15 posted in  数据

以微信和 QQ 为例,说说怎样抓取 APP 内数据

许多产品都在转战移动互联网平台,甚至其中一些产品没有 Web 版只有移动客户端,那么怎样获取 APP 中的数据呢?

需要清楚的是,并不是所有的 APP 的数据都能获取,这取决于 APP 与服务端的数据传输是否加密。这一点上,美国的应用在安全性上通常做得比较好,大多采用加密传输,而国内很多初创公司的产品,或者在技术上或者在资金上都不太重视,所以很多数据都可以获得。

概念

工具

  • Chrome 开发者工具
  • cURL
  • Postman
  • Charles/TcpDump/WireShark/Fidder
  • Surge/Replica
软件 平台 功能 特色
Chrome 开发者工具 PC 版 Chrome 监听 监听当前页面的网络请求与返回
Chrome 流量工具 PC 版 Chrome 监听 监听 Chrome 全局的网络请求
Charles PC 监听 简明易懂的抓包工具,可设置代理监听移动端
Surge iOS + Mac 监听 代理 + 抓包
Replica iOS 监听 Surge 作者出品,据说更专业
cURL 命令行 请求 在命令行发起网络请求,自由灵活,支持很多参数
Postman PC 请求 可视化发起网络请求,诸多人肉增效

怎样快速发起网络请求?

  • GET 请求,直接在浏览器里打开即可
  • 其他请求,使用 Postman 或 cURL
  • 有一些软件(如 Chorme 等)支持重复请求(Replay)

案例一:查看和重复微信文章统计数据请求

通过这个案例,熟悉使用 Chrome 开发者工具查看网络请求与返回内容的基本方法,了解 JSON 数据格式,练习使用 cURL 和 Postman 发起网络请求。

步骤:

  1. 安装简直数据肋手
  2. 阅读使用文档后,在要求的客户端中点击微信文章链接,打开页面
  3. 在 Chrome 开发者工具中查看网络请求
  4. 分析 getappmsgext 和 appmsg_comment 的返回结果
  5. 尝试 Replay
  6. 复制 cURL 请求命令,在命令行中发起请求
  7. 在 Postman 中发起请求

案例二:微信文章变量分析

以下是简直数据助手的一部分核心代码,演示了请求阅读点赞数接口的使用方法。

  // 以 ext 方式获取阅读点赞数                                                     
  var appmsgextUrl = 'https://mp.weixin.qq.com/mp/getappmsgext?__biz=' + a.biz + '&appmsg_type=' + a.appmsg_type + '&mid=' + a.mid + '&sn=' + a.sn + '&idx=' + a.idx + '&scene=' + a.scene + '&title=' + encodeURIComponent(a.title) + '&ct=' + a.ct + '&devicetype=' + a.devicetype + '&version=&f=json&r=0.41129520173508016&is_need_ad=1&comment_id=' + a.comment_id + '&is_need_reward=1&both_ad=1&reward_uin_count=54&uin=' + a.uin + '&key=' + a.key + '&pass_ticket=' + a.pass_ticket + '&wxtoken=' + a.wxtoken + '&devicetype=' + a.devicetype +       '&clientversion=11020201&x5=1'; 
                                                                                   
  var exthr = createXmlHttpRequest();                                              
  exthr.open('POST', appmsgextUrl, false);                                         
  exthr.setRequestHeader('Content-Type', 'application/json');                      
  var param = 'is_only_read=1';                                                    
  exthr.send(param);                                                               
                                                                                   
  var ext = JSON.parse(exthr.response);                                            
                                                                                   
  a.appmsg_ext = ext;
  

微信文章相关的变量,可以打开任一篇微信文章,查看源码。

案例三:爬 QQ 号信息

通过这个案例,熟悉发现和爬取数据的基本方法,并了解将其程序化的基本思路。

我们发现有一个页面,可以查看 QQ 号对应的个人信息。

http://ti.qq.com/qcard/index.html?sid=AcV5FHA5WQN7czGam8HWHeII&qq=22294&appid=537045799&version=iphone-6.3.0.440&type=1

使用 Chrome 开发者工具查看网络请求,发现有一个接口可以查询 QQ 号的信息:

右键 more_profile_card,点击 Replay,可以重复请求。

右键 more_profile_card,点击 copy as cURL,可以到终端里执行。

然后,我们把它程序化:

#!/bin/sh
for i in {10000..10010}
do 
  echo "QQ:"$i;
  curl "http://ti.qq.com/cgi-bin/more_profile_card/more_profile_card" -H "Pragma: no-cache" -H "Cookie: pvid=6468515432; _ga=GA1.2.1415664572.1453970790; ssuid=5381432944; _gscu_661903259=57075059n4szku18; __v3_c_review_11558=0; __v3_c_last_11558=1461080483833; __v3_c_visitor=1460012604265105; uid=144512100; sd_userid=33861463623562904; sd_cookie_crttime=1463623562904; luin=o0364701349; lskey=00010000b9667beb99907d1fd667658c983286fd4eb44260f7571f5c19526529d0220c42ef609921ab696a7d; verifysession=h02sOmD5hhaRfNHRFodTDO0XF5dIpRP8cVttaYqrJ2At8m5op-iF4Evhpz40aU8QO4MzuugdL7AOPLsDEB3ElgP4gAUHamtKFu0; FTN5K=5f4db08b; ptui_loginuin=icewent@gmail.com; ptcz=fd444fcc896b8eedfdbc6ae892dba1ff32affc8e8b0c2e44787a10b317e61d0e; qm_username=364701349; qm_sid=654d042436406a54074fe297c11ee670,qcGlEZzlMZEJPUjc3dDIycDd4ZWM3eGNBbEFNLThzTml1YThSS0oqWVdkOF8.; pgv_info=ssid=s6883196480; pgv_pvid=7242657295; o_cookie=364701349; ptisp=cnc; RK=hFHTzgfDZg; ptwebqq=a70145fde22c29382f1641a1444a44ae0e74f7b0b4bc88a804e7f28ea02c7c57; pt2gguin=o0364701349; uin=o0364701349; skey=@tQgafwdBK" -H "Origin: http://ti.qq.com" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4" -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: */*" -H "Cache-Control: no-cache" -H "Referer: http://ti.qq.com/qcard/index.html?sid=AcV5FHA5WQN7czGam8HWHeII&qq=${i}&appid=537045799&version=iphone-6.3.0.440&type=1" -H "Proxy-Connection: keep-alive" --data "_q=${i}&bkn=603276416&src=mobile" --compressed | json_reformat
done
  1. 复制以上代码(需要更改为最新 Header),保存为 qq.sh
  2. 执行 chmod +x qq.sh
  3. 执行 ./down.sh
  4. 查看输出
QQ:22294
{
    "ec": 0,
    "profile": [
        {
            "age": 0,
            "birthday": {
                "day": 0,
                "month": 0,
                "year": 0
            },
            "college": "海南师范大学",
            "company": "",
            "constellation": 0,
            "email": "",
            "gender": 255,
            "hometown_area": "",
            "hometown_city": "阿德拉尔",
            "hometown_country": "阿尔及利亚",
            "hometown_state": "",
            "location_area": "",
            "location_city": "",
            "location_country": "",
            "location_state": "",
            "nick": "22294",
            "occupation": 5,
            "personal": ""
        }
    ]
}

题外:试试 100001 到 100010,这些可都是腾讯权贵的 QQ 号。

2016/9/15 posted in  数据

一些视频直播平台的数据接口

2016/9/15 posted in  数据

提高D3js力导向图加载速度

D3力导向图

过去一段时间曾两次使用了 D3 力导向图来描绘族群关系。

http://bl.ocks.org/mbostock/1062288

第一次用的时候不求甚解,交差了事。当时点也不多,很顺利完成了任务。这一次确不同,每个图里要渲染的有成千上万个点,每次渲染都死慢死慢,一大堆点动来动去,动半天才稳定下来,这一晃几分钟过去了。

阅读了一下官方文档 ,发现问题出来 tick 上。

force.start() 后,有一个计时器不停地触发 tick 直到所有节点最终受力平衡稳定下来。

可以理解为,有个计时器不停在打点,每打一次点需要触发一次 tick() 里的动作。而 tick() 的默认动作是重绘所有节点和连线位置。因为图形渲染需要时间长,渲染的次数又多,所以需要等很长时间。

function tick() {
  link.attr("x1", function(d) { return d.source.x; })
      .attr("y1", function(d) { return d.source.y; })
      .attr("x2", function(d) { return d.target.x; })
      .attr("y2", function(d) { return d.target.y; });

  node.attr("cx", function(d) { return d.x; })
      .attr("cy", function(d) { return d.y; });
}

怎样加快出图的速度呢?或者说,能不能不看中间复杂的变化过程,只看最终稳定的结果?

从官方文档里查到 alpha 参数。这个值最开始是 1,随着图形趋于稳定,它也会逐渐趋近 0。

force.alpha([value])

Gets or sets the force layout's cooling parameter, alpha. If value is specified, sets alpha to the specified value and returns the force layout. If value is greater than zero, this method also restarts the force layout if it is not already running, dispatching a "start" event and enabling the tick timer. If value is nonpositive, and the force layout is running, this method stops the force layout on the next tick and dispatches an "end" event. If value is not specified, this
method returns the current alpha value.

于是,对原来的代码稍作修改:

force.on("tick", function () {

    if(force.alpha()<=0.05){  // 足够稳定时,才渲染一次

      link.attr("x1", function (d) { return d.source.x; })
          .attr("y1", function (d) { return d.source.y; })
          .attr("x2", function (d) { return d.target.x; })
          .attr("y2", function (d) { return d.target.y; });
      node.attr("cx", function (d) { return d.x; })
          .attr("cy", function (d) { return d.y; });

      force.stop(); // 渲染完成后立即停止刷新
    }
});

这样修改之后,一个上万节点的图,通常在几秒内就可以绘制完成了。比如出这么个图,几秒钟就搞定了。

2016/9/15 posted in  数据

提取微信公众号文章中的信息

背景

早些时候,微信公布已经有了 800 万公众号。有人推测,现在这个数字已经超过了 1000 万。

从一些途径了解到,所有公众号中活跃(持续发文章)的有差不多 100 万。按每个号平均每天发 1 篇文章频率来推测,每天在微信公众平台上大约能生成上百万的文章。

不仅文章数量巨大,在文章的形式上也是花样翻新。从最早的图文、视频,到后来支持投票,到再后来支持音乐,再到后来支持语音,加上各种第三方内容生成工具的帮助,微信图文信息的内容的形式不可谓不丰富。

那么问题来了,能不能分析一篇文章中包含哪些内容呢?

微信文章里有哪些有用信息?

比如,文章的标题、作者、发布时间、原文链接等。进一步,其中包含哪些多媒体信息?比如图片、音乐、视频。再进一步,其中包含哪些互动信息?比如投票。

梳理一下,一篇微信图文的信息大致包含以下几块:

信息分类 信息内容
文章基础属性 链接、标题、摘要、发布时间、消息编号、是否删除等
文章版权属性 公众号、作者,是否原创,引用来源等
文章多媒体信息 图片、音乐、视频、语音等
文章互动信息 投票、打赏、评论等
文章统计信息 阅读、点赞等

关于这些信息,我们可以在微信公众号后台的编辑器中看到它们,第一排除全屏外的最右边几个按钮是分别是视频、图片、投票、音乐、语音和卡券。

再问一次,能不能分析一篇文章中包含哪些内容呢?

答案是能。最近做了一个微信文章分析接口,各位可以试试。

接口

1.Method

POST

2.URL

http://wt.socialmaster.cn/article/analyze

注:接口地址可能更新,可从 icewent.com 获取最新接口地址。

3.Request

{ "url": "http://mp.weixin.qq.com/s?__biz=MjM5MjEwNTA2MA==&mid=207801637&idx=1&sn=2946f11f6fdd7858aab0d8eaa0884c03&3rd=MzA3MDU4NTYzMw==&scene=6#rd" }

注:请求 1 个微信文章 URL,只支持 1 个。

可以使用 curl 工具:

curl -X POST -d '{"url": "http://mp.weixin.qq.com/s?__biz=MjM5MjEwNTA2MA==&mid=207801637&idx=1&sn=2946f11f6fdd7858aab0d8eaa0884c03&3rd=MzA3MDU4NTYzMw==&scene=6#rd"}' http://lab.socialmaster.cn/article/analyze --header "Content-Type:application/json"

4.Response

一级字段 二级字段 说明
url 文章链接
biz 公众号唯一标识
mid 推送消息编号
idx 文章在推送消息中的位置,1-8
title 文章标题
author 文章作者(发布者手填,可能为空
digest 文摘摘要(发布者手填)
cover 文章头图
oriUrl 原文链接
cDate 文章发布日期
cTime 文章发布时间
uTime 更新时间
musicCount 音乐数量
music 音乐列表
musicid QQ音乐的歌曲ID
mid QQ音乐的歌曲mid
albumurl 专辑封面
audiourl 歌曲资源地址
music_name 歌曲名
commentid -
singer 歌手名
src 歌曲模板
withVoice 是否包含语音
voiceId 语音ID
voteSrc 语音链接
photoCount 图片数量
photo 图片列表
isOriginal 是否原创
origin 原创公众号
withVote 是否包含投票
voteId 投票ID
voteSrc 投票链接(在微信里可以打开)
withVideo 是否包含视频
videoCount 视频数量
video 视频列表
{
    "url": "http://mp.weixin.qq.com/s?__biz=MjM5MjEwNTA2MA==&mid=207801637&idx=1&sn=2946f11f6fdd7858aab0d8eaa0884c03&3rd=MzA3MDU4NTYzMw==&scene=6#rd",
    "biz": "MjM5MjEwNTA2MA==",
    "mid": "207801637",
    "idx": "1",
    "title": "我在每年6月,都会很想你——beyond乐队",
    "author": "精美屋",
    "digest": "精美屋 √ 国内顶尖创意设计与时尚装修杂志☀ 我想有个家,家里的一砖一瓦都是精美的样子!看过的请深思,没看",
    "cover": "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlor9LplMhFyZkkOZQZGNq5liaZnmPb6WWCt7Waiag10icB7tXjOhnIlQQA/0?wx_fmt=jpeg",
    "oriUrl": null,
    "cDate": "2015-06-10",
    "cTime": "17:30:00",
    "uTime": "2015-06-29 13:24:10",
    "musicCount": 6,
    "music": [
        {
            "musicid": "1319248",
            "mid": "004Gyue33FERTT",
            "qqmusicurl": "http://y.qq.com/#type=song&mid=004Gyue33FERTT",
            "albumurl": "http://i.gtimg.cn/music/photo/mid_album_300/C/s/000eOgmK1fN8Cs.jpg",
            "audiourl": "http://ws.stream.qqmusic.qq.com/1319248.m4a?fromtag=46",
            "music_name": "真的爱你",
            "commentid": "1441883979",
            "singer": "BEYOND - Beyond IV",
            "src": "https://mp.weixin.qq.com/cgi-bin/readtemplate?t=tmpl/qqmusic_tmpl&singer=BEYOND%20-%20Beyond%20IV&music_name=%E7%9C%9F%E7%9A%84%E7%88%B1%E4%BD%A0"
        },
        {
            "musicid": "4892909",
            "mid": "000ZboGd3LOhQG",
            "qqmusicurl": "http://y.qq.com/#type=song&mid=000ZboGd3LOhQG",
            "albumurl": "http://i.gtimg.cn/music/photo/mid_album_300/l/i/0018w69W0Thali.jpg",
            "audiourl": "http://ws.stream.qqmusic.qq.com/4892909.m4a?fromtag=46",
            "music_name": "不再犹豫",
            "commentid": "2136100482",
            "singer": "BEYOND - Recognition",
            "src": "https://mp.weixin.qq.com/cgi-bin/readtemplate?t=tmpl/qqmusic_tmpl&singer=BEYOND%20-%20Recognition&music_name=%E4%B8%8D%E5%86%8D%E7%8A%B9%E8%B1%AB"
        },
        {
            "musicid": "3588341",
            "mid": "001M0E9Z30ixjI",
            "qqmusicurl": "http://y.qq.com/#type=song&mid=001M0E9Z30ixjI",
            "albumurl": "http://i.gtimg.cn/music/photo/mid_album_300/3/P/000DWELJ4Y7U3P.jpg",
            "audiourl": "http://ws.stream.qqmusic.qq.com/3588341.m4a?fromtag=46",
            "music_name": "灰色轨迹",
            "commentid": "1381874474",
            "singer": "BEYOND - 黄家驹原作精选集",
            "src": "https://mp.weixin.qq.com/cgi-bin/readtemplate?t=tmpl/qqmusic_tmpl&singer=BEYOND%20-%20%E9%BB%84%E5%AE%B6%E9%A9%B9%E5%8E%9F%E4%BD%9C%E7%B2%BE%E9%80%89%E9%9B%86&music_name=%E7%81%B0%E8%89%B2%E8%BD%A8%E8%BF%B9"
        },
        {
            "musicid": "4833285",
            "mid": "001fhSpB0P7buZ",
            "qqmusicurl": "http://y.qq.com/#type=song&mid=001fhSpB0P7buZ",
            "albumurl": "http://i.gtimg.cn/music/photo/mid_album_300/8/n/00449cf44ccf8n.jpg",
            "audiourl": "http://ws.stream.qqmusic.qq.com/4833285.m4a?fromtag=46",
            "music_name": "海阔天空",
            "commentid": "3651938790",
            "singer": "BEYOND - Words & Music Final Live With 家驹",
            "src": "https://mp.weixin.qq.com/cgi-bin/readtemplate?t=tmpl/qqmusic_tmpl&singer=BEYOND%20-%20Words%20%26amp%3B%20Music%20Final%20Live%20With%20%E5%AE%B6%E9%A9%B9&music_name=%E6%B5%B7%E9%98%94%E5%A4%A9%E7%A9%BA"
        },
        {
            "musicid": "7168586",
            "mid": "002G0sJY2wThyx",
            "qqmusicurl": "http://y.qq.com/#type=song&mid=002G0sJY2wThyx",
            "albumurl": "http://i.gtimg.cn/music/photo/mid_album_300/k/s/000cFPKx3ZGzks.jpg",
            "audiourl": "http://ws.stream.qqmusic.qq.com/7168586.m4a?fromtag=46",
            "music_name": "喜欢你",
            "commentid": "979766009",
            "singer": "G.E.M. 邓紫棋 - 喜欢你",
            "src": "https://mp.weixin.qq.com/cgi-bin/readtemplate?t=tmpl/qqmusic_tmpl&singer=G.E.M.%20%E9%82%93%E7%B4%AB%E6%A3%8B%20-%20%E5%96%9C%E6%AC%A2%E4%BD%A0&music_name=%E5%96%9C%E6%AC%A2%E4%BD%A0"
        },
        {
            "musicid": "4893051",
            "mid": "002pKRoX4Qbafa",
            "qqmusicurl": "http://y.qq.com/#type=song&mid=002pKRoX4Qbafa",
            "albumurl": "http://i.gtimg.cn/music/photo/mid_album_300/4/B/001C2BRX15iE4B.jpg",
            "audiourl": "http://ws.stream.qqmusic.qq.com/4893051.m4a?fromtag=46",
            "music_name": "光辉岁月",
            "commentid": "2179559196",
            "singer": "BEYOND - 命运派对",
            "src": "https://mp.weixin.qq.com/cgi-bin/readtemplate?t=tmpl/qqmusic_tmpl&singer=BEYOND%20-%20%E5%91%BD%E8%BF%90%E6%B4%BE%E5%AF%B9&music_name=%E5%85%89%E8%BE%89%E5%B2%81%E6%9C%88"
        }
    ],
    "withVoice": true,
    "voiceId": "MjM5NDAwMTA2MF8yMjM0OTc2NTM=",
    "voiceSrc": "https://res.wx.qq.com/voice/getvoice?mediaid=MjM5NDAwMTA2MF8yMjM0OTc2NTM=",
    "photoCount": 28,
    "photo": [
        "http://mmbiz.qpic.cn/mmbiz/bB51L92hjIBiaHZLZnuqB0ntACTticN0LlRPnWWAwUhNDKSOVB11sCaURX4zmkEnLrXRPl3mEY0P0ugrz4bdNj2w/0",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlJlzxuM6KnpsiaMsJWLeXH1HSae0nwibicqvfibVypVNJtGROugx6POXZfw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlpKK2vxSUPWM5YPZs8WccqEFqfx7KPcZibsk2SPeQswBqAD0RHTf4ETg/0?wx_fmt=png",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yq3ibFn9n2oyFsLrKttHibrJZjvNqb7IOSh2SsbqMOhGIS90kqZGUibtBQ/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yuKx27TZFWjOUY97Cw81Ao9n2Gbv3CY53b1wHYSlduBu2nSuMmsmabw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57ycjlgwJl6adSZffibjfzRRwStnB0zjHaf0iawQAHlT9aPG7BMKmDAn9aA/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57ybtahpicDZU88k3iczzTQABmmq2icdLEcVl4f9GYcnlfjpB5XY1UTtzgIw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlWnHGTcTMYiahVxQhTvNEMv5xLMV7aC9cVNszMEko9fodCG4icchiaILZg/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlpKK2vxSUPWM5YPZs8WccqEFqfx7KPcZibsk2SPeQswBqAD0RHTf4ETg/0?wx_fmt=png",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yIICE5MjYiciciciaib4hicRkBaQciaYQp1Lfkzm8PSlykMNapSY9zO2dsIluA/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yvtgywhW1iaCMMqtnDmfR3kZiagMHiaQpdKPJCdSn2Ggib8oDEDjsuoyCJw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yNt6Uta2fTpQfZvXFlo4NsTIA3f16v8pETHW30wWpM1NMfG9tOfPwzA/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPl8RxyRbKTr8BibzTND5tXa9qHEibeWA0BTCBNMk8icFE3g8aKXaf2pBUkw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlpKK2vxSUPWM5YPZs8WccqEFqfx7KPcZibsk2SPeQswBqAD0RHTf4ETg/0?wx_fmt=png",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57y8aQ5zCJYS0swa6ICJP33nn72aN8sJbexczXiaEforKBxxyRhaF0Rhicg/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlPOGAy18k3yPepqG0fvNMEvCJC7En66iaBEoxD6cAy6oT1BNRicewpCpw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlpKK2vxSUPWM5YPZs8WccqEFqfx7KPcZibsk2SPeQswBqAD0RHTf4ETg/0?wx_fmt=png",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yFiauZ8fNTLj3BkIlkBE9qjaWdfDu5yM079d8Il3ZE6Oa8PeqoVXuedg/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPl36uhQ7bOnQYASUibKke694cGzhaqXkI7JqKkSs424tOHiaTOfuhuuIMQ/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlpKK2vxSUPWM5YPZs8WccqEFqfx7KPcZibsk2SPeQswBqAD0RHTf4ETg/0?wx_fmt=png",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yNt6Uta2fTpQfZvXFlo4NsTIA3f16v8pETHW30wWpM1NMfG9tOfPwzA/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPl9LC9EuicVC6ibK2fk1NgahrM7evdSBMNBTjib55CicI5GvvlxkIpyYRiaVA/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFZAGm8SIEr6yoWic00x9nGPlpKK2vxSUPWM5YPZs8WccqEFqfx7KPcZibsk2SPeQswBqAD0RHTf4ETg/0?wx_fmt=png",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yS6gibHia6xXS1XyguavyNFBwCHrn4TAujqNH1e2HIVPcURwZYqUCAcjw/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/rcodombRU4DcJ4VkCBPbbW9oyQBgM57yWZJ7VONsIdMnQMSjsnYzOV2ocQg8DSQk3Y7ia0jpsW81c4tqpzzk5icg/0?wx_fmt=jpeg",
        "http://mmbiz.qpic.cn/mmbiz/17MiccsGRV0D2LfqIJGaG0SdOrQ3Ebl0BZmSDrMLia8x0UgcCzQDzkNrSuo7FfOQUkMbYHVvNYDtbv4YicqvaQl6w/640",
        "http://mmbiz.qpic.cn/mmbiz/17MiccsGRV0D2LfqIJGaG0SdOrQ3Ebl0BZmSDrMLia8x0UgcCzQDzkNrSuo7FfOQUkMbYHVvNYDtbv4YicqvaQl6w/640",
        "http://mmbiz.qpic.cn/mmbiz/krwnSWibZRFaeSYJUic5CPe94AG0BjLWPoaTWtoOc3dN4DvvBqOh4wiaHmsvQ0iamribz0GrulHtvV140wDlQic46sUA/0"
    ],
    "origin": false
}

最后要说明一点,这个接口仅用作演示使用,不能承受大量请求。

如果您有需求,请关注微信公众号 jianzhi_im。

更新

  • 20150710 支持语音的提取
2016/9/15 posted in  数据

例说按键脚本工具

在电脑或手机上使用按键脚本工具,可以代替繁琐的人类劳动,实现意想不到的效果。

按键脚本工具在游戏领域的用途最为直观:你需要升级打怪,但又不想自己按一通宵,怎么办?当然可以找人代练,但更好的方式其实是用按键脚本(通常我们会叫它「外挂」),按键脚本会忠实执行你部署的任务,毫无怨言。

在数据采集中,使用按键脚本,可以极大地解放生产力。今天介绍几个不同操作系统中的按键脚本工具,并通过几个实例来学习它们。

Windows 系统用 AutoHotkey

AutoHotkey 官网 - 文档 - 下载

虽然 Windows 下小白用户使用更多的可能是按键精灵,不过简直哥依然觉得 AutoHotkey 才是更好的方式。

下边这段脚本,是简直哥在做微信阅读点赞数项目时使用的,主要完成的任务是:

  1. 向公众号发送一个指令,获取 10 个微信文章链接
  2. 依次点击这些链接,在浏览器里打开
  3. 重复以上步骤

注意,这段脚本仅作原理展示,具体机器上需要调整路径、坐标、等待时间等,通常需较长时间的实地调试。

# AutoHotkey 脚本示例(微信点击)
^j::
Loop {

    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Click 400, 500
    send n
    Click 800, 570


    Sleep, 2000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 390, 211

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 420, 211

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 390, 251

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 420, 251

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 390, 291

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 420, 291

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 390, 331

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 420, 331

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 390, 371

    Sleep, 3000
    Run, "C:\Program Files\Tencent\WeChat\WeChat.exe"
    Sleep, 2000
    Click 420, 371
    Sleep, 3000
}

Mac 系统有 AppScript 原生支持

AppleScript 文档

下边这段脚本,跟上边的 AutoHotkey 完成的是一样的工作,只不过是换到了 Mac 系统中。

# AppleScript 脚本示例
repeat
    
    tell application "WeChat"
        activate
    end tell
    
    
    tell application "System Events"
        
        tell process "WeChat"
            set frontmost to true
            delay 1
            
            key code 45 # Press N button
            key code 76 # Press Enter button
            #key code 76 # Press Enter button
            
            click at {590, 410}
            delay 5
        end tell
        
        
        
        tell process "WeChat"
            set frontmost to true
            click at {700, 410}
            delay 5
        end tell
        
        tell process "WeChat"
            set frontmost to true
            click at {590, 445}
            delay 4
        end tell
        
        
        tell process "WeChat"
            set frontmost to true
            click at {700, 445}
            delay 5
        end tell
        
        
        tell process "WeChat"
            set frontmost to true
            click at {590, 480}
            delay 4
        end tell
        
        
        tell process "WeChat"
            set frontmost to true
            click at {700, 480}
            delay 5
        end tell
        
        
        
        tell process "WeChat"
            set frontmost to true
            click at {590, 515}
            delay 4
        end tell
        
        
        tell process "WeChat"
            set frontmost to true
            click at {700, 515}
            delay 5
        end tell
        
        
        tell process "WeChat"
            set frontmost to true
            click at {590, 550}
            delay 5
        end tell
        
        
        tell process "WeChat"
            set frontmost to true
            click at {700, 550}
            delay 4
        end tell
        
        
    end tell
    
    #tell application "Google Chrome"
    #   quit
    #end tell
    
end repeat

Android 系统可以考虑按键精灵

按键精灵官网

按键精灵是一个模拟鼠标键盘动作的软件。通过制作脚本,可以让按键精灵代替双手,自动执行一系列鼠标键盘动作。按键精灵简单易用,不需要任何编程知识就可以作出功能强大的脚本。只要在电脑前用双手可以完成的动作,按键精灵都可以替代完成。

小结

以上介绍了三款不同系统中可以实现模拟按键操作的几个工具,分别是 Windows 下的 AutoHotkey、Mac 下的 AppleScript 以及 Android 中的按键精灵。相比较而言,简直哥认为 AutoHotkey 最为强大实用,可扩展性强,并且有广泛的 Windows 用户基础,推荐使用。

如果您在使用过程中遇到什么问题,或者希望付费定制一段脚本,欢迎与我们联系(微信 toobigdata)。

2016/9/15 posted in  数据