机器人是什么?可以吃吗?

嗯,他可以和你聊天,不能吃哦。

首先需要到www.tuling123.com注册一只KEY,你才能调用机器人API哦

一、布局

(控制台程序可以跳过这一步)本文以WPF为示例来讲解。

首先我们需要一只聊天界面,大概需要这些组件:

“发送”Button一只  TextBox一条   ScrollViewer和WrapPanel各一只。

这里我把它写成UserControl方便使用,喵。

以下是XAML布局:(ScrollViewer的Style可以删掉(如果报错))

 <UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Lemon_App"
xmlns:Forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing" x:Name="userControl" x:Class="Lemon_App.IMBOX"
mc:Ignorable="d" Loaded="UserControl_Loaded" SizeChanged="UserControl_SizeChanged">
<Grid>
<Border Height="1" VerticalAlignment="Bottom" Background="#FFE6E6E6" Margin="0,0,0,90"/>
<TextBox x:Name="textBox1" TextWrapping="Wrap" FontSize="14" BorderThickness="0" BorderBrush="{x:Null}" SelectionBrush="#FF31C27C" KeyDown="textBox1_KeyDown" Height="90" VerticalAlignment="Bottom" Background="{x:Null}"/>
<Border BorderThickness="1" Background="#B2007ACC" CornerRadius="5" HorizontalAlignment="Right" Width="57" Height="30" VerticalAlignment="Bottom" Margin="3">
<Label x:Name="label" Content="发送" Margin="9.919,1.833,4.331,-1" Foreground="White" MouseDown="label_MouseDown" Height="27.167" VerticalAlignment="Top"/>
</Border>
<ScrollViewer x:Name="Sllv" PanningMode="Both" Margin="0,0,0,90" BorderBrush="{x:Null}" Template="{DynamicResource SCS}">
<WrapPanel x:Name="Robot" Height="Auto" SizeChanged="Robot_SizeChanged" Width="{Binding ActualWidth, ElementName=userControl, Mode=OneWay}"/>
</ScrollViewer>
</Grid>
</UserControl>

部分事件处理代码:

  public IMBOX()
{
InitializeComponent();
} private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Robot.Width = this.ActualWidth;
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
label_MouseDown(null, null);
}
} private void Robot_SizeChanged(object sender, SizeChangedEventArgs e)
{
double d = this.Sllv.ActualHeight + this.Sllv.ViewportHeight + this.Sllv.ExtentHeight;
this.Sllv.ScrollToVerticalOffset(d);
} private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
{
Robot.Width = this.ActualWidth;
foreach(var o in Robot.Children)
{
(o as UserControl).Width = this.ActualWidth;
}
}
//以上负责自适应大小
private async void label_MouseDown(object sender, MouseButtonEventArgs e){
//待会处理机器人事件时用到
}

接着是聊天气泡,可以分为机器人(在左边)、自己(在右边)以下是XAML:

机器人:(名称及头像可以自己定义)

 <UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Lemon_App"
x:Class="Lemon_App.Robot"
mc:Ignorable="d" Height="Auto" Width="Auto">
<Grid> <Border x:Name="Image" BorderThickness="0" HorizontalAlignment="Left" Margin="12,12,0,0" Width="30" CornerRadius="50" Height="30" VerticalAlignment="Top">
<Border.Background>
<ImageBrush ImageSource="/Lemon App;component/Page/Lemon App Ico.ico"/>
</Border.Background>
<!--ed:RegularPolygon Fill="White" InnerRadius="0.47211" Margin="5" PointCount="5" Stretch="Fill"/!-->
</Border>
<Border Width="Auto" Height="Auto" Margin="55,35,0,0" CornerRadius="5" VerticalAlignment="Top" HorizontalAlignment="Left" Background="#FF3399FF">
<TextBlock x:Name="Te" Height="Auto" TextWrapping="Wrap" Width="Auto" d:LayoutOverrides="LeftPosition, RightPosition" Cursor="" Margin="6" Foreground="White" FontSize="14" Text="欢迎回来"/>
</Border>
<TextBlock Margin="50,15,40,35.78" TextWrapping="Wrap" Text="小萌机器人" Foreground="#FF2D2D30"/>
<Border HorizontalAlignment="Left" Height="16" Margin="46,38,0,0" VerticalAlignment="Top" Width="10" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="-60"/>
<TranslateTransform/>
</TransformGroup>
</Border.RenderTransform>
<Path Data="M68.2,31.8c-2.3-2.3-6.1-2.3-8.4,0l-56,56C0,91.6,2.7,98,8,98h112c5.3,0,8-6.4,4.2-10.2L68.2,31.8z" Fill="#FF3399FF" Stretch="Fill" Margin="0,0,0,-2.912"/>
</Border> </Grid>
</UserControl>

