Unity 接入有道智云AI - 文档翻译
目录
一、接口介绍
二、申请App ID、密钥
1.登录有道智云AI开放平台,进入控制台
2.在应用总览中创建应用,填写相关内容
3.获取应用ID、密钥
三、在Unity中应用
1. 定义请求数据结构
2.定义响应数据结构
3.封装调用函数
4.测试
一、接口介绍
文档翻译API接口提供有道的文档翻译服务,只需要通过调用文档翻译API,传入文档的Base64编码,指定源语言与目标语言,通过POST请求方式,就可以将文档中的文字内容进行翻译。
协议须知:
二、申请App ID、密钥
1.登录有道智云AI开放平台,进入控制台
2.在应用总览中创建应用,填写相关内容
3.获取应用ID、密钥
三、在Unity中应用
1. 定义请求数据结构
根据官方文档中接口调用参数说明定义对应的数据结构:
/// <summary>
/// 上传请求数据结构
/// </summary>
public class UploadRequest
{/// <summary>/// 待翻译文档 Base64编码 大小限制40M/// </summary>public string q;/// <summary>/// 文档名称/// </summary>public string fileName;/// <summary>/// 文档类型/// docx/pdf/doc/jpg/png/bmp/ppt/pptx/// </summary>public string fileType;/// <summary>/// 源语言/// en/zh-CHS/// </summary>public string langFrom;/// <summary>/// 目标语言/// en/zh-CHS/// </summary>public string langTo;/// <summary>/// 应用ID/// </summary>public string appKey;/// <summary>/// UUID 唯一通用识别码/// </summary>public string salt;/// <summary>/// 当前UTC时间戳 单位秒/// </summary>public string curtime;/// <summary>/// 签名 sha256 应用ID+input+salt+curtime+应用密钥/// </summary>public string sign;/// <summary>/// 服务器响应类型/// </summary>public string docType;/// <summary>/// 签名类型/// </summary>public string signType;public UploadRequest(string q, string fileName, string fileType, string langFrom, string langTo, string appKey, string secret){this.fileName = fileName;this.fileType = fileType;this.langFrom = langFrom;this.langTo = langTo;this.appKey = appKey;salt = DateTime.Now.Millisecond.ToString();//获取时间戳TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);long mills = (long)ts.TotalMilliseconds;curtime = Convert.ToString(mills / 1000);//获取签名string input = q.Length <= 20 ? q : (q.Substring(0, 10) + q.Length + q.Substring(q.Length - 10, 10));string signStr = appKey + input + salt + curtime + secret;byte[] inputBytes = Encoding.UTF8.GetBytes(signStr);byte[] hashedBytes = new SHA256CryptoServiceProvider().ComputeHash(inputBytes);sign = BitConverter.ToString(hashedBytes).Replace("-", "");//UrlEncode编码this.q = HttpUtility.UrlEncode(q);docType = "json";signType = "v3";}public override string ToString(){return string.Format("q={0}&fileName={1}&fileType={2}&langFrom={3}&langTo={4}&appKey={5}&salt={6}&curtime={7}&sign={8}&docType={9}&signType={10}",q, fileName, fileType, langFrom, langTo, appKey, salt, curtime, sign, docType, signType);}
}
/// <summary>
/// 进度查询请求数据结构
/// </summary>
public class QueryRequest
{/// <summary>/// 文档流水号/// </summary>public string flownumber;/// <summary>/// 应用ID/// </summary>public string appKey;/// <summary>/// UUID/// </summary>public string salt;/// <summary>/// 当前UTC时间戳/// </summary>public string curtime;/// <summary>/// 签名/// </summary>public string sign;/// <summary>/// 服务器响应类型/// </summary>public string docType;/// <summary>/// 签名类型/// </summary>public string signType;public QueryRequest(string flownumber, string appKey, string secret){this.flownumber = flownumber;this.appKey = appKey;salt = DateTime.Now.Millisecond.ToString();//获取时间戳TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);long mills = (long)ts.TotalMilliseconds;curtime = Convert.ToString(mills / 1000);//获取签名string input = flownumber.Length <= 20 ? flownumber : (flownumber.Substring(0, 10) + flownumber.Length + flownumber.Substring(flownumber.Length - 10, 10));string signStr = appKey + input + salt + curtime + secret;byte[] inputBytes = Encoding.UTF8.GetBytes(signStr);byte[] hashedBytes = new SHA256CryptoServiceProvider().ComputeHash(inputBytes);sign = BitConverter.ToString(hashedBytes).Replace("-", "");docType = "json";signType = "v3";}public override string ToString(){return string.Format("flownumber={0}&appKey={1}&salt={2}&curtime={3}&sign={4}&docType={5}&signType={6}",flownumber, appKey, salt, curtime, sign, docType, signType);}
}
/// <summary>
/// 文档下载请求数据结构
/// </summary>
public class DownloadRequest : QueryRequest
{/// <summary>/// 下载类型 word/ppt/// </summary>public string downloadFileType;public DownloadRequest(string downloadFileType, string flownumber, string appKey, string secret) : base(flownumber, appKey, secret){this.downloadFileType = downloadFileType;}public override string ToString(){return string.Format("flownumber={0}&downloadFileType={1}&appKey={2}&salt={3}&curtime={4}&sign={5}&docType={6}&signType={7}",flownumber, downloadFileType, appKey, salt, curtime, sign, docType, signType);}
}
2.定义响应数据结构
根据官方文档中接口返回结果参数说明定义对应的数据结构:
#region 响应数据结构
/// <summary>
/// 上传响应数据结构
/// </summary>
public class UploadResponse
{/// <summary>/// 错误码/// </summary>public string errorCode;/// <summary>/// 文档流水号/// </summary>public string flownumber;
}
/// <summary>
/// 进度查询响应数据结构
/// </summary>
public class QueryResponse
{/// <summary>/// 错误码/// </summary>public string errorCode;/// <summary>/// 进度状态码/// </summary>public string status;/// <summary>/// 进度状态描述/// </summary>public string statusString;
}
/// <summary>
/// 文档下载响应数据结构
/// </summary>
public class DownloadResponse
{/// <summary>/// 错误码/// </summary>public string errorCode;
}
#endregion
3.封装调用函数
using System;
using System.IO;
using System.Net;
using System.Web;
using System.Text;
using UnityEngine;
using System.Security.Cryptography;/// <summary>
/// 文档翻译
/// </summary>
public class FileTrans
{//应用ID和密钥 在有道智云AI开放平台创建应用获取private static readonly string appid = "";private static readonly string secret = "";public static UploadResponse Upload(string q, string fileName, string fileType, string langFrom, string langTo){string url = "https://openapi.youdao.com/file_trans/upload";string result = "";HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";string postData = new UploadRequest(q, fileName, fileType, langFrom, langTo, appid, secret).ToString();byte[] data = Encoding.UTF8.GetBytes(postData);request.ContentLength = data.Length;using (Stream requestStream = request.GetRequestStream()){requestStream.Write(data, 0, data.Length);requestStream.Close();}HttpWebResponse response = (HttpWebResponse)request.GetResponse();using(StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){result = reader.ReadToEnd();}Debug.Log("上传结果: " + result);return JsonUtility.FromJson<UploadResponse>(result);}public static QueryResponse Query(string flownumber){string url = "https://openapi.youdao.com/file_trans/query";string result = "";HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";string postData = new QueryRequest(flownumber, appid, secret).ToString();byte[] data = Encoding.UTF8.GetBytes(postData);request.ContentLength = data.Length;using (Stream requestStream = request.GetRequestStream()){requestStream.Write(data, 0, data.Length);requestStream.Close();}HttpWebResponse response = (HttpWebResponse)request.GetResponse();using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){result = reader.ReadToEnd();}Debug.Log("查询结果: " + result);return JsonUtility.FromJson<QueryResponse>(result);}public static string Download(string flownumber, string downloadFileType){string url = "https://openapi.youdao.com/file_trans/download";string result = "";HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded";string postData = new DownloadRequest(downloadFileType, flownumber, appid, secret).ToString();byte[] data = Encoding.UTF8.GetBytes(postData);request.ContentLength = data.Length;using (Stream requestStream = request.GetRequestStream()){requestStream.Write(data, 0, data.Length);requestStream.Close();}HttpWebResponse response = (HttpWebResponse)request.GetResponse();using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8)){result = reader.ReadToEnd();}Debug.Log("下载结果: " + result);return result;}
}
4.测试
准备一个pdf英文文档
测试代码:
using System;
using System.IO;
using UnityEngine;public class FileTransExample : MonoBehaviour
{//用于记录文档流水号private string flownumber;private void OnGUI(){if(GUILayout.Button("上传", GUILayout.Width(200f), GUILayout.Height(50f))){byte[] data = File.ReadAllBytes(Application.dataPath + "/test.pdf");string q = Convert.ToBase64String(data);var response = FileTrans.Upload(q, "test", "pdf", "en", "zh-CHS");flownumber = response.flownumber;}if (GUILayout.Button("查询", GUILayout.Width(200f), GUILayout.Height(50f))){FileTrans.Query(flownumber);}if (GUILayout.Button("下载", GUILayout.Width(200f), GUILayout.Height(50f))){FileTrans.Download(flownumber, "word");}}
}
上传结果:
查询结果:
下载结果:
Unity 接入有道智云AI - 文档翻译相关推荐
- 有道智云智能语音服务全面升级 最多可支持44种语言和方言
原标题:有道智云智能语音服务全面升级 最多可支持44种语言和方言 有道智云·AI开放平台智能语音服务全面升级,支持40多个小语种的语音识别.及翻译!现在开通注册即送50元体验金免费体验!戳一下了解详情 ...
- [zotero] PDF translate 有道智云API接入
申请步骤 登录 https://ai.youdao.com/login.s 登录后 第一步:我们先创建应用 业务指南 → 应用总览 → 创建应用 应用名称:任意 选择服务:自然语言翻译服务 → 文本翻 ...
- 【活动公告】Hackathon —— 腾讯云AI API接入迷你赛
一. 活动简介 编程马拉松(Hackathon)是将热爱软硬件开发的人聚集起来所举办的一项比赛,本次活动由腾讯云AI联合云+社区发起,希望让广大开发者体验到腾讯云AI的魅力.比赛过程中,参赛者可以尽情 ...
- Unity接入 阿里云OSS 腾讯云Cos的SDK,实现上传文件功能
概念 Bucket(存储空间):Bucket是用户用来管理所存储Object的存储空间.每个用户可以拥有多个Bucket.Bucket的名称在OSS的范围内必须是全局唯一的,一旦创建之后无法修改名称. ...
- python文本自动伪原创_Python调用有道智云文本翻译API接口实现“智能”伪原创
随着人工智能的火热,互联网热门韭菜行业SEO也貌似进入了AI的快车道,尤其以智能伪原创超级热门,你会发现几乎是个seo工具网站都挂着智能伪原创的"狗头"招牌,抱着人无我有,人有我优 ...
- python翻译成中文_Python调用有道智云文本翻译API接口实现“智能”伪原创
>> 开始伪原创中..\")"],[20,"\n","24:\"OL7j\"|36:131"],[20,&q ...
- c++调用python接口_Python调用有道智云文本翻译API接口实现“智能”伪原创
>> 开始伪原创中..\")"],[20,"\n","24:\"OL7j\"|36:131"],[20,&q ...
- 在边缘AI与云AI之间寻找平衡
边缘的AI允许通过本地化处理进行实时机器学习,从而实现即时数据处理,详细的安全性和增强的客户体验.同时,许多企业正在寻求将AI推入云端,这可以减少实施障碍,改善知识共享并支持更大的模型.前进的道路在于 ...
- 云+AI+5G时代,华为云已准备好多元化云服务架构
[摘要] 以多元化的云服务架构加速产业智能化创新,实现普惠AI. [中国,深圳,6月5日] "Cloud2.0时代,企业需要多元化云服务架构.一方面,企业成为云化主角,企业核心系统加速上云: ...
- 腾讯云 AI 在新基建领域下一盘什么大棋
从阿里的3年2000亿到腾讯的5年5000亿,头部互联网公司正在加大资源投入,全面布局新基建. 这周末,投资总额超过450亿的腾讯长三角人工智能超算中心及产业基地在上海松江开工的新闻刷爆朋友圈.这是继 ...
最新文章
- codeforces数学1700[CodeForces 1336B[分类讨论+二分]CodeForces - 1301C[组合计数的减法原理]]
- 消息中间件—RabbitMQ(集群原理与搭建篇)
- Python剑指offer:数组中重复的数字
- python bosonnlp_BosonNLP分词技术解密
- SAP Spartacus ConsentTemplate 数据结构的暴露逻辑
- mysql alter table if_MySQL中的alter table命令的基本使用方法及提速优化
- Windows环境下Anaconda-Navigator出现闪退、无法打开问题的解决方案记录
- mysql之 OPTIMIZE TABLE整理碎片
- Leetcode: Pascal's Triangle II
- 猫眼(门镜)中的光学
- java毕业设计开题报告论文基于JavaWeb项目实现的高校学生在线选课系统
- 802.11a/b/g/n/ac速率表--防迷路,通过博客收藏
- 机器学习之过拟合与欠拟合
- 如图标黄的是什么意思?
- 华为超越三星拿下第一!2019年全球5G手机出货量榜单揭晓
- 输入账号 密码 实现登录功能
- Android HIDL HAL 接口定义语言详解
- 服务攻防——数据库安全之未授权访问、弱口令
- 华为手机usb计算机连接在哪里设置密码,简单十步设置Huawei Share,手机与电脑传输从此告别数据线...
- 计算机配置动态硬盘,如何把硬盘的类型从动态变成基本?