Qt 调用讯飞翻译

 将appid appkey appsecret替换即可,只是简单的调用,自己封装,源代码https://download.csdn.net/download/yonggandess/35319430https://download.csdn.net/download/yonggandess/35319430

#include "dialog.h"
#include "ui_dialog.h"
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QMessageAuthenticationCode>
#include <QMap>
#include <QDateTime>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QEventLoop>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    qDebug()<< getUrl("你好,我是中国人","cn","en");
}

Dialog::~Dialog()
{
    delete ui;
}

QString Dialog::getUrl(const QString &msg,const QString&from,const QString&to )
{
    const QString apisecret = "";
    const QString apikey    = "";
    const QString appid     = "";

    //用小牛翻译还是普通翻译
    bool useniuTrans = true;
    QString trans = useniuTrans ? "ntrans" : "itrans";
    QString ts = useniuTrans ? "ots" : "its";
    QString host = QString("%1.xfyun.cn").arg(trans);
    QString url = QString("https://%1/v2/%2").arg(host).arg(ts);
    QString format = "ddd, dd MMM yyyy HH:mm:ss";
    QLocale loc = QLocale(QLocale::English, QLocale::UnitedStates);
    QDateTime t = QDateTime::currentDateTime();
    QString dateString = loc.toString(t.toUTC(), format) + " GMT";
    QString digest = "SHA-256=";
    QByteArray hash256Base64 = QCryptographicHash::hash(getJson(msg,from,to,appid).toUtf8(),QCryptographicHash::Sha256).toBase64();
    digest += hash256Base64;

    QString signature_origin = "host: " + host + "\n";
    signature_origin += "date: " + dateString + "\n";
    signature_origin += "POST " + QString("/v2/%1 ").arg(ts) + "HTTP/1.1" + "\n";
    signature_origin += "digest: " + digest;

    QByteArray s_o = NULL, api = NULL;
    QByteArray signature = QMessageAuthenticationCode::hash(s_o.append(signature_origin),
                                                            api.append(apisecret), QCryptographicHash::Sha256).toBase64();


    //签名信息
    QString authorization = "api_key=\"";
    authorization += apikey + "\"";
    authorization += ",algorithm=";
    authorization += "\"hmac-sha256\"";
    authorization += ",headers=";
    authorization += "\"host date request-line digest\"";
    authorization += ",signature=\"";
    authorization += signature + "\"";

    QList<QPair<QString, QString>> formData;
    formData.append(QPair<QString,QString>{"Content-Type","application/json"});
    formData.append(QPair<QString,QString>{"Accept","application/json,version=1.0"});
    formData.append(QPair<QString,QString>{"Host",QString("%1.xfyun.cn").arg(trans)});
    formData.append(QPair<QString,QString>{"Date",dateString});
    formData.append(QPair<QString,QString>{"Digest",digest});

    formData.append(QPair<QString,QString>{"Authorization",authorization});
    QString result;

    QByteArray body_ = getJson(msg,from,to,appid).toUtf8();

    //post
    QByteArray  responseData = this->post(url,formData,body_);

    //json解析

    QString res_;
    QJsonObject root =  QJsonDocument::fromJson(responseData).object();
    int code = root.value("code").toInt();
    if(0 == code) {
        QJsonObject dataObj = root.value("data").toObject();
        QJsonObject resultObj = dataObj.value("result").toObject();
        res_ = resultObj.value("trans_result").toObject().value("dst").toString();
    }else{
        qDebug()<<"ifly trans error!";
    }

    return res_;
}

QString Dialog::getJson(const QString &msg, const QString &from, const QString &to,const QString&appid)
{
    //common
    QJsonObject commonObj;
    commonObj.insert("app_id",appid);

    //business
    QJsonObject businessObj;
    businessObj.insert("from",from);
    businessObj.insert("to",to);
    //data
    QJsonObject dataobj;

    dataobj.insert("text",QString(msg.toUtf8().toBase64()));

    QJsonObject obj;
    obj.insert("common",QJsonValue(commonObj));
    obj.insert("business",QJsonValue(businessObj));
    obj.insert("data",QJsonValue(dataobj));
    return QString(QJsonDocument(obj).toJson()).simplified();
}