事件处理代码:

     public partial class Robot : UserControl
{
public Robot()
{
InitializeComponent();
RenderOptions.SetBitmapScalingMode(Image, BitmapScalingMode.Fant);
}
public Robot(string Text)
{
InitializeComponent();
Te.Text = Text;
RenderOptions.SetBitmapScalingMode(Image, BitmapScalingMode.Fant);
}
}

接下来是自己的XAML:

 <UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Lemon_App"
x:Class="Lemon_App.User"
mc:Ignorable="d" Height="Auto" Width="Auto" Loaded="UserControl_Loaded">
<Grid> <Border x:Name="bd" BorderThickness="0" HorizontalAlignment="Right" Margin="0,12,12,0" Width="30" CornerRadius="50" Height="30" VerticalAlignment="Top" Background="#FF007ACC"/>
<Border Width="Auto" Height="Auto" Margin="0,35,55,0" CornerRadius="5" VerticalAlignment="Top" HorizontalAlignment="Right" Background="#FF3399FF">
<TextBlock x:Name="Te" Height="Auto" TextWrapping="Wrap" Width="Auto" d:LayoutOverrides="LeftPosition, RightPosition" Cursor="" Margin="6" Foreground="White" FontSize="14" Text="啦啦啦"/>
</Border>
<Grid HorizontalAlignment="Right" Height="18" Margin="0,16,45,0" VerticalAlignment="Top" Width="Auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="UName" Margin="0,0,1.636,0" TextWrapping="Wrap" Text="小萌机器人" Foreground="#FF2D2D30" HorizontalAlignment="Right" Width="Auto"/>
</Grid>
<Border HorizontalAlignment="Right" Height="16" Margin="0,38,46,0" VerticalAlignment="Top" Width="10" RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<TransformGroup>
<RotateTransform Angle="60"/>
<TranslateTransform/>
</TransformGroup>
</Border.RenderTransform>
<Path Data="M68.2,31.8c-2.3-2.3-6.1-2.3-8.4,0l-56,56C0,91.6,2.7,98,8,98h112c5.3,0,8-6.4,4.2-10.2L68.2,31.8z" Fill="#FF3399FF" Stretch="Fill" Margin="0,0,0,-2.912"/>
</Border> </Grid>
</UserControl>

事件处理代码:

     public partial class User : UserControl
{
public User()
{
InitializeComponent();
}
public User(String Text)
{
InitializeComponent();
RenderOptions.SetBitmapScalingMode(bd, BitmapScalingMode.Fant);
Te.Text = Text;
} private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (System.IO.File.Exists(He.Settings.UserImage))
{
var image = new System.Drawing.Bitmap(He.Settings.UserImage);
bd.Background = new ImageBrush(image.ToImageSource());
}
UName.Text = He.Settings.RobotName;
}
}

其中的He.Settings.UserImage可以替换成你的图像路径,或直接在XAML中定义

二、编码

我们有了KEY就可以向机器人发送请求惹:

http://www.tuling123.com/openapi/api?key={0}&info={1}&userid={2}

{0} : 你注册的KEY

{1} : 对机器人说的话

{2} :(选填,但最好还是填写,用于辨认用户)用户名称或ID

接下来就要对机器人发回的数据进行解码

首先要识别他发回的是什么类型的:(简单的文本或链接)

状态码位于json数据的["code"]处

简单的文本处理:

  if ((string)obj["code"] == "" || obj["code"].ToString() == "")
{
User U = new User(textBox1.Text)
{
Width = Robot.ActualWidth,Opacity =
};
Robot Rb = new Robot((string)obj["text"])
{
Width = Robot.ActualWidth, Opacity =
};
Robot.Children.Add(U);
Robot.Children.Add(Rb);
var b = new DoubleAnimation(, TimeSpan.FromSeconds(0.2));
U.BeginAnimation(OpacityProperty, b);
Rb.BeginAnimation(OpacityProperty, b);
}

链接处理:

  else if ((string)obj["code"] == "")
{
string i = (string)obj["text"];
User Uu = new User(textBox1.Text)
{
Opacity = ,
Width = Robot.ActualWidth
};
Lemon_App.Robot Rbu = new Lemon_App.Robot((string)obj["url"] + i)
{
Opacity = ,
Width = Robot.ActualWidth,
ToolTip = (string)obj["url"].ToString()
};
Rbu.MouseDown += Rbu_MouseDown;
Robot.Children.Add(Uu);
Robot.Children.Add(Rbu);
var b = new DoubleAnimation(, TimeSpan.FromSeconds(0.2));
Uu.BeginAnimation(OpacityProperty, b);
Rbu.BeginAnimation(OpacityProperty, b);
}

