调用图灵机器人API实现简单聊天

  昨天突然想在Android下调用图灵机器人API实现聊天的功能。说干就干,虽然过程中遇见一些问题,但最后解决了的心情真好。

API接口是(key值可以在图灵机器人网站里注册得到)

www.tuling123.com/openapi/api?key=1702c05fc1b94e2bb4de7fb2e61b21a3&info=hello

最后hello是讲的话,访问这个网站会访问一个JSON格式的内容。

  text关键字就是访问的内容,只要把这个关键字的内容截取下列就行了。

下面开始写代码。

首先布个局,丑丑的别介意。

  一个TextView在上面,用来显示内容,一个EditView在下面用来输入内容,然后一个按钮实现点击事件。

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/rl"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:background="@drawable/background1"
 7     tools:context=".MainActivity" >
 8
 9     <TextView
10         android:id="@+id/tv_out"
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:textColor="#ff0000"
14         android:textIsSelectable="true"
15         android:textSize="25sp" />
16
17     <LinearLayout
18         android:id="@+id/ll"
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:layout_alignParentBottom="true"
22         android:orientation="horizontal" >
23
24         <EditText
25             android:id="@+id/et_input"
26             android:layout_width="0dp"
27             android:layout_height="wrap_content"
28             android:layout_weight="4"
29             android:hint="@string/et_input"
30             android:textSize="20sp" />
31
32         <Button
33             android:layout_width="0dp"
34             android:layout_height="wrap_content"
35             android:layout_weight="1"
36             android:background="@drawable/button1"
37             android:onClick="click" />
38     </LinearLayout>
39
40 </RelativeLayout>

activity_main.xml

关键是点击事件的实现:

  当按钮被点击时,就获取EditView上的内容。然后用InputUtils.getString(question)封装一个方法,传一个输入的内容用来返回网页关键字"text"里的内容。

这个地方需要注意下,在调试的时候,到int code = connection.getResponseCode();这一步就不运行了,获取不了状态码,百度了下。

  需要在onCreate里加上:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .detectDiskReads().detectDiskWrites().detectNetwork()
                .penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
                .penaltyLog().penaltyDeath().build());

 1 package cn.starry.gangchat.utils;
 2
 3 import java.io.InputStream;
 4 import java.net.HttpURLConnection;
 5 import java.net.URL;
 6 import java.net.URLEncoder;
 7
 8 import org.json.JSONObject;
 9
10 public class InputUtils {
11     private static String APIKEY = "1702c05fc1b94e2bb4de7fb2e61b21a3";
12
13     public static String getString(String question) {
14         String out = null;
15         try {
16             String info = URLEncoder.encode(question, "utf-8");
17             System.out.println(info);
18             URL url = new URL("http://www.tuling123.com/openapi/api?key="
19                     + APIKEY + "&info=" + info);
20             System.out.println(url);
21             HttpURLConnection connection = (HttpURLConnection) url
22                     .openConnection();
23             connection.setConnectTimeout(10 * 1000);
24             connection.setRequestMethod("GET");
25             int code = connection.getResponseCode();
26             if (code == 200) {
27                 InputStream inputStream = connection.getInputStream();
28                 String resutl = StreamUtils.streamToString(inputStream);
29                 JSONObject object = new JSONObject(resutl);
30                 out = object.getString("text");
31             }
32         } catch (Exception e) {
33             e.printStackTrace();
34         }
35         return out;
36
37     }
38 }

InputUtils.java

在InputUtils.java里用到了:

StreamUtils.streamToString(inputStream)

这个是我定义。是在一个输入流里获取内容,用utf-8编码返回。

 1 package cn.starry.gangchat.utils;
 2
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6
 7 public class StreamUtils {
 8     public static String streamToString(InputStream in) {
 9         String result = "";
10         try {
11             // 创建一个字节数组写入流
12             ByteArrayOutputStream out = new ByteArrayOutputStream();
13             byte[] buffer = new byte[1024];
14             int length = 0;
15             while ((length = in.read(buffer)) != -1) {
16                 out.write(buffer, 0, length);
17                 out.flush();
18             }
19             result = new String(out.toByteArray(), "utf-8");
20             out.close();
21         } catch (IOException e) {
22             e.printStackTrace();
23         }
24         return result;
25     }
26 }

StreamUtils.java

最后还实现了一个点击按钮就让软键盘隐藏的功能。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
         if(imm.isActive()&&getCurrentFocus()!=null){
            if (getCurrentFocus().getWindowToken()!=null) {
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
         }

 1 package cn.starry.gangchat;
 2
 3 import java.util.Random;
 4
 5 import cn.starry.gangchat.utils.InputUtils;
 6
 7 import android.os.Bundle;
 8 import android.os.StrictMode;
 9 import android.view.View;
10 import android.view.inputmethod.InputMethodManager;
11 import android.widget.EditText;
12 import android.widget.LinearLayout;
13 import android.widget.RelativeLayout;
14 import android.widget.TextView;
15 import android.widget.Toast;
16 import android.annotation.SuppressLint;
17 import android.app.Activity;
18 import android.content.Context;
19
20 public class MainActivity extends Activity {
21
22     private EditText et_input;
23     private TextView tv_out;
24     private RelativeLayout rl;
25
26     @SuppressLint("NewApi")
27     @Override
28     protected void onCreate(Bundle savedInstanceState) {
29         super.onCreate(savedInstanceState);
30         setContentView(R.layout.activity_main);
31         int[] arr = { 0x7f020001, 0x7f020002, 0x7f020003, 0x7f020004,
32                 0x7f020005 };
33         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
34                 .detectDiskReads().detectDiskWrites().detectNetwork()
35                 .penaltyLog().build());
36         StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
37                 .detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
38                 .penaltyLog().penaltyDeath().build());
39         Random random = new Random();
40         int ran = random.nextInt(5);
41         et_input = (EditText) findViewById(R.id.et_input);
42         tv_out = (TextView) findViewById(R.id.tv_out);
43         rl = (RelativeLayout) findViewById(R.id.rl);
44          rl.setBackgroundResource(arr[ran]);
45     }
46
47     public void click(View v) {
48         String question = et_input.getText().toString().trim();
49         if (question == null || "".equals(question)) {
50             Toast.makeText(getApplicationContext(), "请输入内容哦!",
51                     Toast.LENGTH_SHORT).show();
52             return;
53         }
54         InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
55          if(imm.isActive()&&getCurrentFocus()!=null){
56             if (getCurrentFocus().getWindowToken()!=null) {
57             imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
58             }
59          }
60         String result = InputUtils.getString(question);
61         tv_out.setText(result);
62         et_input.setText("");
63     }
64
65 }

