首页 > 其他分享 >日常API之图灵聊天机器人

日常API之图灵聊天机器人

时间:2024-11-25 09:48:34浏览次数:10  
标签:11 string Text 机器人 Robot 图灵 API new sender

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

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

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

  一、布局

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

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

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

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

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

复制代码
 1 <UserControl
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 6              xmlns:local="clr-namespace:Lemon_App"
 7              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"
 8              mc:Ignorable="d" Loaded="UserControl_Loaded"  SizeChanged="UserControl_SizeChanged">
 9     <Grid>
10         <Border Height="1" VerticalAlignment="Bottom" Background="#FFE6E6E6" Margin="0,0,0,90"/>
11         <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}"/>
12         <Border BorderThickness="1" Background="#B2007ACC" CornerRadius="5" HorizontalAlignment="Right" Width="57" Height="30" VerticalAlignment="Bottom" Margin="3">
13             <Label x:Name="label" Content="发送" Margin="9.919,1.833,4.331,-1" Foreground="White" MouseDown="label_MouseDown" Height="27.167" VerticalAlignment="Top"/>
14         </Border>
15         <ScrollViewer x:Name="Sllv" PanningMode="Both" Margin="0,0,0,90" BorderBrush="{x:Null}" Template="{DynamicResource SCS}">
16             <WrapPanel x:Name="Robot" Height="Auto"  SizeChanged="Robot_SizeChanged" Width="{Binding ActualWidth, ElementName=userControl, Mode=OneWay}"/>
17         </ScrollViewer>
18     </Grid>
19 </UserControl>
复制代码

部分事件处理代码:

复制代码
 1  public IMBOX()
 2         {
 3             InitializeComponent();
 4         }
 5 
 6         private void UserControl_Loaded(object sender, RoutedEventArgs e)
 7         {
 8             Robot.Width = this.ActualWidth;
 9         }
10   private void textBox1_KeyDown(object sender, KeyEventArgs e)
11         {
12             if (e.Key == Key.Enter)
13             {
14                 label_MouseDown(null, null);
15             }
16         }
17 
18         private void Robot_SizeChanged(object sender, SizeChangedEventArgs e)
19         {
20             double d = this.Sllv.ActualHeight + this.Sllv.ViewportHeight + this.Sllv.ExtentHeight;
21             this.Sllv.ScrollToVerticalOffset(d);
22         }
23 
24         private void UserControl_SizeChanged(object sender, SizeChangedEventArgs e)
25         {
26             Robot.Width = this.ActualWidth;
27             foreach(var o in Robot.Children)
28             {
29                 (o as UserControl).Width = this.ActualWidth;
30             }
31         }
32 //以上负责自适应大小
33 private async void label_MouseDown(object sender, MouseButtonEventArgs e){
34   //待会处理机器人事件时用到
35 }
复制代码

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

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

复制代码
 1 <UserControl
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 6              xmlns:local="clr-namespace:Lemon_App"
 7              x:Class="Lemon_App.Robot"
 8              mc:Ignorable="d" Height="Auto" Width="Auto">
 9     <Grid>
10 
11         <Border x:Name="Image" BorderThickness="0" HorizontalAlignment="Left" Margin="12,12,0,0" Width="30" CornerRadius="50" Height="30" VerticalAlignment="Top">
12             <Border.Background>
13                 <ImageBrush ImageSource="/Lemon App;component/Page/Lemon App Ico.ico"/>
14             </Border.Background>
15             <!--ed:RegularPolygon Fill="White" InnerRadius="0.47211" Margin="5" PointCount="5" Stretch="Fill"/!-->
16         </Border>
17         <Border Width="Auto" Height="Auto" Margin="55,35,0,0" CornerRadius="5" VerticalAlignment="Top" HorizontalAlignment="Left" Background="#FF3399FF">
18             <TextBlock x:Name="Te" Height="Auto" TextWrapping="Wrap" Width="Auto" d:LayoutOverrides="LeftPosition, RightPosition" Cursor="" Margin="6" Foreground="White" FontSize="14" Text="欢迎回来"/>
19         </Border>
20         <TextBlock Margin="50,15,40,35.78" TextWrapping="Wrap" Text="小萌机器人" Foreground="#FF2D2D30"/>
21         <Border HorizontalAlignment="Left" Height="16" Margin="46,38,0,0" VerticalAlignment="Top" Width="10" RenderTransformOrigin="0.5,0.5">
22             <Border.RenderTransform>
23                 <TransformGroup>
24                     <ScaleTransform/>
25                     <SkewTransform/>
26                     <RotateTransform Angle="-60"/>
27                     <TranslateTransform/>
28                 </TransformGroup>
29             </Border.RenderTransform>
30             <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"/>
31         </Border>
32 
33     </Grid>
34 </UserControl>
复制代码

事件处理代码:

