Archive for the 'Coding' Category

如何规避抓取别家数据的潜在风险?

我对星球大战的喜爱始于高中,那阵恰逢周五晚电影频道佳片有约安排播出。我看后便再也无法忘却天行者阿纳·金在塔图因的血色残阳下疾驰的身影。他悲剧性的黑化过程与对力量的迫切渴望成了我叛逆青春的注脚。

然而回到现实,一路创业跌跌撞撞走来,遇到的苦难问题不计其数,纯粹的「力量」似乎并不能解决一切问题,你必须提升「智力」,你的团队必须学会「敏捷」,尤其是在我朝这片土地上。

何况尘世间的事并不都像科幻电影里那样,能清晰地界定出原力的黑暗面与光明面,你从中选择一方站队。很多时候,你必须在灰色地带游走,怀揣光明之心,动用黑暗能量。这过程中,稍有不慎脚下踏空,或将万劫不复永堕业火,但也总有高人得以竹杖芒鞋凌波微步,火中取粟之后全身而退。

《增长黑客》里提到一些数据抓取解决冷启动的案例。其实在互联网行业里,依靠抓取来获取数据的做法,并不罕见(如果你觉得很新鲜,那只能说道行太浅)。但我敢于将其写出来,这当中自然会遭到一些质疑和非议,参加的大大小小活动也总有人提出如何规避风险的问题。

在此我就「如何规避抓取别家数据的潜在风险?」的问题在此简单阐述我的观点:

第一,技术是中立的,本身不带有任何倾向性。如何你觉得从别的平台「右键另存为」来获得素材运用到自己的产品里不构成任何问题,那么写脚本批量抓取没有改变这件事的性质,它只是帮你将原本需要人工操作三天的事情简化到三个小时内自动完成。

第二,平台各有自己的政策,不同平台的抓取策略不同。有的平台明确在自己的用户协议里声明,「本平台只承担数据存储的作用,内容版权隶属原作者所有」,这时候,你完全可以征得原作者同意之后,以你觉得方便的姿势去获取。至于如何快速大量获得原作者同意?通过写脚本批量发私信给目标群体就可以,这个行为的性质参见第一条。

第三,分清学习目的与商用目的。我专门查询过版权法等相关法律法规,其中对「出于学习目的」是有专门的分类讨论的。如果将抓取来的数据用于产品上线前内部的测试、参考、决策依据,我认为是属于这一范围的(当然还是得具体问题具体分析)。至于正式上线成为一款商业产品,那么还是小心为妙。

最后,你有没有越过界其实你自己心里清楚。

Growth Hacker 奇技淫巧一则:零授权,抓取新浪微博任何用户的微博内容

有时或基于以下凡此种种需求,我们会想要去抓取新浪微博的内容:

  • 产品冷启动,导入外部数据,而非从头积累;
  • 通过大数据+语义分析获取用户兴趣行为偏好,提供智能推荐;
  • 监控微博舆情,对特定关键词或是用户行为进行响应;etc

想必新浪深知微博内容本身是最其有价值的资产,一旦被竞争对手大批量抓取导入,则辛苦建立起的门槛将瞬间化作他人之嫁衣,因此做了非常繁复的安全保护,包括强制登录跳转认证、跨域检测、cookie 植入、禁止账号密码登录而启用 OAuth2.0 等等。

近期个人有一些抓取需求,在查询大量过时的网络资料测试无果后,决定另辟蹊径完成这一目标,并最终测试成功。在此分享出来。(这篇文章将提供解决问题的方法思路,但不会给出具体代码。伸手党请移步百度或 Github。)

你需要准备:一个个人微博账号,我们将透过它去访问其他用户页面,从而抓取。除此之外,别无所求。
Continue reading ‘Growth Hacker 奇技淫巧一则:零授权,抓取新浪微博任何用户的微博内容’

使用 Alfred Workflow 制作日文单词翻译器

Alfred 是  Mac 下一款强悍的系统增强工具,可以快速启动+搜索本地和网络任意内容。购买其付费版本的 Power Pack 还能启用 Workflow 功能,使用一门常用的脚本开发语言就能编写自己的工作流来实现各种有趣的插件。(这里有国人收集的很多现成的 Workflow 插件下载)

Screen Shot 2014 03 27 at 6 47 15 PM

今天心血来潮花了17英镑购买了 license,搜刮了几个自己可能用到的脚本,顺便研究了下如何进行 Alfred 脚本编写。只需简单的 PHP 就能完成一个 workflow。

