图灵机器人是一个个性化的智能机器人平台,通过它我们可以让自己编的app或者是小程序变得有智能回复功能。
要实现与微信平台的对接,首先要有个图灵机器人的账号。点击这里:[http://www.tuling123.com/openapi/](\"http://www.tuling123.com/openapi/\")注册一个图灵机器人账号。
注册好登陆后
[](\"http://photo.blog.sina.com.cn/showpic.html#blogid=6b6a306f0102vlml&url=http://album.sina.com.cn/pic/001XXw51ty6SYFfn4ms98\")
我们就获得了API KEY,这个是我们等下发送请求必须的。API请求地址为:[http://www.tuling123.com/openapi/api](\"http://www.tuling123.com/openapi/api\")
下面附上官方的JAVA版DEMO:(主要是因为我不懂PHP= =)
public static void main(String\[\] args) throws IOException { \\r\\n\\r\\n String APIKEY = "开发者注册帐号,激活之后即可获得"; \\r\\n String INFO = URLEncoder.encode("北京今日天气", "utf-8"); \\r\\n String getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + INFO; \\r\\n URL getUrl = new URL(getURL); \\r\\n HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection(); \\r\\n connection.connect(); \\r\\n\\r\\n // 取得输入流,并使用Reader读取 \\r\\n BufferedReader reader = new BufferedReader(new InputStreamReader( connection.getInputStream(), "utf-8")); \\r\\n StringBuffer sb = new StringBuffer(); \\r\\n String line = ""; \\r\\n while ((line = reader.readLine()) != null) { \\r\\n sb.append(line); \\r\\n } \\r\\n reader.close(); \\r\\n // 断开连接 \\r\\n connection.disconnect(); \\r\\n System.out.println(sb); \\r\\n\\r\\n}
将此代码复制到eclipse中执行发现获得的返回数据是JSON格式的[](\"http://photo.blog.sina.com.cn/showpic.html#blogid=6b6a306f0102vlml&url=http://album.sina.com.cn/pic/001XXw51ty6SYFYSryba3\")
[](\"http://photo.blog.sina.com.cn/showpic.html#blogid=6b6a306f0102vlml&url=http://album.sina.com.cn/pic/001XXw51ty6SYGatuPo62\")
要像正常的在微信上显示返回的信息而不要那些标识,那就要有个转化过程,将JSON数据中的又用的信息提取出来。用谷歌的gson就很方便可以将JSON转为字符串类型数据
下面贴出实现代码:
package org.Tuling.Util;\\r\\n\\r\\nimport org.Tuling.Message.TulingCookbook;\\r\\nimport org.Tuling.Message.TulingFlight;\\r\\nimport org.Tuling.Message.TulingLink;\\r\\nimport org.Tuling.Message.TulingNews;\\r\\nimport org.Tuling.Message.TulingText;\\r\\nimport org.Tuling.Message.TulingTrain;\\r\\nimport org.Tuling.TulingServise.Tuling;\\r\\n\\r\\n\\r\\nimport com.google.gson.Gson;\\r\\n\\r\\npublic class TulingRobotUtil {\\r\\n/\* 文字类 \*/\\r\\n public static final String MESSAGE\_TYPE\_TEXT = "100000";\\r\\n\\r\\n/\* 链接类 \*/\\r\\n public static final String MESSAGE\_TYPE\_LINK = "200000";\\r\\n\\r\\n/\* 新闻类 \*/\\r\\n public static final String MESSAGE\_TYPE\_NEWS = "302000";\\r\\n\\r\\n/\* 列车类 \*/\\r\\n public static final String MESSAGE\_TYPE\_TRAIN = "305000";\\r\\n\\r\\n/\* 航班类 \*/\\r\\n public static final String MESSAGE\_TYPE\_FLIGHT = "306000";\\r\\n\\r\\n/\* 菜单类 \*/\\r\\n public static final String MESSAGE\_TYPE\_COOKBOOK = "308000";\\r\\n\\r\\n\\r\\n/\* 转换json字符串为对象 \*/\\r\\n public static String JsonToString( String content )\\r\\n {\\r\\n String respMessage = null;\\r\\n /\* 查询并返回结果 \*/\\r\\n String json = Tuling.TulingRobot( content );\\r\\n /\* 通过Gson工具将json转换成TulingText对象 \*/\\r\\n TulingText tulingText = new Gson().fromJson( json, TulingText.class );\\r\\n\\r\\n /\* 获取TulingText中code的内容 \*/\\r\\n String code = tulingText.getCode();\\r\\n if ( code.equals( MESSAGE\_TYPE\_TEXT ) )\\r\\n {\\r\\n respMessage = tulingText.getText();\\r\\n }else if ( code.equals( MESSAGE\_TYPE\_LINK ) )\\r\\n {\\r\\n TulingLink tulingLink = new Gson().fromJson( json, TulingLink.class );\\r\\n\\r\\n respMessage = tulingLink.getText() + ":" + tulingLink.getUrl();\\r\\n }else if ( code.equals( MESSAGE\_TYPE\_NEWS ) )\\r\\n {\\r\\n TulingNews tulingNews = new Gson().fromJson( json, TulingNews.class );\\r\\n\\r\\n respMessage = tulingNews.getText() + ":" + tulingNews.getList().getClass();\\r\\n }else if ( code.equals( MESSAGE\_TYPE\_TRAIN ) )\\r\\n {\\r\\n TulingTrain tulingTrain = new Gson().fromJson( json, TulingTrain.class );\\r\\n\\r\\n respMessage = tulingTrain.getText() + "\\\\n" + tulingTrain.getList().get( 0 ).getStart() + "-" + tulingTrain.getList().get( 0 ).getTerminal() + "\\\\n" +\\r\\n tulingTrain.getList().get( 0 ).getStarttime() + "," + tulingTrain.getList().get( 0 ).getEndtime();\\r\\n }else if ( code.equals( MESSAGE\_TYPE\_FLIGHT ) )\\r\\n {\\r\\n TulingFlight tulingFlight = new Gson().fromJson( json, TulingFlight.class );\\r\\n\\r\\n respMessage = tulingFlight.getText() + ":" + tulingFlight.getList().getClass();\\r\\n }else if ( code.equals( MESSAGE\_TYPE\_COOKBOOK ) )\\r\\n {\\r\\n TulingCookbook tulingCookbook = new Gson().fromJson( json, TulingCookbook.class );\\r\\n\\r\\n respMessage = tulingCookbook.getText();\\r\\n }\\r\\n\\r\\n return(respMessage);\\r\\n }\\r\\n\\r\\n\\r\\n public static void main( String args\[\] )\\r\\n {\\r\\n String content = "南宁到柳州的火车";\\r\\n\\r\\n System.out.print( JsonToString( content ) );\\r\\n }\\r\\n}
转换后的效果:
[](\"http://photo.blog.sina.com.cn/showpic.html#blogid=6b6a306f0102vlml&url=http://album.sina.com.cn/pic/001XXw51ty6SYGr8mTof2\")
要获得JSON信息中的我们要的信息,将具体的内容封装成JAVA对象就可以了[](\"http://photo.blog.sina.com.cn/showpic.html#blogid=6b6a306f0102vlml&url=http://album.sina.com.cn/pic/001XXw51ty6SYGBLNmUe8\")
封装完成后的效果:[](\"http://photo.blog.sina.com.cn/showpic.html#blogid=6b6a306f0102vlml&url=http://album.sina.com.cn/pic/001XXw51ty6SYGGIZAJd9\")
到此就可以接入微信公众平台里了。
不过有个地方我还是不知道怎么实现,就是搜航班,列车,菜谱等的时候将结果装入图文消息中,怎么让多图文消息的每条消息内容都不一样呢?