复制代码
 1     public partial class Robot : UserControl
 2     {
 3         public Robot()
 4         {
 5             InitializeComponent();
 6             RenderOptions.SetBitmapScalingMode(Image, BitmapScalingMode.Fant);
 7         }
 8         public Robot(string Text)
 9         {
10             InitializeComponent();
11             Te.Text = Text;
12             RenderOptions.SetBitmapScalingMode(Image, BitmapScalingMode.Fant);
13         }
14     }
复制代码

接下来是自己的XAML:

复制代码
 1 <UserControl
 2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
 5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
 6              xmlns:local="clr-namespace:Lemon_App"
 7              x:Class="Lemon_App.User"
 8              mc:Ignorable="d" Height="Auto" Width="Auto" Loaded="UserControl_Loaded">
 9     <Grid>
10 
11         <Border x:Name="bd" BorderThickness="0" HorizontalAlignment="Right" Margin="0,12,12,0" Width="30" CornerRadius="50" Height="30" VerticalAlignment="Top" Background="#FF007ACC"/>
12         <Border Width="Auto" Height="Auto" Margin="0,35,55,0" CornerRadius="5" VerticalAlignment="Top" HorizontalAlignment="Right" Background="#FF3399FF">
13             <TextBlock x:Name="Te" Height="Auto" TextWrapping="Wrap" Width="Auto" d:LayoutOverrides="LeftPosition, RightPosition" Cursor="" Margin="6" Foreground="White" FontSize="14" Text="啦啦啦"/>
14         </Border>
15         <Grid HorizontalAlignment="Right" Height="18" Margin="0,16,45,0" VerticalAlignment="Top" Width="Auto">
16             <Grid.ColumnDefinitions>
17                 <ColumnDefinition Width="Auto"/>
18                 <ColumnDefinition Width="Auto"/>
19             </Grid.ColumnDefinitions>
20             <TextBlock x:Name="UName" Margin="0,0,1.636,0" TextWrapping="Wrap" Text="小萌机器人" Foreground="#FF2D2D30" HorizontalAlignment="Right" Width="Auto"/>
21         </Grid>
22         <Border HorizontalAlignment="Right" Height="16" Margin="0,38,46,0" VerticalAlignment="Top" Width="10" RenderTransformOrigin="0.5,0.5">
23             <Border.RenderTransform>
24                 <TransformGroup>
25                     <RotateTransform Angle="60"/>
26                     <TranslateTransform/>
27                 </TransformGroup>
28             </Border.RenderTransform>
29             <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"/>
30         </Border>
31 
32     </Grid>
33 </UserControl>
复制代码

事件处理代码:

复制代码
 1     public partial class User : UserControl
 2     {
 3         public User()
 4         {
 5             InitializeComponent();
 6         }
 7         public User(String Text)
 8         {
 9             InitializeComponent();
10             RenderOptions.SetBitmapScalingMode(bd, BitmapScalingMode.Fant);
11             Te.Text = Text;
12         }
13 
14         private void UserControl_Loaded(object sender, RoutedEventArgs e)
15         {
16             if (System.IO.File.Exists(He.Settings.UserImage))
17             {
18                 var image = new System.Drawing.Bitmap(He.Settings.UserImage);
19                 bd.Background = new ImageBrush(image.ToImageSource());
20             }
21             UName.Text = He.Settings.RobotName;
22         }
23     }
复制代码

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

二、编码

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

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

{0} : 你注册的KEY

{1} : 对机器人说的话

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

 

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

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

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

简单的文本处理:

复制代码
 1  if ((string)obj["code"] == "100000" || obj["code"].ToString() == "40002")
 2                 {
 3                     User U = new User(textBox1.Text)
 4                     {
 5                         Width = Robot.ActualWidth,Opacity = 0
 6                     };
 7                     Robot Rb = new Robot((string)obj["text"])
 8                     {
 9                         Width = Robot.ActualWidth, Opacity = 0
10                     };
11                     Robot.Children.Add(U);
12                     Robot.Children.Add(Rb);
13                     var b = new DoubleAnimation(1, TimeSpan.FromSeconds(0.2));
14                     U.BeginAnimation(OpacityProperty, b);
15                     Rb.BeginAnimation(OpacityProperty, b);
16                 }
复制代码

链接处理:

复制代码
 1  else if ((string)obj["code"] == "200000")
 2                 {
 3                     string i = (string)obj["text"];
 4                     User Uu = new User(textBox1.Text)
 5                     {
 6                         Opacity = 0,
 7                         Width = Robot.ActualWidth
 8                     };
 9                     Lemon_App.Robot Rbu = new Lemon_App.Robot((string)obj["url"] + i)
10                     {
11                         Opacity = 0,
12                         Width = Robot.ActualWidth,
13                         ToolTip = (string)obj["url"].ToString()
14                     };
15                     Rbu.MouseDown += Rbu_MouseDown;
16                     Robot.Children.Add(Uu);
17                     Robot.Children.Add(Rbu);
18                     var b = new DoubleAnimation(1, TimeSpan.FromSeconds(0.2));
19                     Uu.BeginAnimation(OpacityProperty, b);
20                     Rbu.BeginAnimation(OpacityProperty, b);
21                 }
复制代码

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

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

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