MainActicity.java

安装包下载地址:http://123.207.118.162/downloads/Starry.apk

GitHub上有完整项目,可以直接导入在Eclipse里:https://github.com/Starry0/chat

时间: 2024-10-07 06:33:22

调用图灵机器人API实现简单聊天的相关文章

python 调用图灵机器人api实现简单的人机交互

接入流程如下,需要先注册开发者帐号,之后会得到一个32位的key,保存下来,用于以后发送数据.http://www.tuling123.com/ 请求方式 示例: # -*- coding: utf-8 -*- import urllib import json def getHtml(url): page = urllib.urlopen(url) html = page.read() return html if __name__ == '__main__': key = '8b005db5

使用图灵机器人api搭建微信聊天机器人php实现

之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步骤. 首先,你需要下载我的微信助手,下载地址请参考我的博客文章: 通过对微信pc hook实现微信助手. 申请图灵机器人,并认证.申请地址,使用api接入并获取apikey(详细请参考图灵机器人官网) . 使用php实现访问图灵机器人api. php实现代码如下: <?php class Tulin

简单的调用图灵机器人

1.去http://www.tuling123.com网址创建账号,创建机器人 重点 2.上代码 winform界面如上 HttpRequestHelper.PostAsync方法具体如下 /// <summary> /// 使用post方法异步请求 /// </summary> /// <param name="url">目标链接</param> /// <param name="data">发送的参数字

python用requests和urllib2两种方式调用图灵机器人接口

最近从网上看见个有意思的图灵机器人,可以根据不同的信息智能回复,比如你发送一个"讲个笑话",它就会给你回复一个笑话,或者"北京天气"就可以回复天气情况,或者英文单词然后给你回复中文释义.官方文档中有php和java的调用方式,我就弄个python的吧. 注册获取API KEY 这一步很简单,直接注册一个账号就可以看到你的API KEY.这个KEY我们以后发送get请求的时候需要用到. Pythoh调用示例 掉用也比较简单,主要是模拟post 请求.然后解析 json

【chrome插件】web版微信接入图灵机器人API实现自动回复

小贱鸡自动回复API已经不可以用了,现在改良接入图灵机器人API 360chrome浏览器团队翻译了部分谷歌插件开发文档 地址:http://open.chrome.360.cn/extension_dev/overview.html 具体封装插件的方法请参考开发文档. 具体代码如下: background.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

Delphi 实现 图灵机器人API(IDHTTP POST )

此功能所需的 Key及接口文档,都可以在图灵机器人的官网下载, 小伙伴们需要申请自己的图灵机器人账号. 申请方法请自行百度“图灵机器人”  . 登录账号后,在左侧的[机器人接入],获取需要的信息,记得一定要关闭 secret,开启的话,需要对请求进行特殊处理,具体处理方法可以看接口文档中的“数据加密Demo”,当然Java 开发的小伙伴可以直接使用Demo(流行的语言真好,东西都是现成的) 下面贴出的是POST请求,实现图灵机器人的方法. unit Demo; interface uses Wi

用wxBot和图灵机器人API实现微信群聊机器人

1 实现方案 用 wxBot登录微信,接收.发送微信消息. 用 图灵机器人 API对消息作回复. 2 实现效果 机器人会回复来自联系人的消息,以及群里@此账号的消息. 注意要将对应的群保存到联系人. 3 运行方法 下载wxBot, 安装python的依赖包. 在图灵机器人官网注册账号,申请图灵key: 图灵key申请地址 在bot.py文件所在目录下新建conf.ini文件,内容为(key字段内容为申请到的图灵key): [main] key=1d2678900f734aa0a23734ace8

图灵机器人API调用 C++版

这是一个非常简单的例子,作为新手的我是拿来练手的,当然也可以给和我一样的朋友一些参考. 而且图灵官网没有给出C的例子,网上一搜也是各种Java.C#甚至易语言实现,不要歧视C++好不好●︿●,就算不如语言老大PHP,它也是很强的! 这个例子其本质就是一个C++写的get数据  (POST和这个也差不多啦,可以自己动手试一试╭(′▽`)╯ ) 没有用MFC,直接用的WindowAPI哦,用的是winhttp. 也没有使用JSON库之类的来解析数据,因为我是暴力拆解字符串的,所以如果返回值位数不对可

使用图灵机器人高速开发智能聊天机器人

聊天机器人如今已经成为一个流行的话题.不管微信公共帐号,还是qq聊天机器人,能够智能交互聊天的机器人帐号越来越多.相信非常多开发者也想自己实现这样一个好玩的智能聊天机器人. 以下就给广大的技术开发人员提供一个通过图灵机器人简单高速得实现这样一个智能聊天机器人的方法. 先看一下图灵机器人官方体验页的截图.相信大家会很感兴趣: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGFtY2hlbg==/font/5a6L5L2T/fontsize/400/fi