搜狗云输入法API

标签:JavaScript, Python

昨天搜狗推出了云输入法,不过没去研究,今天闲得蛋疼,就又来玩了。

首先是看源代码,一眼就看到:http://web.pinyin.sogou.com/web_ime/init2_utf8.php
于是打开来,发现是加密过的JavaScript代码,懒得去研究,还是直接抓包吧。

于是启动Firefox,用Live HTTP Headers查看了一下,便发现了这种地址:http://web.pinyin.sogou.com/web_ime/get_ajax/duziele.key
用浏览器打开一看,结果是:
ime_query_res="%E8%82%9A%E5%AD%90%E9%A5%BF%E4%BA%86%EF%BC%9A7%09+%E8%82%9A%E5%AD%90%E9%A5%BF%EF%BC%9A5%09+%E8%82%9A%E5%AD%90%EF%BC%9A4%09+%E7%8B%AC%E8%87%AA%EF%BC%9A4%09+%E7%8B%AC%E8%B5%84%EF%BC%9A4%09+%E7%8B%AC%E5%AD%90%EF%BC%9A4%09+%E7%8A%8A%E5%AD%90%EF%BC%9A4%09+%E8%B5%8C%E8%B5%84%EF%BC%9A4%09+%E6%AF%92%E8%B5%84%EF%BC%9A4%09+%E6%9D%9C%E6%A2%93%EF%BC%9A4%09+%E6%9D%9C%E5%AD%97%EF%BC%9A4%09+%E8%82%9A%E4%BB%94%EF%BC%9A4%09+%E5%BA%A6%EF%BC%9A2%09+%E8%AF%BB%EF%BC%9A2%09+%E9%83%BD%EF%BC%9A2%09+%E7%8B%AC%EF%BC%9A2%09+%E6%AF%92%EF%BC%9A2%09+%E6%9D%9C%EF%BC%9A2%09+%E6%B8%A1%EF%BC%9A2%09+%E8%B5%8C%EF%BC%9A2";ime_query_key="duziele";
一看就知道是URL编码,于是拿出Python开始解码:
>>> from urllib2 import unquote
>>> ime_query_res="%E8%82%9A%E5%AD%90%E9%A5%BF%E4%BA%86%EF%BC%9A7%09+%E8%82%9A%E
5%AD%90%E9%A5%BF%EF%BC%9A5%09+%E8%82%9A%E5%AD%90%EF%BC%9A4%09+%E7%8B%AC%E8%87%AA
%EF%BC%9A4%09+%E7%8B%AC%E8%B5%84%EF%BC%9A4%09+%E7%8B%AC%E5%AD%90%EF%BC%9A4%09+%E
7%8A%8A%E5%AD%90%EF%BC%9A4%09+%E8%B5%8C%E8%B5%84%EF%BC%9A4%09+%E6%AF%92%E8%B5%84
%EF%BC%9A4%09+%E6%9D%9C%E6%A2%93%EF%BC%9A4%09+%E6%9D%9C%E5%AD%97%EF%BC%9A4%09+%E
8%82%9A%E4%BB%94%EF%BC%9A4%09+%E5%BA%A6%EF%BC%9A2%09+%E8%AF%BB%EF%BC%9A2%09+%E9%
83%BD%EF%BC%9A2%09+%E7%8B%AC%EF%BC%9A2%09+%E6%AF%92%EF%BC%9A2%09+%E6%9D%9C%EF%BC
%9A2%09+%E6%B8%A1%EF%BC%9A2%09+%E8%B5%8C%EF%BC%9A2"
>>> print unicode(unquote(ime_query_res), 'utf8')
肚子饿了:7     +肚子饿:5      +肚子:4        +独自:4        +独资:4
+独子:4        +犊子:4        +赌资:4        +毒资:4        +杜梓:4
+杜字:4        +肚仔:4        +度:2  +读:2  +都:2  +独:2  +毒:2  +杜:2
+渡:2  +赌:2
这就是输入“duziele”显示的结果。

因此你应该猜到了,想查任意拼音的话,就用这个地址:http://web.pinyin.sogou.com/web_ime/get_ajax/想查的拼音.key

当然你可能没有Python,那么浏览器总有吧,于是用JavaScript也能搞定。
在地址栏输入下面的代码并回车:
javascript:alert(decodeURIComponent("%E8%82%9A%E5%AD%90%E9%A5%BF%E4%BA%86%EF%BC%9A7%09+%E8%82%9A%E
5%AD%90%E9%A5%BF%EF%BC%9A5%09+%E8%82%9A%E5%AD%90%EF%BC%9A4%09+%E7%8B%AC%E8%87%AA
%EF%BC%9A4%09+%E7%8B%AC%E8%B5%84%EF%BC%9A4%09+%E7%8B%AC%E5%AD%90%EF%BC%9A4%09+%E
7%8A%8A%E5%AD%90%EF%BC%9A4%09+%E8%B5%8C%E8%B5%84%EF%BC%9A4%09+%E6%AF%92%E8%B5%84
%EF%BC%9A4%09+%E6%9D%9C%E6%A2%93%EF%BC%9A4%09+%E6%9D%9C%E5%AD%97%EF%BC%9A4%09+%E
8%82%9A%E4%BB%94%EF%BC%9A4%09+%E5%BA%A6%EF%BC%9A2%09+%E8%AF%BB%EF%BC%9A2%09+%E9%
83%BD%EF%BC%9A2%09+%E7%8B%AC%EF%BC%9A2%09+%E6%AF%92%EF%BC%9A2%09+%E6%9D%9C%EF%BC
%9A2%09+%E6%B8%A1%EF%BC%9A2%09+%E8%B5%8C%EF%BC%9A2"))

虽然该API似乎没有查referer、cookie等字段(可能是出于效率考虑),但由于不是JSNOP格式的,没法直接用AJAX调用,所以最方便的方法是使用YQL,将其转换成JSONP,只是这样速度会慢很多。

我就懒得去做个山寨输入法了,感兴趣的可以自己去试试~

0条评论 你不来一发么↓

    想说点什么呢?