这里以编写一个 Alfred 里的日文单词翻译器为例,简单介绍下流程。

基本原理:获取用户在 Alfred 内输入的内容(日文单词) -> POST 到百度云提供的翻译 API 获取翻译结果 -> 解析结果 -> 调用 Alfred Workflow 的方法输出成 Alfred 格式。

完成之后的效果是这样的:

Screen Shot 2014 03 27 at 7 07 24 PM

Continue reading ‘使用 Alfred Workflow 制作日文单词翻译器’

[开源项目]基于新浪SAE的《炉石传说》微信卡牌查询器

《炉石传说:魔兽英雄传》是暴雪娱乐开发的首款休闲卡牌游戏,在魔兽的世界观基础上吸纳借鉴了万智牌的玩法思路,并加入了卡牌商店、冶炼铸造、PVP对战、竞技场/天梯系统,并已于1月24日全球同步公测。时值春节期间,宅在家休养的小伙伴中发展出了好几枚炉石玩家,闲来对战,不亦乐乎。

作为十年前就跳入日本集换式卡牌《游戏王》这个无底大坑的IT死宅,此前我曾使用新浪的应用托管服务(Sina App Engine,SAE)+PHP 开发过微信上的游戏王卡牌查询器,其目前已自然积累了近 5000 粉丝,每日活跃查询数百次。在去年年底网易内测炉石传说期间,我第一时间搞到了内测码,并在小玩几把之后为其迷醉,遂通宵一晚在游戏王微信卡查的基础上,新开发了一套微信上的炉石传说卡牌查询器。

微信搜索账号:myhearthstone,或查找公众号“炉石传说卡牌游戏”即可关注体验。(顺便说一下,游戏王那个的微信账号是ourocg)

现本人将这套炉石传说微信卡牌查询器的源码托管至 Github 予诸君分享。项目地址: https://github.com/xdash/Hearth-Stone-Cards-DB-for-Wechat

在此简单对目录结构和使用到的 SAE 服务做番介绍。

Continue reading ‘[开源项目]基于新浪SAE的《炉石传说》微信卡牌查询器’

Mac 下安装 Python 图像处理模块 Pillow

学习用 Python 写日常辅助小工具。参阅教程,原打算使用 PIL 库作为图片处理模块,但发现该库已停止维护两年,开源社区普遍推荐 fork 版的 Pillow。要说 Mac 虽自带 Python,但对安装 Python 的库却繁复折腾,捣鼓了半天,最后还是靠大神丢过来的 Quora 链接顺藤摸瓜搞定了 Pillow。

记录分享如下:

1、使用 pip 安装 Python 库。pip 是 Python 的包管理工具,安装后就可以直接在命令行一站式地安装/管理各种库了(pip 文档)。

$ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz

$ tar xzf pip-0.7.2.tar.gz

$ cd pip-0.7.2

$ python setup.py install

2、使用 pip 下载获取 Pillow

$ pip install pillow

3、安装过程中命令行出现错误提示:”error: command ‘clang’ failed with exit status 1”。上网查阅,发现需要通过 Xcode 更新 Command Line Tool。于是打开 Xcode->Preferences->Downloads-Components选项卡。咦?竟然没了 Command Line Tools。再查,发现 Xcode 5 以上现在需要用命令行安装:

$ xcode-select —install

系统会弹出安装命令行工具的提示,点击安装即可。

此时再 pip install pillow,就安装成功了。

pip freeze 命令查看已经安装的 Python 包,Pillow 已经乖乖躺那儿了。

YuGiOh! Card Search Tool for Wechat (Open Source)

YuGiOh! is my favorite TCG (Trading Card Game) popular with global players, which has released over 7,000 different cards now for constructing your own deck.

And the YuGiOh! Card Search Tool for Wechat is an open source project created for Wechat official account that automatically response to user’s search query for any YuGiOh! card. I created this simply because I cannot remember so many cards up to now, and during a face-to-face duel it’s an urgent demand to quickly check opponent’s unfamiliar card.

  Screenshot_2013-10-16-00-03-23  Screenshot_2013-10-16-00-04-59  Screenshot_2013-10-16-00-05-17

By entering part of or the full card name/effect/exchange code/any other information, and tap “send”, this robot shally instantly help you find out which card(s) you are looking up for.

To see how it works, add Wechat official account by search id ourocg or name 游戏王卡片查询

I published this project on my Github:
https://github.com/xdash/YuGiOh_Card_for_Wechat

Thanks to ocgsoft.cn for providing card data API.