三、测试

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

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

 

已更新

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

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

 

2024-11-25 09:33:05【出处】:https://www.cnblogs.com/TwilightLemon/p/7232998.html

=======================================================================================

标签:11,string,Text,机器人,Robot,图灵,API,new,sender
From: https://www.cnblogs.com/mq0036/p/18566979

相关文章

  • 视野修炼-技术周刊第111期 | 读文件 API 性能对比
    欢迎来到第111期的【视野修炼-技术周刊】,下面是本期的精选内容简介......
  • Pulsar 入门实战(6)--Rest API
    RestAPI是broker提供的关联API,JavaadminAPI和pulsar-adminCLI底层都是使用的RestAPI;本文主要介绍其基本使用,文中所使用到的软件版本:Pulsar3.3.0。1、Admin1.1、BOOKIES1.1.1、列出所有bookiecurlhttp://10.49.196.30:8080/admin/v2/bookies/all1.2、BROKER......
  • 如何利用ros搭建虚拟场景通过仿真机器人完成一次简单的SLAM建图、导航规划(超简单)?——
    一:什么是SLAM,SLAM和导航规划又有什么关系?SLAM(SimultaneousLocalizationandMapping,即同时定位与建图)是一种在未知或动态环境中自行驶的重要技术。主要通过设备上的传感器(如激光雷达、深度摄像头、惯性测量单元IMU等)实时感知周围环境,同时估计自身的位姿(位置和朝向)以及构建......
  • BOM – Clipboard API
    前言ClipboardAPI 就是和copyandpaste相关的BOMAPI。 CopyText我们经常能看见这样的交互体验点击Copycode以后,下面的代码就会被copy起来。等同于我们select那些code之后按ctrl+c。这个就是用 ClipboardAPI实现的。<buttonclass="copy-code-bt......
  • HTML5标准提供了哪些新的API?你有用过哪些?
    HTML5标准引入了一系列新的API,极大地扩展了Web开发的功能,使其能够创建更丰富的、更具交互性的Web应用程序。以下是一些重要的HTML5API:多媒体相关:<audio>和<video>:用于在网页中嵌入音频和视频。我经常在生成包含多媒体内容的网页代码示例时使用这两个标签。Web......
  • 第十四章 JDK 8新的日期和时间 API
    目录一、旧版日期时间API存在的问题二、新日期时间API介绍三、JDK8的日期和时间类四、JDK8的时间格式化与解析五、JDK8的Instant类六、JDK8的计算日期时间差类七、JDK8的时间校正器八、JDK8设置日期时间的时区一、旧版日期时间API存在的问题1.设计......
  • Windows 的复制和粘贴功能是基于 文件系统操作(如 CopyFile 或 MoveFile API)来实现的,而
    在Windows操作系统中,复制粘贴功能和robocopy(RobustFileCopy)技术的使用场景和目标不同,这也是为什么微软在日常用户界面中选择使用传统的复制粘贴(Copy-Paste)功能,而不是直接依赖robocopy技术的原因。下面我将从几个关键角度进行详细分析。1. 目标用户与应用场景不同复制粘......
  • Vue 3组件间通信全解:选项式API vs 组合式API
    在Vue3中,组件间通信的方式可以分为两大类:选项式API(OptionsAPI)和组合式API(CompositionAPI)。每种API风格都有其特点和适用场景,下面将分别介绍这两种API风格下的组件间通信方法。选项式API(OptionsAPI)1.props与emitprops用于父组件向子组件传递数据,而emit用于子组件向父......
  • k8s阶段03 持久卷, PV和PVC, CSI存储方案示例csi-driver-nfs, OpenEBS, ConfigMap, Se
    2持久卷PV和PVC在Pod级别定义存储卷有两个弊端卷对象的生命周期无法独立于Pod而存在用户必须要足够熟悉可用的存储及其详情才能在Pod上配置和使用卷PV和PVC可用于降低这种耦合关系PV(PersistentVolume)是集群级别的资源,负责将存储空间引入到集群中,通常由管理员定义......
  • 深入理解JDBC API:从SQL注入到PreparedStatement的安全解决方案
    深入理解JDBCAPI:从SQL注入到PreparedStatement的安全解决方案引言在现代Web应用开发中,数据库操作是不可或缺的一部分。Java数据库连接(JDBC)API为Java开发者提供了一种与数据库交互的标准方式。然而,随着应用的复杂性增加,安全问题也随之而来。其中,SQL注入是最常见且危险的安全漏洞......