小牛翻译:图片翻译API+语音翻译API调用,保姆级使用教程

一、小牛翻译接口简介

图片翻译API

  1. 支持格式:png、jpg、jpeg、bmp
  2. 支持图片尺寸:128px*128px~2048px*2048px
  3. 支持最大图片大小:10M
  4. 支持的语种:中、英、日、韩、俄

语音翻译API

  1. 支持格式:MP3、WAV
  2. 支持语音时长:60s
  3. 支持最大文件大小:2M
  4. 支持的语种:中、英、日、韩、俄

如需要更多语种或更多API接口权限,可以联系小牛官网客服咨询。

备注

①小牛官网提供在线试用功能,可以查看翻译效果,满意再写代码调用。

试用链接:小牛翻译开放平台 - 机器翻译找小牛

②小牛官网,每个账号每天赠送100积分,相当于20万字符流量/34页文档页数/34张图片/25次语音翻译。在线和API调用都可使用。(每日自动到账,无需手动领取)

③如需使用文本翻译+文档翻译的API调用,可参考我之前的文章,里面有详细介绍:小牛翻译API接口的服务开通及使用JAVA进行接口调用实例演示_翻译软件是怎么调用翻译接口的-CSDN博客
 

二、如何调用

1.获取API KEY 和 APP ID

     ①【注册】或【登录】小牛翻译官网账号;

     ②进入【控制台】页面,然后在左侧菜单栏点击【API应用】;

     ③找到所需的API服务【图片API/语音API】,点击【开通】按钮;

     ④即可获取对应的 APIKEY 和 APPID。

2.开始集成

    可參考官网【图片翻译API开发文档】、【语音翻译API开发文档】。

    值得一提的事,小牛是我发现唯一提供终止接口的翻译引擎提供商。文件在翻译过程中,如果停止翻译,不会扣除翻译额度。

三、JAVA集成实例

需要注意的点

1.译后文件类型

图片翻译 API 和语音翻译 API ,获取到翻译后的内容为文本,没有把译后内容直接生成图片或语音的接口。小牛提供的下载接口,图片下载的是docx,语音下载的是txt。

 2.权限字符串

这个稍微麻烦些,不过官网开发文档里有详细的权限字符串生成规则可参考。

3.调用示例

官网有不同开发语言的调用示例可供参考。

图片翻译

代码展示

package com.niutrans.platform.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;

@Slf4j
public class NiuTransImageApiDemoV2 {
    public static String BASE_URL = "https://api.niutrans.com";
    public static String UPLOAD_TRANS_URL = BASE_URL + "/v2/image/translate/upload";//上传并翻译接口 
    public static String GET_INFO_URL = BASE_URL + "/v2/image/translate/status/{file_no}";//获取进度接口
    public static String INTERRUPT_URL = BASE_URL + "v2/image/translate/interrupt/{file_no}";// 终止翻译接口
    public static String DOWNLOAD_URL = BASE_URL + "/v2/image/translate/download/{file_no}";//下载文件接口

    public static String from = "原语语种,例如:zh";
    public static String to = "目标语语种,例如:en";
    public static String apikey = "您的apikey";//在'控制台->API应用'中查看
    public static String appId = "您的appId";//应用唯一标识,在'控制台->API应用'中查看
    public static String filePath = "D:\data\test.jpg";//替换为你要翻译的文件路径
    public static String saveFilePath = "D:\data\";

