diff --git a/m2pool-modules/m2pool-manage/pom.xml b/m2pool-modules/m2pool-manage/pom.xml index afbf223..689b20a 100644 --- a/m2pool-modules/m2pool-manage/pom.xml +++ b/m2pool-modules/m2pool-manage/pom.xml @@ -155,6 +155,19 @@ 3.3.0 + + org.jsoup + jsoup + 1.16.1 + + + + + + com.tencentcloudapi + tencentcloud-sdk-java-tmt + 3.1.1297 + diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java index eb5ce57..c989774 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageBroadcastServiceImpl.java @@ -93,7 +93,7 @@ public class ManageBroadcastServiceImpl extends ServiceImpl { //如果英文为null,需要翻译并保存一下 - if("".equals(broadcast.getContentEn()) || ("".equals(broadcast.getButtonContentEn()) && "".equals(broadcast.getButtonContent()))){ + if("".equals(broadcast.getContentEn()) || ("".equals(broadcast.getButtonContentEn()) && !"".equals(broadcast.getButtonContent()))){ broadcast.setButtonContentEn(TranslateUtils.translate(broadcast.getButtonContent(), "zh", "en")); broadcast.setContentEn(TranslateUtils.translate(broadcast.getContent(), "zh", "en")); manageBroadcastMapper.updateById(broadcast); diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageDocumentsServiceImpl.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageDocumentsServiceImpl.java index 13faaf5..01cfa0e 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageDocumentsServiceImpl.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/service/impl/ManageDocumentsServiceImpl.java @@ -7,6 +7,7 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.m2pool.common.core.Result.R; import com.m2pool.common.core.constant.HttpStatus; +import com.m2pool.common.core.utils.StringUtils; import com.m2pool.common.core.web.page.TableDataInfo; import com.m2pool.common.security.utils.SecurityUtils; import com.m2pool.manage.constant.CountryConstant; @@ -95,41 +96,36 @@ public class ManageDocumentsServiceImpl extends ServiceImpl= 256){ + return R.fail("标题图片长度不能大于255"); + } + + if (manageDocumentVo.getContent().length() >= 50000){ + return R.fail("内容长度大于50000,请确定传递的html格式是否正确"); + } + + //中文转英文 + build = ManageDocuments.builder() + .title(manageDocumentVo.getTitle()) + .subTitle(manageDocumentVo.getSubTitle()) + .content(manageDocumentVo.getContent()) + .type(manageDocumentVo.getType()) + .contentEn(TranslateUtils.translateHtml(manageDocumentVo.getContent(), fromCountry, toCountry)) + .titleEn(TranslateUtils.tencentTextTranslate(manageDocumentVo.getTitle(), fromCountry, toCountry)) + .subTitleEn(TranslateUtils.tencentTextTranslate(manageDocumentVo.getSubTitle(),fromCountry, toCountry)) + .childType(manageDocumentVo.getChildType()) + .articleUrl(manageDocumentVo.getArticleUrl()) + .titleUrl(manageDocumentVo.getTitleUrl()) + .createUser(SecurityUtils.getUsername()) + .updateUser(SecurityUtils.getUsername()) + .coin(manageDocumentVo.getCoin()) + .build(); int insert = manageDocumentsMapper.insert(build); //存入mongodb 方便以后如果mysql查询限制时切换 mongoTemplate.save(build, "documents"); @@ -151,68 +147,45 @@ public class ManageDocumentsServiceImpl extends ServiceImpl updateDocument(ManageDocumentVo manageDocumentVo) { + String fromCountry = CountryConstant.ZH; String toCountry = CountryConstant.EN; ManageDocuments build; - Update update = new Update(); - //英文转中文 - if (CountryConstant.EN.equals(manageDocumentVo.getLang())){ - build = ManageDocuments.builder() - .id(manageDocumentVo.getId()) - .titleEn(manageDocumentVo.getTitle()) - .subTitleEn(manageDocumentVo.getSubTitle()) - .contentEn(manageDocumentVo.getContent()) - .content(TranslateUtils.translate(manageDocumentVo.getContent(), toCountry, fromCountry)) - .title(TranslateUtils.translate(manageDocumentVo.getTitle(), toCountry, fromCountry)) - .subTitle(TranslateUtils.translate(manageDocumentVo.getSubTitle(), toCountry, fromCountry)) - .childType(manageDocumentVo.getChildType()) - .articleUrl(manageDocumentVo.getArticleUrl()) - .titleUrl(manageDocumentVo.getTitleUrl()) - .createUser(SecurityUtils.getUsername()) - .updateUser(SecurityUtils.getUsername()) - .type(manageDocumentVo.getType()) - .coin(manageDocumentVo.getCoin()) - .build(); - - // 英文转中文 - update.set("titleEn", manageDocumentVo.getTitle()) - .set("subTitleEn", manageDocumentVo.getSubTitle()) - .set("contentEn", manageDocumentVo.getContent()) - .set("articleUrl", manageDocumentVo.getArticleUrl()) - .set("titleUrl", manageDocumentVo.getTitleUrl()) - .set("content", TranslateUtils.translate(manageDocumentVo.getContent(), toCountry, fromCountry)) - .set("title", TranslateUtils.translate(manageDocumentVo.getTitle(), toCountry, fromCountry)) - .set("subTitle", TranslateUtils.translate(manageDocumentVo.getSubTitle(), toCountry, fromCountry)); - }else{ - //中文转英文 - build = ManageDocuments.builder() - .id(manageDocumentVo.getId()) - .title(manageDocumentVo.getTitle()) - .subTitle(manageDocumentVo.getSubTitle()) - .content(manageDocumentVo.getContent()) - .contentEn(TranslateUtils.translate(manageDocumentVo.getContent(), fromCountry, toCountry)) - .titleEn(TranslateUtils.translate(manageDocumentVo.getTitle(), fromCountry, toCountry)) - .subTitleEn(TranslateUtils.translate(manageDocumentVo.getSubTitle(), fromCountry, toCountry)) - .articleUrl(manageDocumentVo.getArticleUrl()) - .titleUrl(manageDocumentVo.getTitleUrl()) - .childType(manageDocumentVo.getChildType()) - .createUser(SecurityUtils.getUsername()) - .updateUser(SecurityUtils.getUsername()) - .type(manageDocumentVo.getType()) - .coin(manageDocumentVo.getCoin()) - .build(); - // 中文转英文 - update.set("title", manageDocumentVo.getTitle()) - .set("subTitle", manageDocumentVo.getSubTitle()) - .set("content", manageDocumentVo.getContent()) - .set("articleUrl", manageDocumentVo.getArticleUrl()) - .set("titleUrl", manageDocumentVo.getTitleUrl()) - .set("contentEn", TranslateUtils.translate(manageDocumentVo.getContent(), fromCountry, toCountry)) - .set("titleEn", TranslateUtils.translate(manageDocumentVo.getTitle(), fromCountry, toCountry)) - .set("subTitleEn", TranslateUtils.translate(manageDocumentVo.getSubTitle(), fromCountry, toCountry)); + if (manageDocumentVo.getTitleUrl() != null && manageDocumentVo.getTitleUrl().length() >= 256){ + return R.fail("标题图片地址字符数不能大于255"); } + Update update = new Update(); - update.set("childType", manageDocumentVo.getChildType()) + String content = StringUtils.isEmpty(manageDocumentVo.getContent()) ? "" : TranslateUtils.translateHtml(manageDocumentVo.getContent(), fromCountry, toCountry); + String title = StringUtils.isEmpty(manageDocumentVo.getTitle()) ? "" : TranslateUtils.tencentTextTranslate(manageDocumentVo.getTitle(), fromCountry, toCountry); + String subTitle = StringUtils.isEmpty(manageDocumentVo.getSubTitle()) ? "" : TranslateUtils.tencentTextTranslate(manageDocumentVo.getSubTitle(), fromCountry, toCountry); + //中文转英文 + build = ManageDocuments.builder() + .id(manageDocumentVo.getId()) + .title(manageDocumentVo.getTitle()) + .subTitle(manageDocumentVo.getSubTitle()) + .content(manageDocumentVo.getContent()) + .contentEn(content) + .titleEn(title) + .subTitleEn(subTitle) + .articleUrl(manageDocumentVo.getArticleUrl()) + .titleUrl(manageDocumentVo.getTitleUrl()) + .childType(manageDocumentVo.getChildType()) + .createUser(SecurityUtils.getUsername()) + .updateUser(SecurityUtils.getUsername()) + .type(manageDocumentVo.getType()) + .coin(manageDocumentVo.getCoin()) + .build(); + // 中文转英文 + update.set("title", manageDocumentVo.getTitle()) + .set("subTitle", manageDocumentVo.getSubTitle()) + .set("content", manageDocumentVo.getContent()) + .set("articleUrl", manageDocumentVo.getArticleUrl()) + .set("titleUrl", manageDocumentVo.getTitleUrl()) + .set("contentEn", content) + .set("titleEn", title) + .set("subTitleEn", subTitle) + .set("childType", manageDocumentVo.getChildType()) .set("createUser", SecurityUtils.getUsername()) .set("updateUser", SecurityUtils.getUsername()) .set("type", manageDocumentVo.getType()); @@ -220,7 +193,6 @@ public class ManageDocumentsServiceImpl extends ServiceImpl 0){ return R.success("修改文章成功"); diff --git a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/utils/TranslateUtils.java b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/utils/TranslateUtils.java index 227b7d5..9597623 100644 --- a/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/utils/TranslateUtils.java +++ b/m2pool-modules/m2pool-manage/src/main/java/com/m2pool/manage/utils/TranslateUtils.java @@ -1,63 +1,199 @@ package com.m2pool.manage.utils; -import com.alibaba.nacos.shaded.com.google.gson.JsonArray; -import com.alibaba.nacos.shaded.com.google.gson.JsonObject; -import com.alibaba.nacos.shaded.com.google.gson.JsonParser; +import com.tencentcloudapi.common.AbstractModel; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.tmt.v20180321.TmtClient; +import com.tencentcloudapi.tmt.v20180321.models.TextTranslateBatchRequest; +import com.tencentcloudapi.tmt.v20180321.models.TextTranslateBatchResponse; +import com.tencentcloudapi.tmt.v20180321.models.TextTranslateRequest; +import com.tencentcloudapi.tmt.v20180321.models.TextTranslateResponse; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.nodes.Node; +import org.jsoup.nodes.TextNode; +import org.jsoup.select.Elements; -import java.util.HashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; public class TranslateUtils { - private static final String TRANS_API_HOST = "https://fanyi-api.baidu.com/api/trans/vip/translate"; - - //private static String appid = "20250702002395339"; - //private static String securityKey ="yKbjIAIg_FpbdESYaE7A"; + //private static final String TRANS_API_HOST = "https://fanyi-api.baidu.com/api/trans/vip/translate"; + // + // + //private static String appid = "20250731002420396"; + //private static String securityKey ="fSFN5UNOV4tfm5oBDuin"; - private static String appid = "20250731002420396"; - private static String securityKey ="fSFN5UNOV4tfm5oBDuin"; + private static final String TENCENTCLOUD_SECRET_KEY = "jFZhcKo4AGJBB9xYx98tSpyueBVcbWSL"; + + private static final String TENCENTCLOUD_SECRET_ID = "AKIDEH8mFVYO1WosjOq57ze6LNBl8JJ5ez72"; + /** + * 翻译 HTML 内容,仅翻译标签内的文本,优化为批量翻译 + * @param html 原始 HTML 字符串 + * @param from 源语言 + * @param to 目标语言 + * @return 翻译后的 HTML 字符串 + */ + public static String translateHtml(String html, String from, String to) { + Document doc = Jsoup.parse(html); + // 收集所有文本节点 + List textNodes = new ArrayList<>(); + collectTextNodes(doc.body(), textNodes); - public static String translate(String query, String from, String to) { - Map params = buildParams(query, from, to); - String s = HttpGet.get(TRANS_API_HOST, params); - return extractDstFromResponse(s); - } - - private static Map buildParams(String query, String from, String to) { - Map params = new HashMap(); - params.put("q", query); - params.put("from", from); - params.put("to", to); - - params.put("appid", appid); - - // 随机数 - String salt = String.valueOf(System.currentTimeMillis()); - params.put("salt", salt); - - // 签名 - String src = appid + query + salt + securityKey; // 加密前的原文 - params.put("sign", MD5Utils.md5(src)); - - return params; - } - - - private static String extractDstFromResponse(String response) { - - try { - JsonObject jsonObject = JsonParser.parseString(response).getAsJsonObject(); - JsonArray transResultArray = jsonObject.getAsJsonArray("trans_result"); - if (transResultArray.size() > 0) { - JsonObject firstResult = transResultArray.get(0).getAsJsonObject(); - return firstResult.get("dst").getAsString(); + List originalTexts = new ArrayList<>(); + for (TextNode node : textNodes) { + String text = node.text().trim(); + if (!text.isEmpty() && text.matches(".*[\\u4e00-\\u9fa5].*")) { + originalTexts.add(text); } - } catch (Exception e) { - System.out.println("翻译结果解析失败"+e.getMessage()+"翻译结果:"+response); } - return ""; + + String[] htmlTextList = originalTexts.toArray(new String[0]); + List textList = translateBatch(htmlTextList, from, to); + + int index = 0; + for (TextNode node : textNodes) { + String text = node.text().trim(); + if (!text.isEmpty() && text.matches(".*[\\u4e00-\\u9fa5].*") && index < textList.size()) { + String translatedText = textList.get(index); + node.text(node.text().replace(text, translatedText)); + index++; + } + } + + System.out.println("翻译后的HTML"+doc.html()); + + return doc.html(); } + private static void collectTextNodes(Element element, List textNodes) { + for (Node child : element.childNodes()) { + if (child instanceof TextNode) { + textNodes.add((TextNode) child); + } else if (child instanceof Element) { + collectTextNodes((Element) child, textNodes); + } + } + } + + + /** + * 腾讯机器文本批量翻译 + * @param htmlTextList + * @return + */ + public static String[] tencentTextBatchTranslate(String[] htmlTextList, String from, String to){ + try{ + Credential cred = new Credential(TENCENTCLOUD_SECRET_ID, TENCENTCLOUD_SECRET_KEY); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint("tmt.tencentcloudapi.com"); + // 实例化一个client选项,可选的,没有特殊需求可以跳过 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 实例化要请求产品的client对象,clientProfile是可选的 + TmtClient client = new TmtClient(cred, "ap-beijing", clientProfile); + // 实例化一个请求对象,每个接口都会对应一个request对象 + TextTranslateBatchRequest req = new TextTranslateBatchRequest(); + req.setSource(from); + req.setTarget(to); + req.setProjectId(0L); + req.setSourceTextList(htmlTextList); + TextTranslateBatchResponse resp = client.TextTranslateBatch(req); + return resp.getTargetTextList(); + }catch (TencentCloudSDKException e) { + System.out.println(e.toString()); + return new String[0]; + } + + } + + public static List translateBatch(String[] htmlText, String from, String to) { + + int totalLength = 0; + int index = 0; + int lastRecordIndex = 0; + List result = new ArrayList<>(); + + for (String str : htmlText) { + if (str != null) { + totalLength += str.length(); + // 本次长度大于 6000 + if (totalLength >= 6000) { + // 截取上次记录坐标 lastRecordIndex 到当前遍历到数组的下标 index - 1 + String[] subArray = Arrays.copyOfRange(htmlText, lastRecordIndex, index); + String[] subResult = tencentTextBatchTranslate(subArray, from, to); + result.addAll(Arrays.asList(subResult)); + // 更新 lastRecordIndex 和 totalLength + lastRecordIndex = index; + totalLength = str.length(); + } + } + index++; + } + + // 处理剩余部分 + if (lastRecordIndex < htmlText.length) { + String[] remainingArray = Arrays.copyOfRange(htmlText, lastRecordIndex, htmlText.length); + if (remainingArray.length > 0) { + String[] remainingResult = tencentTextBatchTranslate(remainingArray, from, to); + result.addAll(Arrays.asList(remainingResult)); + } + } + + return result; + } + public static String translate(String sourcText, String from, String to){ + return tencentTextTranslate(sourcText,from,to); + } + + /** + * 腾讯机器单文本翻译 + * @param sourcText + * @param from + * @param to + * @return + */ + public static String tencentTextTranslate(String sourcText, String from, String to){ + try{ + Credential cred = new Credential(TENCENTCLOUD_SECRET_ID, TENCENTCLOUD_SECRET_KEY); + HttpProfile httpProfile = new HttpProfile(); + httpProfile.setEndpoint("tmt.tencentcloudapi.com"); + // 实例化一个client选项,可选的,没有特殊需求可以跳过 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 实例化要请求产品的client对象,clientProfile是可选的 + TmtClient client = new TmtClient(cred, "ap-beijing", clientProfile); + // 实例化一个请求对象,每个接口都会对应一个request对象 + TextTranslateRequest req = new TextTranslateRequest(); + req.setSource(from); + req.setTarget(to); + req.setProjectId(0L); + req.setSourceText(sourcText); + TextTranslateResponse resp = client.TextTranslate(req); + + System.out.println("结果"+ resp.getTargetText()); + return resp.getTargetText(); + }catch (TencentCloudSDKException e) { + System.out.println(e.toString()); + return ""; + } + + } + + + public static void main(String[] args) { + translateHtml("

\"\" Nexa 挖矿教程 


选择挖矿地址

  币种  最小起付额TCP 端口SSL 端口
\"\" Nexa10000stratum+tcp://nexa.m2pool.com:33333
stratum+ssl://nexa.m2pool.com:33335


适配性

币种GPU挖矿软件ASIC矿机型号
\"\" Nexabzminer、lolminer、Rigel、WildRig龍珠A21

注意:如果您的GPU挖矿软件或ASIC矿机与m2pool无法适配,请通过邮件:support@m2pool.com 与我们取得联系。

步骤1 - 注册m2pool账号


1. m2pool 矿池挖矿方式为用户名挖矿,需注册m2pool账号

2.注册账号成功后,请前往个人中心-挖矿账户页面,添加币种挖矿账户,此处创建的挖矿账户即为您需要在矿机上配置的用户名。


步骤2 - 获得并绑定钱包地址


1. 获取钱包,您可以通过以下方式获得币种的的钱包地址,用于接收挖矿收益。

  (1) 官方全节点钱包:https://nexa.org/, 该类型钱包需要实时同步币种区块链节点。

  (2) 交易所钱包:前往支持该币种现货交易的交易所,MEXCCoinEx 等,找到充值即可获得钱包。

  (3) 硬件钱包:取决于您的硬件钱包是否支持该币种区块链,该类型钱包安全性高,但不是所有硬件钱包都支持,请您仔细了解您的硬件钱包。  

2. 获得钱包地址后,在个人中心-挖矿账户页面,点击右上方添加按钮,在钱包地址一栏填入您的钱包即可。


步骤3 - 矿工接入参数示例


1. Pool/Url: 见上方挖矿地址表格

2. Wallet/User/Worker: 挖矿账户名.矿工号(英文句号.分隔挖矿账户名和矿工号),(用户名为您在 步骤1的第2步生成的挖矿账号(非m2pool的登陆邮箱号),矿工号为您自行定义(长度不超过36个字符),如果您有多个矿工,请勿设置相同的矿工号,设置相同矿工号会将多个矿工的算力合并,虽然不会影响您的收益,但这会导致无法区分不同的矿工,不便于您对矿工的管理。)

3.Password:任意输入,不同的挖矿软件或矿机可能会有不同的配置方式,但只需保证上述3个参数配置正确,即可接入m2pool矿池,如果您需要帮助,请通过 邮件 联系我们。


步骤4 - 坐等挖矿收益


1.在您添加完挖矿钱包后,即可在您的矿机上配置相关参数,开启挖矿。

2. 您在m2pool上的所有挖矿收益均为自动结算(不同币种有不同的收益结算方式,请仔细查看您选择币种的收益结算方式)。


\n", "zh", "en"); + //translate("牛逼", "zh", "en"); + } + + + + } diff --git a/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml index 29ef51c..736b4c7 100644 --- a/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml +++ b/m2pool-modules/m2pool-manage/src/main/resources/mapper/manage/ManageBroadcastMapper.xml @@ -45,10 +45,10 @@ coin = #{coin} AND `user` = #{user} - and `date` >= #{startDate} and `date` #{endDate} + and `should_out_date` >= #{startDate} and `should_out_date` #{endDate} - and `date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) + and `should_out_date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java index 81ffabf..280881b 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/service/impl/PoolServiceImpl.java @@ -401,7 +401,6 @@ public class PoolServiceImpl implements PoolService { List list = poolMapper.getHourNetPowerList(pool.getCoin()); - System.out.println("list----yyb-1"+list); if("1h".equals(vo.getInterval()) || "rt".equals(vo.getInterval())){ PageHelper.clearPage(); //30m数据 限制条数为最近1天的条数 即1*48=48 diff --git a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/SocketDemo.java b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/SocketDemo.java index 3fe533c..b3ec1fd 100644 --- a/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/SocketDemo.java +++ b/m2pool-modules/m2pool-pool/src/main/java/com/m2pool/pool/utils/SocketDemo.java @@ -1,5 +1,6 @@ package com.m2pool.pool.utils; +import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; import com.m2pool.common.core.utils.DateUtils; @@ -41,6 +42,37 @@ public class SocketDemo { //Date endDate = DateUtils.getPreviousHalfHourOrFullHour(new Date()); //Date startDate = DateUtils.getOneMonthAgo(endDate); //System.out.println(startDate+" "+endDate); + String textToTranslate = "

API 中 coin 字段可目前仅取值支持:nexa

矿池信息

公共结构

哈希率

算力数据


名称类型备注解释
日期
日期算力统计时间
算力

算力

矿工名单

矿工数量数据

名称类型备注解释
整数"; // 替换为实际要翻译的文本 + String apiKey = ""; // 替换为实际的 API 密钥 + String response = translate(textToTranslate, apiKey); + System.out.println(response); } + + + /** + * 发送翻译请求 + * @param text 待翻译的文本 + * @param apiKey API 密钥 + * @return 响应结果字符串 + */ + public static String translate(String text, String apiKey) { + // 构建请求体 + JSONObject requestBody = new JSONObject(); + requestBody.put("q", text); + requestBody.put("source", "auto"); + requestBody.put("target", "zh"); + requestBody.put("format", "text"); + requestBody.put("alternatives", 3); + requestBody.put("api_key", apiKey); + + // 发送 POST 请求 + String result = HttpRequest.post("https://libretranslate.com/translate") + .header("Content-Type", "application/json") + .body(requestBody.toString()) + .execute() + .body(); + + return result; + } } diff --git a/m2pool-modules/pom.xml b/m2pool-modules/pom.xml index 93bd9f8..86fdd34 100644 --- a/m2pool-modules/pom.xml +++ b/m2pool-modules/pom.xml @@ -23,6 +23,7 @@ m2pool-oapi m2pool-chat m2pool-manage + m2pool-lease