Tuling123
今天介绍又一个AI机器人Tuling123,当然是开放API的。而且,Tuling123号称可以创建个性化的机器人哦~(别跟我说这logo像个啥…)
注册获取API Key,看平台接入文档。发现一个悲惨的事实:发送请求的API居然是GET的…而且URL还设计成这样 http://www.tuling123.com/openapi/api
…让我猜一下,以后你们会把新的API设计成/openapi/api2
吧。这惨状仅次于我见到过的一个把发送评论API设计成GET的。
而且,这可怜的GET还要承载userid,location,lon(lon….哎),lat以及询问信息info所有内容…
想要测试这个API很容易,curl一下就好啦。
curl "http://www.tuling123.com/openapi/api?key=xxxxxx&info=我喜欢你"
{"code":100000,"text":"宝贝,我也很爱你,来,亲一下"}
这个回答看起来不错。但当我问“哪里当片儿”时,丫居然说
{"code":100000,"text":"最好别有这样的想法。为了你好才说的。 希望对你能有好处。 yin是生活事业学业福气寿命婚姻命运的克星。一个人消耗完了自己相应的福报,等待他的是苦果自受。 看、想、听、说、做yin秽的事,都会大大折损人的福报。"}
只能说…真没幽默感…
另外,这API居然把unauthorized的statusCode写在200的reponse里,而且还跟正常业务的statusCode写在一个地方,受不鸟…还40001,40002…C时代穿越过来的么…请好好看看How To Design A Good API And Why It Matters Google。
再吐槽一下:Luling123把referrer link居然翻译成“升级连接”,还真是…目的导向…是不是应该考虑把消息发送按钮改名叫“约”呢…哎,再吐呆毛就爆了…
好啦,官方只提供了两端调用代码,PHP和Java的=.=。让我们来改造成nodejs的吧~
unirest
受够了mikeal/request的non-promise,随便一搜就找到了新欢:unirest。选择的一个重要原因是,Mashape做的~
var API_ASK = 'http://www.tuling123.com/openapi/api',
function ask(info, cb, err) {
var query = {
'key': 'xxx',
'info': info
}
unirest.get(API_ASK)
.query(query)
.headers({'Accept': 'application/json'})
.end(function (response) {
if (response.ok) {
if (cb) cb(response.body);
} else {
if (err) cerr(response.error);
}
});
}
虽然不提供美妙的promise返回,但其他的一些超便利的功能,以及好看的字体,足以让人从mikeal的傲慢中舒缓不少~
grunt-init
好,让我们把它封装成一个npm吧。我猜你肯定不想从npm init开始。所以我们找找那些肯定存在的Project Scaffolding吧,很显然Grunt就有Project Scaffolding。我们选nodejs的grunt-init-node来用。
安装好以后grunt一下确定没问题。把之前的代码改吧改吧扔进去。
var unirest = require('unirest'),
Q = require('q');
var API_ASK = 'http://www.tuling123.com/openapi/api',
API_KEY,
RESPONSE_TYPE = {
100000: 'text',
200000: 'url',
301000: 'novel',
302000: 'news',
304000: 'app',
305000: 'train',
306000: 'plane',
307000: 'groupon',
308000: 'coupon',
309000: 'hotel',
310000: 'lottery',
311000: 'price',
312000: 'restaurant'
}
exports.init = function (key) {
API_KEY = key;
};
exports.ask = function (info) {
if (!API_KEY) {
throw new Error('Please init with api key first');
}
var deferred = Q.defer();
var query = {
'key': API_KEY,
'info': info
}
unirest.get(API_ASK)
.query(query)
.headers({'Accept': 'application/json'})
.end(function (response) {
if (response.ok) {
var result = JSON.parse(response.body);
result.type = RESPONSE_TYPE[result.code];
if (result.type) {
deferred.resolve(response.body);
} else {
deferred.reject('unknown code,' + response.body.code);
}
} else {
deferred.reject(response.error);
}
});
return deferred.promise;
};
哦sorry忘了提了,我用了可爱的Q来Promisify一下这个接口。想看这完整代码的请看tuling123 nodejs-sdk。如果有人有兴趣一起维护欢迎加入哈。哎,看惯了国外API产品的文档看国内的真是不习惯。
最后抱怨一下,Tuling123的登陆timeout设置的太短了…而且,似乎跟cookie里写的不一样…
然后呢…欢迎注册Tuling123 via Link~
《“(30 hackdays day 25) Tuling123 – 光棍节找个机器人聊天吧”》 有 4 条评论
这篇今天3:00肯定没有准时更新……
…你没看见你没看见!
感觉很神奇,和那个小黄鸡比较怎么样?30天真快。
显然不如小黄鸡哈