    public static void main(String[] args) {
        String fileNo = uploadAndTrans();
        JSONObject documentInfo = getDocumentInfo(fileNo);
        while (Integer.parseInt(documentInfo.get("transStatus").toString()) == 103) {
            documentInfo = getDocumentInfo(fileNo);
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (Integer.parseInt(documentInfo.get("transStatus").toString()) == 105) {
            downloadFile(fileNo);
        }
    }

    //上传并翻译文件
    public static String uploadAndTrans() {
        TreeMap<String, Object> requestParamsMap = new TreeMap();
        requestParamsMap.put("from", from);
        requestParamsMap.put("to", to);
        authStrGenerate(requestParamsMap);
        requestParamsMap.put("file", new File(filePath));
        String response = null;
        try {
            response = HttpUtil.post(UPLOAD_TRANS_URL, requestParamsMap);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("上传文档并翻译异常");
        }
        log.info("上传并翻译结果为:{}", response);
        JSONObject jsonObject = JSONUtil.parseObj(response);
        JSONObject dataObject = JSONUtil.parseObj(jsonObject.get("data"));
        return dataObject.get("fileNo").toString();
    }

    //获取文件信息
    public static JSONObject getDocumentInfo(String fileNo) {
        TreeMap<String, Object> requestParamsMap = new TreeMap<>();
        authStrGenerate(requestParamsMap);
        String response = null;
        GET_INFO_URL = GET_INFO_URL.replace("{file_no}", fileNo);
        try {
            response = HttpUtil.get(GET_INFO_URL, requestParamsMap);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("获取文档信息异常");
        }
        log.info("文档信息为:{}", response);
        JSONObject jsonObject = JSONUtil.parseObj(response);
        return JSONUtil.parseObj(JSONUtil.toJsonStr(jsonObject.get("data")));
    }

    //终止翻译中的文件
    public static void interruptTrans(String fileNo) {
        TreeMap<String, Object> requestParamsMap = new TreeMap<>();
        authStrGenerate(requestParamsMap);
        String body = null;
        INTERRUPT_URL = INTERRUPT_URL.replace("{file_no}", fileNo);
        final HttpRequest request = HttpUtil.createRequest(Method.PUT, INTERRUPT_URL);
        request.form(requestParamsMap);
        try (final HttpResponse httpResponse = request.execute()){
            body = httpResponse.body();
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("终止结果:{}", body);
    }


    //下载文件
    public static void downloadFile(String fileNo) {
        TreeMap<String, Object> requestParamsMap = new TreeMap();
        requestParamsMap.put("type", 1);
        authStrGenerate(requestParamsMap);
        DOWNLOAD_URL = DOWNLOAD_URL.replace("{file_no}", fileNo);
        String url = DOWNLOAD_URL + "?" + HttpUtil.toParams(requestParamsMap);
        HttpUtil.downloadFile(url, FileUtil.file(saveFilePath));
    }

    //生成权限字符串
    public static void authStrGenerate(TreeMap<String, Object> requestParamsMap) {
        requestParamsMap.put("appId", appId);
        requestParamsMap.put("apikey", apikey);
        requestParamsMap.put("timestamp", System.currentTimeMillis() + "");
        StringBuilder requestParamsStr = new StringBuilder("");
        Set<String> keys = requestParamsMap.keySet();
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            requestParamsStr.append("&").append(key).append("=").append(requestParamsMap.get(key));
        }
        String paramsStr = requestParamsStr.toString().replaceFirst("&", "");
        requestParamsMap.put("authStr", SecureUtil.md5(paramsStr));
        requestParamsMap.remove("apikey");
    }


}

语音翻译

 代码展示

package com.niutrans.platform.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;

@Slf4j
public class NiuTransVoiceApiDemoV2 {
    public static String BASE_URL = "https://api.niutrans.com";
    public static String UPLOAD_TRANS_URL = BASE_URL + "/v2/voice/translate/short-voice/upload";//上传并翻译接口 
    public static String GET_INFO_URL = BASE_URL + "/v2/voice/translate/short-voice/status/{file_no}";//获取进度接口
    public static String INTERRUPT_URL = BASE_URL + "v2/voice/translate/short-voice/interrupt/{file_no}";// 终止翻译接口
    public static String DOWNLOAD_URL = BASE_URL + "/v2/voice/translate/short-voice/download/{file_no}";//下载文件接口

    public static String from = "原语语种,例如:zh";
    public static String to = "目标语语种,例如:en";
    public static String apikey = "您的apikey";//在'控制台->API应用'中查看
    public static String appId = "您的appId";//应用唯一标识,在'控制台->API应用'中查看
    public static String filePath = "D:\data\test.mp3";//替换为你要翻译的文件路径
    public static String saveFilePath = "D:\data\";