附一只事件处理代码,用于处理用户点击链接时打开浏览器:

        private void Rbu_MouseDown(object sender, MouseButtonEventArgs e)
{
Process.Start((sender as Grid).ToolTip.ToString());
}

这样我们就完成了编码工作。

三、测试

接下来就可以和机器人愉快地聊天啦o(* ̄▽ ̄*)ブ

测试成功!( •̀ ω •́ )y

已更新

本教程示例代码(WPF):https://github.com/TwilightLemon/Lime

这次的教程到这里就结束啦,如果喜欢就快快关注我吧!

日常API之图灵聊天机器人的更多相关文章

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

    之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步 ...

  2. 【Python+postman接口自动化测试】(8)以青云客机聊天器人和图灵聊天机器人接口示范python发送get和post

    以青云客机器人和图灵机器人接口示范python发送get和post 发送请求,我们这里主要使用Python的一个第三方包(需要先安装):requests. Python3自带的http.client和 ...

  3. vue-miniQQ——基于Vue2实现的仿手机QQ单页面应用(接入了聊天机器人,能够进行正常对话)

    使用Vue2进行的仿手机QQ的webapp的制作,作品由个人独立开发,源码中进行了详细的注释. 由于自己也是初学Vue2,所以注释写的不够精简,请见谅. 项目地址 https://github.com ...

  4. 使用图灵机器人API实现聊天机器人

    使用图灵机器人的API需要先注册,获取key才行,这我就不说了,自己到http://www.tuling123.com/注册一个账号即可. 下面就是一个简单的python调用API实现聊天机器人的简易 ...

  5. QQ 聊天机器人API

    QQ机器人是腾讯陆续推出的的人工智能聊天机器人的总称. 都说小Q妹妹聪明好学,我们能够教她说话.也能够请他帮忙查询邮编.手机号,或者解释成语.翻译成语,据说她还会查询手机号码归属地.应用科学计算器. ...

  6. 微信的自动回复&接入聊天机器人

    今天偶尔发现了一个有趣的python库--itchat,可以实现微信的自动回复.防撤回,结合图灵机器人还能实现聊天机器人的作用 简单介绍一下配置与工具 win7旗舰版  pycharm  python ...

  7. Python进阶开发之网络编程,socket实现在线聊天机器人

    系列文章 √第一章 元类编程,已完成 ; √第二章 网络编程,已完成 ; 本文目录 什么是socket?创建socket客户端创建socket服务端socket工作流程图解socket公共函数汇总实战 ...

  8. 【Python撩妹合集】微信聊天机器人,推送天气早报、睡前故事、精美图片分享

    福利时间,福利时间,福利时间 如果你还在为不知道怎么撩妹而烦恼,不知道怎么勾搭小仙女而困惑,又或者不知道怎么讨女朋友欢心而长吁短叹. 那么不要犹豫徘徊,往下看.接下来我会分享怎么使用 Python 实 ...

  9. QQ 聊天机器人小薇 2.1.0 发布!

    本次发布加入了支持茉莉机器人,并且更容易搭建开发环境,在线显示登录二维码~ 简介 XiaoV(小薇)是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动: 监听多个 QQ 群消息 ...

随机推荐

  1. random seed()函数

    用seed()生成随机数字,生成的法则与seed内部的数字相关,如果数字相同,则生成的随机数是相同的. 刷题宝上面的题目: >>> import random >>> ...

  2. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (3)

    Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...

  3. viewport预备知识

    dpr === dppx dpr:device pixel ratio 设备像素比 dppx:Number of dots per px unit 每像素有多少点 . 1dppx = 96dpi dp ...

  4. js--Dom Bom操作

    –      基础 –     内置对象 ● String对象:处理所有的字符串操作 ● Math对象:处理所有的数学运算 ● Date对象:处理日期和时间的存储.转化和表达 ● Array对象:提供 ...

  5. MongoDB建立主从复制小案例(一主一从)

    花了两天学习了mongoDB, 今天接触到了mongo的主从配置, 把它记下来 1. 开启两个mongo服务器(用于一主一从, 没有加安全验证相关参数 : 可以使用mongd-help查看) mong ...

  6. burpsuite截断绕过前端限制上传一句话

    设置代理,这里就不说了 打开上传界面 burpsuite开启拦截,上传lurp.hpg 在burp找到上传文件的格式改回原来一句话的格式 上传= =

  7. HDU6235-Permutation-水题-2017中国大学生程序设计竞赛-哈尔滨站-重现赛

    Permutation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  8. powerdesign

  9. JavaScript八张思维导图—基本语句

    JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...

  10. solr单机版安装与基本部署

    安装solr准备工作: linux/tomcat/jdk solr单机版的安装 1.解压缩tomcat安装包 tar -zxf tomcat-xxx.tar.gz 2.创建文件夹:mkdir /usr ...