QByteArray Dialog::post(const QString &url, QList<QPair<QString, QString>> header, const QByteArray &body)
{
    QUrl url_(url);
    QNetworkRequest request(url_);

    for(auto item : header)
        request.setRawHeader(item.first.toUtf8(),item.second.toUtf8());

    QNetworkAccessManager manager;
    QNetworkReply* reply = manager.post(request,body);
    QEventLoop loop;

    connect(reply,&QNetworkReply::finished,&loop,&QEventLoop::quit);

    loop.exec();
    QByteArray responseData = reply->readAll();

    delete reply;reply = nullptr;

    return responseData;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 调用公式识别API需要以下步骤: 1.注册开放平台账号,并创建应用,获取AppID、API Key和API Secret。 2.下载并安装语音SDK,同时将需要识别的公式语音文件放入项目中。 3.在QT项目中引入相关的Qt头文件和库(如QNetworkAccessManager,QNetworkRequest等)。 4.通过Qt的网络访问模块QNetworkAccessManager,建立与服务器的连接,向API接口发送请求,携带公式语音文件和申请的AppID、API Key和API Secret。 5.处理服务器响应。API服务会将公式语音文件识别成文本格式的LaTeX公式字符串,QT项目需要解析并处理该字符串,将其转化为动态公式展示在应用界面上。 6.实现错误处理及异常处理,确保应用的健壮性。 以上就是基本的调用公式识别API的步骤。需要提醒的是,具体的实现过程需要根据具体情况对参数进行设置和调整。 ### 回答2: Qt 是一种跨平台的应用程序开发框架,可以方便地创建可移植的图形化界面应用程序。如果你想在 Qt 应用程序中集成公式识别 API,可以按照以下步骤进行操作: 1. 创建开发者账号,并申请公式识别 API 的 AppID 和 AppKey。 2. 下载公式识别 API 的 SDK,将 SDK 中的头文件和库文件添加到 Qt 项目中。 3. 在 Qt 项目中,使用 QNetworkAccessManager 类发送 HTTP POST 请求,将待识别的公式图片上传到服务器。 4. 在 HTTP POST 请求中,设置请求头和请求参数。请求头需要设置“Content-Type: multipart/form-data”,请求参数需要设置“app_id”、“time_stamp”、“nonce_str”、“signature”和“image”等参数。 5. 在服务器返回的 JSON 格式的响应中,获取识别结果。识别结果包括识别出的 LaTeX 公式和公式的语义属性。 6. 在 Qt 应用程序中,将识别结果进行展示或编辑等操作。 需要注意的是,为了保证公式识别 API 的正常使用,需要在开发者中心的“服务管理”中开通该服务,并且需要保证上传的公式图片符合 API 的要求。此外,需要在 Qt 项目中注意异常处理和错误提示,以确保程序的健壮性和易用性。 ### 回答3: 要想调用公式识别API,需要完成以下步骤: 1. 注册开放平台账号,创建应用并开通公式识别API接口。 2. 在Qt项目中引入相关依赖,如Qt网络模块、SSL/TLS支持等,并确保网络环境正常。 3. 构建HTTP请求,在请求头中设置API签名和其他必要参数,如APPID、请求时间戳、随机数、语种、识别模式等。 4. 发送HTTP请求,等待接口响应。如果响应状态码为200,则表示识别成功。解析响应结果,获取识别出的数学公式。 5. 对识别结果进行后续处理,如渲染显示、保存文件等。 在调用公式识别API时,需要注意以下几点: 1. API请求速率限制:每个应用每秒最多发起10次请求,如果超过将会被封禁。 2. 请求参数要求:一些参数有具体的要求,如语种、图片格式等。 3. 返回结果格式:识别结果是以JSON格式返回,需要进行处理才能获取到具体的识别结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值