| @@ -1,10 +1,10 @@ | |||||
| package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
| import java.io.File; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.mp.enums.AiLangType; | import me.chanjar.weixin.mp.enums.AiLangType; | ||||
| import java.io.File; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 微信AI开放接口(语音识别,微信翻译). | * 微信AI开放接口(语音识别,微信翻译). | ||||
| @@ -15,24 +15,15 @@ import java.io.File; | |||||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
| */ | */ | ||||
| public interface WxMpAiOpenService { | public interface WxMpAiOpenService { | ||||
| String TRANSLATE_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?lfrom=%s<o=%s"; | |||||
| String VOICE_UPLOAD_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?format=%s&voice_id=%s&lang=%s"; | String VOICE_UPLOAD_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?format=%s&voice_id=%s&lang=%s"; | ||||
| String VOICE_QUERY_RESULT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext"; | String VOICE_QUERY_RESULT_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext"; | ||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * 提交语音. | * 提交语音. | ||||
| * 接口调用请求说明 | |||||
| * | |||||
| * http请求方式: POST | * http请求方式: POST | ||||
| * http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?access_token=ACCESS_TOKEN&format=&voice_id=xxxxxx&lang=zh_CN | * http://api.weixin.qq.com/cgi-bin/media/voice/addvoicetorecofortext?access_token=ACCESS_TOKEN&format=&voice_id=xxxxxx&lang=zh_CN | ||||
| * 参数说明 | |||||
| * | |||||
| * 参数 是否必须 说明 | |||||
| * access_token 是 接口调用凭证 | |||||
| * format 是 文件格式 (只支持mp3,16k,单声道,最大1M) | |||||
| * voice_id 是 语音唯一标识 | |||||
| * lang 否 语言,zh_CN 或 en_US,默认中文 | |||||
| * 语音内容放body里或者上传文件的形式 | |||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @param lang 语言,zh_CN 或 en_US,默认中文 | * @param lang 语言,zh_CN 或 en_US,默认中文 | ||||
| @@ -46,16 +37,9 @@ public interface WxMpAiOpenService { | |||||
| * 获取语音识别结果. | * 获取语音识别结果. | ||||
| * 接口调用请求说明 | * 接口调用请求说明 | ||||
| * | * | ||||
| * http请求方式: POST | |||||
| * http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext?access_token=ACCESS_TOKEN&voice_id=xxxxxx&lang=zh_CN | * http://api.weixin.qq.com/cgi-bin/media/voice/queryrecoresultfortext?access_token=ACCESS_TOKEN&voice_id=xxxxxx&lang=zh_CN | ||||
| * 请注意,添加完文件之后10s内调用这个接口 | * 请注意,添加完文件之后10s内调用这个接口 | ||||
| * | * | ||||
| * 参数说明 | |||||
| * | |||||
| * 参数 是否必须 说明 | |||||
| * access_token 是 接口调用凭证 | |||||
| * voice_id 是 语音唯一标识 | |||||
| * lang 否 语言,zh_CN 或 en_US,默认中文 | |||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @param lang 语言,zh_CN 或 en_US,默认中文 | * @param lang 语言,zh_CN 或 en_US,默认中文 | ||||
| @@ -80,18 +64,12 @@ public interface WxMpAiOpenService { | |||||
| * | * | ||||
| * http请求方式: POST | * http请求方式: POST | ||||
| * http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?access_token=ACCESS_TOKEN&lfrom=xxx<o=xxx | * http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?access_token=ACCESS_TOKEN&lfrom=xxx<o=xxx | ||||
| * 参数说明 | |||||
| * | * | ||||
| * 参数 是否必须 说明 | |||||
| * access_token 是 接口调用凭证 | |||||
| * lfrom 是 源语言,zh_CN 或 en_US | |||||
| * lto 是 目标语言,zh_CN 或 en_US | |||||
| * 源内容放body里或者上传文件的形式(utf8格式,最大600Byte) | |||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @param langFrom 源语言,zh_CN 或 en_US | * @param langFrom 源语言,zh_CN 或 en_US | ||||
| * @param langTo 目标语言,zh_CN 或 en_US | |||||
| * @param content 要翻译的文本内容 | |||||
| * @param langTo 目标语言,zh_CN 或 en_US | |||||
| * @param content 要翻译的文本内容 | |||||
| */ | */ | ||||
| String translate(AiLangType langFrom, AiLangType langTo, String content) throws WxErrorException; | String translate(AiLangType langFrom, AiLangType langTo, String content) throws WxErrorException; | ||||
| } | } | ||||
| @@ -1,17 +1,16 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import com.google.gson.JsonObject; | |||||
| import java.io.File; | |||||
| import com.google.gson.JsonParser; | import com.google.gson.JsonParser; | ||||
| import me.chanjar.weixin.common.WxType; | import me.chanjar.weixin.common.WxType; | ||||
| import me.chanjar.weixin.common.error.WxError; | import me.chanjar.weixin.common.error.WxError; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.mp.enums.AiLangType; | |||||
| import me.chanjar.weixin.mp.api.WxMpAiOpenService; | import me.chanjar.weixin.mp.api.WxMpAiOpenService; | ||||
| import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.enums.AiLangType; | |||||
| import me.chanjar.weixin.mp.util.requestexecuter.voice.VoiceUploadRequestExecutor; | import me.chanjar.weixin.mp.util.requestexecuter.voice.VoiceUploadRequestExecutor; | ||||
| import java.io.File; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| * Created by BinaryWang on 2018/6/9. | * Created by BinaryWang on 2018/6/9. | ||||
| @@ -20,9 +19,7 @@ import java.io.File; | |||||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
| */ | */ | ||||
| public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { | public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { | ||||
| private static final JsonParser JSON_PARSER = new JsonParser(); | private static final JsonParser JSON_PARSER = new JsonParser(); | ||||
| public static final String TRANSLATE_URL = "http://api.weixin.qq.com/cgi-bin/media/voice/translatecontent?lfrom=%s<o=%s"; | |||||
| private WxMpService wxMpService; | private WxMpService wxMpService; | ||||
| public WxMpAiOpenServiceImpl(WxMpService wxMpService) { | public WxMpAiOpenServiceImpl(WxMpService wxMpService) { | ||||
| @@ -48,14 +45,14 @@ public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { | |||||
| @Override | @Override | ||||
| public String translate(AiLangType langFrom, AiLangType langTo, String content) throws WxErrorException { | public String translate(AiLangType langFrom, AiLangType langTo, String content) throws WxErrorException { | ||||
| final String responseContent = this.wxMpService.post(String.format(TRANSLATE_URL, langFrom.getCode(), langTo.getCode()), | |||||
| content); | |||||
| final JsonObject jsonObject = new JsonParser().parse(responseContent).getAsJsonObject(); | |||||
| if (jsonObject.get("errcode") == null || jsonObject.get("errcode").getAsInt() == 0) { | |||||
| return jsonObject.get("to_content").getAsString(); | |||||
| String response = this.wxMpService.post(String.format(TRANSLATE_URL, langFrom.getCode(), langTo.getCode()), content); | |||||
| WxError error = WxError.fromJson(response, WxType.MP); | |||||
| if (error.getErrorCode() != 0) { | |||||
| throw new WxErrorException(error); | |||||
| } | } | ||||
| throw new WxErrorException(WxError.fromJson(responseContent, WxType.MP)); | |||||
| return JSON_PARSER.parse(response).getAsJsonObject().get("to_content").getAsString(); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -64,13 +61,13 @@ public class WxMpAiOpenServiceImpl implements WxMpAiOpenService { | |||||
| lang = AiLangType.zh_CN; | lang = AiLangType.zh_CN; | ||||
| } | } | ||||
| final String responseContent = this.wxMpService.get(VOICE_QUERY_RESULT_URL, | |||||
| final String response = this.wxMpService.get(VOICE_QUERY_RESULT_URL, | |||||
| String.format("voice_id=%s&lang=%s", voiceId, lang.getCode())); | String.format("voice_id=%s&lang=%s", voiceId, lang.getCode())); | ||||
| final JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject(); | |||||
| if (jsonObject.get("errcode") == null || jsonObject.get("errcode").getAsInt() == 0) { | |||||
| return jsonObject.get("result").getAsString(); | |||||
| WxError error = WxError.fromJson(response, WxType.MP); | |||||
| if (error.getErrorCode() != 0) { | |||||
| throw new WxErrorException(error); | |||||
| } | } | ||||
| throw new WxErrorException(WxError.fromJson(responseContent, WxType.MP)); | |||||
| return JSON_PARSER.parse(response).getAsJsonObject().get("result").getAsString(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,14 +1,16 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import java.io.File; | |||||
| import org.testng.annotations.*; | |||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.mp.enums.AiLangType; | |||||
| import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
| import me.chanjar.weixin.mp.api.test.ApiTestModule; | import me.chanjar.weixin.mp.api.test.ApiTestModule; | ||||
| import org.testng.annotations.Guice; | |||||
| import org.testng.annotations.Test; | |||||
| import me.chanjar.weixin.mp.enums.AiLangType; | |||||
| import java.io.File; | |||||
| import static org.assertj.core.api.Assertions.assertThat; | |||||
| /** | /** | ||||
| * <pre> | * <pre> | ||||
| @@ -35,13 +37,12 @@ public class WxMpAiOpenServiceImplTest { | |||||
| String voiceId = System.currentTimeMillis() + "a"; | String voiceId = System.currentTimeMillis() + "a"; | ||||
| AiLangType lang = AiLangType.zh_CN; | AiLangType lang = AiLangType.zh_CN; | ||||
| final String result = this.wxService.getAiOpenService().recogniseVoice(voiceId, lang, new File("d:\\t.mp3")); | final String result = this.wxService.getAiOpenService().recogniseVoice(voiceId, lang, new File("d:\\t.mp3")); | ||||
| System.out.println(result); | |||||
| assertThat(result).isNotEmpty(); | |||||
| } | } | ||||
| @Test | @Test | ||||
| public void testTranslate() throws WxErrorException { | public void testTranslate() throws WxErrorException { | ||||
| final String responseContent = this.wxService.getAiOpenService() | |||||
| .translate(AiLangType.zh_CN, AiLangType.en_US, "微信文档很坑爹"); | |||||
| System.out.println(responseContent); | |||||
| final String result = this.wxService.getAiOpenService().translate(AiLangType.zh_CN, AiLangType.en_US, "微信文档很坑爹"); | |||||
| assertThat(result).isNotEmpty(); | |||||
| } | } | ||||
| } | } | ||||