    public static void main(String[] args) {
        String fileNo = uploadAndTrans();
        JSONObject documentInfo = getDocumentInfo(fileNo);
        while (Integer.parseInt(documentInfo.get("transStatus").toString()) == 103) {
            documentInfo = getDocumentInfo(fileNo);
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (Integer.parseInt(documentInfo.get("transStatus").toString()) == 105) {
            downloadFile(fileNo);
        }
    }

    //上传并翻译文件
    public static String uploadAndTrans() {
        TreeMap<String, Object> requestParamsMap = new TreeMap();
        requestParamsMap.put("from", from);
        requestParamsMap.put("to", to);
        authStrGenerate(requestParamsMap);
        requestParamsMap.put("file", new File(filePath));
        String response = null;
        try {
            response = HttpUtil.post(UPLOAD_TRANS_URL, requestParamsMap);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("上传文档并翻译异常");
        }
        log.info("上传并翻译结果为:{}", response);
        JSONObject jsonObject = JSONUtil.parseObj(response);
        JSONObject dataObject = JSONUtil.parseObj(jsonObject.get("data"));
        return dataObject.get("fileNo").toString();
    }

    //获取文件信息
    public static JSONObject getDocumentInfo(String fileNo) {
        TreeMap<String, Object> requestParamsMap = new TreeMap<>();
        authStrGenerate(requestParamsMap);
        String response = null;
        GET_INFO_URL = GET_INFO_URL.replace("{file_no}", fileNo);
        try {
            response = HttpUtil.get(GET_INFO_URL, requestParamsMap);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("获取文档信息异常");
        }
        log.info("文档信息为:{}", response);
        JSONObject jsonObject = JSONUtil.parseObj(response);
        return JSONUtil.parseObj(JSONUtil.toJsonStr(jsonObject.get("data")));
    }

    //终止翻译中的文件
    public static void interruptTrans(String fileNo) {
        TreeMap<String, Object> requestParamsMap = new TreeMap<>();
        authStrGenerate(requestParamsMap);
        String body = null;
        INTERRUPT_URL = INTERRUPT_URL.replace("{file_no}", fileNo);
        final HttpRequest request = HttpUtil.createRequest(Method.PUT, INTERRUPT_URL);
        request.form(requestParamsMap);
        try (final HttpResponse httpResponse = request.execute()) {
            body = httpResponse.body();
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("终止结果:{}", body);
    }


    //下载文件
    public static void downloadFile(String fileNo) {
        TreeMap<String, Object> requestParamsMap = new TreeMap();
        requestParamsMap.put("type", 1);
        authStrGenerate(requestParamsMap);
        DOWNLOAD_URL = DOWNLOAD_URL.replace("{file_no}", fileNo);
        String url = DOWNLOAD_URL + "?" + HttpUtil.toParams(requestParamsMap);
        HttpUtil.downloadFile(url, FileUtil.file(saveFilePath));
    }

    //生成权限字符串
    public static void authStrGenerate(TreeMap<String, Object> requestParamsMap) {
        requestParamsMap.put("appId", appId);
        requestParamsMap.put("apikey", apikey);
        requestParamsMap.put("timestamp", System.currentTimeMillis() + "");
        StringBuilder requestParamsStr = new StringBuilder("");
        Set<String> keys = requestParamsMap.keySet();
        Iterator<String> iterator = keys.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            requestParamsStr.append("&").append(key).append("=").append(requestParamsMap.get(key));
        }
        String paramsStr = requestParamsStr.toString().replaceFirst("&", "");
        requestParamsMap.put("authStr", SecureUtil.md5(paramsStr));
        requestParamsMap.remove("apikey");
    }


}

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,接下来我将为您演示如何使用 Python 编写一个利用百度翻译 API翻译器。 首先,您需要先在百度翻译开放平台上申请一个开发者账号,并且创建一个应用,获取到自己的 App ID 和密钥等信息。然后,您需要安装 `requests` 和 `json` 库,这两个库可以通过以下命令来安装: ``` pip install requests pip install json ``` 接下来,您可以按照以下步骤编写您的 Python 代码: ```python import requests import json # 百度翻译 API 的 URL url = 'http://api.fanyi.baidu.com/api/trans/vip/translate' # 您的 App ID 和密钥 app_id = 'your_app_id' app_key = 'your_app_key' # 翻译函数,可以将待翻译的文本和目标语言作为参数传入 def translate(text, to_lang='en'): # 构建请求参数 params = { 'q': text, 'from': 'auto', 'to': to_lang, 'appid': app_id, 'salt': '123456', # 随机数,可以根据自己的需要修改 'sign': '', # 签名,需要根据请求参数和密钥生成 } # 计算签名 sign_str = app_id + text + params['salt'] + app_key sign = hashlib.md5(sign_str.encode()).hexdigest() params['sign'] = sign # 发送请求并获取响应 response = requests.get(url, params=params) result = json.loads(response.text) # 解析响应,返回翻译结果 if 'trans_result' in result: return result['trans_result'][0]['dst'] else: return None ``` 在上面的代码中,我们首先定义了百度翻译 API 的 URL,以及我们自己的 App ID 和密钥。然后,我们编写了一个翻译函数 `translate()`,该函数接受待翻译的文本和目标语言作为参数,然后构建请求参数,计算签名,发送请求,并解析响应,最后返回翻译结果。 需要注意的是,我们在计算签名时使用了 Python 自带的 `hashlib` 库,该库可以用来计算字符串的 MD5 哈希值。另外,我们在请求参数中还指定了一个随机数 `salt`,这个随机数可以根据自己的需要生成。 最后,您可以使用以下代码来测试您的翻译器: ```python text = '我爱你' to_lang = 'en' result = translate(text, to_lang) print(result) ``` 在上面的代码中,我们将待翻译的文本设置为 `'我爱你'`,目标语言设置为英语 `'en'`,然后调用 `translate()` 函数进行翻译,并打印翻译结果。您可以根据自己的需要修改这些参数。 希望这个示例代码可以帮助您编写自己的百度翻译 API 翻译器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值