91精品久久人人妻人人爽人人,一本a道久遛,中文字幕在线精品视频入口一区,无码伊人久久大杳蕉中文无码

幫助與文檔 > 產(chǎn)品文檔 > 智慧學(xué)習(xí)服務(wù) > API文檔 > 精品題庫
精品題庫

精品題庫 API 簡介

概念解釋

精品題庫:有道智云精品題庫服務(wù)基于文字識別技術(shù),結(jié)合組段和渲染技術(shù),滿足用戶的需求。

說明

Hi,您好,歡迎使用有道智云精品題庫服務(wù)。

如果您想快速體驗(yàn)服務(wù),建議您前往 精品題庫體驗(yàn)中心 或者在體驗(yàn)中心右下側(cè)找到小程序二維碼,掃描進(jìn)行體驗(yàn)。

本文檔主要針對需要集成精品題庫服務(wù)HTTP API的開發(fā)工程師,詳細(xì)描述有道智云精品題庫能力及如何集成的技術(shù)內(nèi)容。

如果您有與我們商務(wù)合作的需求,可以通過以下方式聯(lián)系我們:

商務(wù)郵箱: AIcloud_Business@corp.youdao.com

如果您對文檔內(nèi)容有任何疑問,可以通過以下幾種方式聯(lián)系我們:

客服QQ:1906538062

智云精品題庫交流QQ群:685832941

聯(lián)系郵箱: zhiyun@corp.youdao.com

溫馨提示:

  • 本文檔主要針對開發(fā)人員,接入測試前需要在后臺創(chuàng)建API應(yīng)用,獲取應(yīng)用ID應(yīng)用密鑰;如果您還沒有,請按照 新手指南 獲取。
  • 平臺向每個賬戶贈送50元的體驗(yàn)金,供用戶集成前測試所用,具體資費(fèi)規(guī)則詳見 精品題庫服務(wù)報(bào)價(jià) 。

接口介紹

接口地址

https 接口: https://openapi.youdao.com/ocrquestionapi

協(xié)議須知

調(diào)用方在集成精品題庫API時(shí),請遵循以下規(guī)則。

規(guī)則描述
傳輸方式HTTPS
請求方式POST
字符編碼統(tǒng)一使用UTF-8編碼
請求格式表單
響應(yīng)格式JSON
圖片格式jpg/png/bmp
圖片大小1MB以下
文字長度50個字符以下

接口調(diào)用參數(shù)

調(diào)用API需要想接口發(fā)送以下字段來訪問服務(wù)。

字段名類型含義必填備注
qtext要識別的圖片,需要Base64編碼True必須是Base64編碼(baes64前邊不要加上data:image/png;base64)
appKeytext應(yīng)用IDTrue可在應(yīng)用管理查看
salttextUUIDTrueuuid,唯一通用識別碼
curtimetext當(dāng)前UTC時(shí)間戳(秒)trueTimeStamp
signtext簽名 sha256(應(yīng)用ID+input+salt+curtime+應(yīng)用密鑰);input的生成規(guī)則見表下的備注Truesha256(應(yīng)用ID+input+salt+curtime+應(yīng)用密鑰)
signTypetext簽名類型truev2
typetext上傳類型, 僅支持base64上傳,請?zhí)顚懝潭ㄖ?True1
searchTypetext搜索類型,img為圖片搜題,text為文本搜題false默認(rèn)為img類型

簽名sign生成方法如下:
signType=v2;
sign=sha256(應(yīng)用ID+input+salt+curtime+應(yīng)用密鑰)。
其中,input的計(jì)算方式為:input=q前10個字符 + q長度 + q后10個字符(當(dāng)q長度大于20)或 input=q字符串(當(dāng)q長度小于等于20)。
具體示例如下:
a.比如:q="Welcome to youdao AICloud.",字符串長度為26,大于20,其input="Welcome to"(前10個字符) + 26(字符串長度) + "o AICloud."(q字符串后10個字符)。
b.比如:q = "sdT4bWrjS",字符串長度為9,小于20,input = "sdT4bWrjS".

輸出字段介紹

響應(yīng)結(jié)果是以json形式輸出,包含字段如下表所示:

字段含義
errorCode識別結(jié)果錯誤碼,一定存在。
詳細(xì)信息可參見 錯誤代碼列表
data數(shù)據(jù)
-text圖片題目OCR結(jié)果
-questions相關(guān)題目
--id答案
--content題目內(nèi)容
--answer答案
--analysis解析
--knowledge知識點(diǎn)

輸出結(jié)果示例

{
    "data": {
        "questions": [{
            "answer": "<p>CM=DM </p><p><br/></p>",
            "id": "894fd7be65ce7b0288188bd871eebd08",
            "analysis": "<p>因?yàn)镺P平分∠AOB, PC⊥OA于點(diǎn)C, PD⊥OB于點(diǎn)D,所以PD=PC,∠DPM=∠CPM.又因?yàn)镻M=<br/>PM,所以△MPD≌△MPC,所以CM=DM. </p>",
            "content": "<p>如圖,OP平分∠AOB, PC⊥OA于點(diǎn)C, PD⊥OB于點(diǎn)D,M為OP上任意一點(diǎn),連接CM, DM,則CM和DM的大小關(guān)系是______.<br/></p><p><img src=\"http://nos.netease.com/yd-searchq/17eb37cb-1990-4453-aea8-ca151ae066fe.png\" title=\"1533365392716.png\" alt=\"blob.png\"/></p>",
            "knowledge": ""
        }, {
            "answer": "相等",
            "id": "fe9ee50505cdbd32244be8ba4cd20e2c",
            "analysis": "∵OP平分∠AOB&#xff0c;PC⊥OA&#xff0c;PD⊥OB&#xff0c; <br />∴PC&#61;PD&#xff0c;∠OPC&#61;∠OPD&#xff0c; <br />在△CPM和△DPM中&#xff0c;<img src=\"http://nos.netease.com/yd-searchq/c502f498-05e3-4828-8286-feb1a3d21abc.gif\" />&#xff0c; <br />∴△CPM≌△DPM(SAS)&#xff0c; <br />∴CM&#61;DM&#xff0e; <br />故答案為&#xff1a;相等&#xff0e; <br />根據(jù)角平分線上的點(diǎn)到角的兩邊距離相等可得PC&#61;PD&#xff0c;再求出∠OPC&#61;∠OPD&#xff0c;然后利用“邊角邊”證明△CPM和△DPM全等&#xff0c;根據(jù)全等三角形對應(yīng)邊相等可得CM&#61;DM&#xff0e; <br />本題考查了角平分線上的點(diǎn)到角的兩邊距離相等的性質(zhì)&#xff0c;全等三角形的判定與性質(zhì)&#xff0c;熟記性質(zhì)并確定出全等三角形是解題的關(guān)鍵&#xff0e;",
            "content": "<img src=\"http://nos.netease.com/yd-searchq/a102f7ea-9c15-4a1d-afde-64f9d226ba57.gif\" />如圖&#xff0c;OP平分∠AOB&#xff0c;PC⊥OA于C&#xff0c;PD⊥OB于D&#xff0e;M為OP上任意一點(diǎn)&#xff0c;連結(jié)CM、DM&#xff0c;則CM和DM的大小關(guān)系是 ______ &#xff0e;",
            "knowledge": "圖形的性質(zhì)>>圖形認(rèn)識初步>>角平分線的性質(zhì)"
        }, {
            "answer": "解&#xff1a;∵OP平分∠AOB&#xff0c;PC⊥OA&#xff0c;PD⊥OB&#xff0c;<br />∴PC&#61;PD&#xff0c;∠OPC&#61;∠OPD&#xff0c;<br />在△CPM和△DPM中&#xff0c; \\( \\left\\{\\begin{array}{c}CP&#61;DP\\\\∠OPC&#61;∠OPD\\\\PM&#61;PM\\end{array}\\right. \\) &#xff0c;<br />∴△CPM≌△DPM(SAS)&#xff0c;<br />∴CM&#61;DM&#xff0e;<br />故答案為&#xff1a;相等&#xff0e;",
            "id": "d2db5fecc55c78092298f0889482dd44",
            "analysis": "本題考查了角平分線上的點(diǎn)到角的兩邊距離相等的性質(zhì)&#xff0c;全等三角形的判定與性質(zhì)&#xff0c;熟記性質(zhì)并確定出全等三角形是解題的關(guān)鍵&#xff0e;",
            "content": "<img src=\"http://nos.netease.com/yd-searchq/8b8c0270-8fa5-4791-be64-fcf4652033e7.jpg\" /> <br />如圖&#xff0c;OP平分∠AOB&#xff0c;PC⊥OA于C&#xff0c;PD⊥OB于D&#xff0e;M為OP上任意一點(diǎn)&#xff0c;連結(jié)CM、DM&#xff0c;則CM和DM的大小關(guān)系是__&#xff0e;",
            "knowledge": "角平分線的性質(zhì),全等三角形的判定與性質(zhì)"
        }],
        "text": "如-3-11,0 , 平分∠AOB,PC OA于C.PDLO1S于D,M為OP上H 意一點(diǎn),連接CM,DM,則CM和DM的大小關(guān)系是 ,"
    },
    "errorCode": "0"
}

服務(wù)配置

支持圖片格式文件大小上限支持語言
jpg\png\bmp1M中文

錯誤代碼列表

錯誤碼含義
101缺少必填的參數(shù)
102不支持的語言類型
103翻譯文本過長
104不支持的API類型
105不支持的簽名類型
106不支持的響應(yīng)類型
107不支持的傳輸加密類型
108應(yīng)用ID無效,注冊賬號,登錄后臺創(chuàng)建應(yīng)用,可獲得應(yīng)用ID和應(yīng)用密鑰等信息
109batchLog格式不正確
110無相關(guān)服務(wù)的有效實(shí)例
111開發(fā)者賬號無效
112請求服務(wù)無效
113q不能為空
114不支持的圖片傳輸方式
201解密失敗,可能為DES,BASE64,URLDecode的錯誤
202簽名檢驗(yàn)失敗
203訪問IP地址不在可訪問IP列表
205請求的接口與應(yīng)用的平臺類型不一致,如有疑問請參考入門指南
206因?yàn)闀r(shí)間戳無效導(dǎo)致簽名校驗(yàn)失敗
207重放請求
301辭典查詢失敗
302翻譯查詢失敗
303服務(wù)端的其它異常
304會話閑置太久超時(shí)
401賬戶已經(jīng)欠費(fèi)停
402offlinesdk不可用
411訪問頻率受限,請稍后訪問
412長請求過于頻繁,請稍后訪問
1001無效的OCR類型
1002不支持的OCR image類型
1003不支持的OCR Language類型
1004識別圖片過大
1201圖片base64解密失敗
1301OCR段落識別失敗
1411訪問頻率受限
1412超過最大識別字節(jié)數(shù)
2003不支持的語言識別Language類型
2004合成字符過長
2005不支持的音頻文件類型
2006不支持的發(fā)音類型
2201解密失敗
2301服務(wù)的異常
2411訪問頻率受限,請稍后訪問
2412超過最大請求字符數(shù)
3001不支持的語音格式
3002不支持的語音采樣率
3003不支持的語音聲道
3004不支持的語音上傳類型
3005不支持的語言類型
3006不支持的識別類型
3007識別音頻文件過大
3008識別音頻時(shí)長過長
3009不支持的音頻文件類型
3010不支持的發(fā)音類型
3201解密失敗
3301語音識別失敗
3302語音翻譯失敗
3303服務(wù)的異常
3411訪問頻率受限,請稍后訪問
3412超過最大請求字符數(shù)
4001不支持的語音識別格式
4002不支持的語音識別采樣率
4003不支持的語音識別聲道
4004不支持的語音上傳類型
4005不支持的語言類型
4006識別音頻文件過大
4007識別音頻時(shí)長過長
4201解密失敗
4301語音識別失敗
4303服務(wù)的異常
4411訪問頻率受限,請稍后訪問
4412超過最大請求時(shí)長
5001無效的OCR類型
5002不支持的OCR image類型
5003不支持的語言類型
5004識別圖片過大
5005不支持的圖片類型
5006文件為空
5201解密錯誤,圖片base64解密失敗
5301OCR段落識別失敗
5411訪問頻率受限
5412超過最大識別流量
9001不支持的語音格式
9002不支持的語音采樣率
9003不支持的語音聲道
9004不支持的語音上傳類型
9005不支持的語音識別 Language類型
9301ASR識別失敗
9303服務(wù)器內(nèi)部錯誤
9411訪問頻率受限(超過最大調(diào)用次數(shù))
9412超過最大處理語音長度
10001無效的OCR類型
10002不支持的OCR image類型
10004識別圖片過大
10201圖片base64解密失敗
10301OCR段落識別失敗
10411訪問頻率受限
10412超過最大識別流量
11001不支持的語音識別格式
11002不支持的語音識別采樣率
11003不支持的語音識別聲道
11004不支持的語音上傳類型
11005不支持的語言類型
11006識別音頻文件過大
11007識別音頻時(shí)長過長,最大支持30s
11201解密失敗
11301語音識別失敗
11303服務(wù)的異常
11411訪問頻率受限,請稍后訪問
11412超過最大請求時(shí)長
12001圖片尺寸過大
12002圖片base64解密失敗
12003引擎服務(wù)器返回錯誤
12004圖片為空
12005不支持的識別圖片類型
12006圖片無匹配結(jié)果
13001不支持的角度類型
13002不支持的文件類型
13003表格識別圖片過大
13004文件為空
13301表格識別失敗
15001需要圖片
15002圖片過大(1M)
15003服務(wù)調(diào)用失敗
17001需要圖片
17002圖片過大(1M)
17003識別類型未找到
17004不支持的識別類型
17005服務(wù)調(diào)用失敗

常用語言 Demo

Java 示例

package com.youdao.ai;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class OcrquestionV2Demo {

    private static Logger logger = LoggerFactory.getLogger(OcrquestionV2Demo.class);

    private static final String YOUDAO_URL = "https://openapi.youdao.com/ocrquestionapi";

    private static final String APP_KEY = "您的應(yīng)用ID";

    private static final String APP_SECRET = "您的應(yīng)用密鑰";

    public static void main(String[] args) throws IOException {

        Map<String,String> params = new HashMap<String,String>();
        String q = loadAsBase64("圖片的路徑");
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("q", q);
        params.put("signType", "v2");
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        params.put("curtime", curtime);
        String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("sign", sign);
        String result = requestForHttp(YOUDAO_URL,params);
        /** 處理結(jié)果 */
        System.out.println(result);
    }

    public static String requestForHttp(String url,Map<String,String> params) throws IOException {
        String result = "";

        /** 創(chuàng)建HttpClient */
        CloseableHttpClient httpClient = HttpClients.createDefault();

        /** httpPost */
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> paramsList = new ArrayList<NameValuePair>();
        Iterator<Map.Entry<String,String>> it = params.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String,String> en = it.next();
            String key = en.getKey();
            String value = en.getValue();
            paramsList.add(new BasicNameValuePair(key,value));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList,"UTF-8"));
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try{
            HttpEntity httpEntity = httpResponse.getEntity();
            result = EntityUtils.toString(httpEntity,"UTF-8");
            EntityUtils.consume(httpEntity);
        }finally {
            try{
                if(httpResponse!=null){
                    httpResponse.close();
                }
            }catch(IOException e){
                logger.info("## release resouce error ##" + e);
            }
        }
        return result;
    }

    /**
     * 生成加密字段
     */
    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes(StandardCharsets.UTF_8);
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    public static String loadAsBase64(String imgFile)
  {//將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對其進(jìn)行Base64編碼處理

    File file = new File(imgFile);
    if(!file.exists()){
        logger.error("文件不存在");
        return null;
    }
    InputStream in = null;
    byte[] data = null;
      //讀取圖片字節(jié)數(shù)組
    try
    {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
      //對字節(jié)數(shù)組Base64編碼
    return Base64.getEncoder().encodeToString(data);//返回Base64編碼過的字節(jié)數(shù)組字符串
  }

  public static String truncate(String q) {
        if (q == null) {
            return null;
        }
        int len = q.length();
        String result;
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }
}

Python2 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import base64
import hashlib
import time

reload(sys)
sys.setdefaultencoding('utf-8')

YOUDAO_URL = 'https://openapi.youdao.com/ocrquestionapi'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'

def truncate(q):
    if q is None:
        return None
    q_utf8 = q.decode("utf-8")
    size = len(q_utf8)
    return q_utf8 if size <= 20 else q_utf8[0:10] + str(size) + q_utf8[size - 10:size]

def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()


def do_request(data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data=data, headers=headers)


def connect():
    f = open(r'圖片的路徑', 'rb')  # 二進(jìn)制方式打開圖文件
    q = base64.b64encode(f.read())  # 讀取文件內(nèi)容,轉(zhuǎn)換為base64編碼
    f.close()

    data = {}
    data['q'] = q
    data['signType'] = 'v2'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['sign'] = sign

    response = do_request(data)
    print response.content


if __name__ == '__main__':
    connect()

Python3 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import base64
import hashlib

from imp import reload


import time

reload(sys)

YOUDAO_URL = 'https://openapi.youdao.com/ocrquestionapi'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'


def truncate(q):
    if q is None:
        return None
    size = len(q)
    return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]


def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()


def do_request(data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data=data, headers=headers)


def connect():
    f = open(r'圖片的路徑', 'rb')  # 二進(jìn)制方式打開圖文件
    q = base64.b64encode(f.read()).decode('utf-8')  # 讀取文件內(nèi)容,轉(zhuǎn)換為base64編碼
    f.close()

    data = {}
    data['q'] = q
    data['signType'] = 'v2'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['sign'] = sign

    response = do_request(data)
    print(response.content)


if __name__ == '__main__':
    connect()

C# 示例

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography;

namespace zhiyun_csharp_demo
{
    class OcrquestionV1Demo
    {
        public static void Main()
        {
            Dictionary<String, String> dic = new Dictionary<String, String>();
            string url = "https://openapi.youdao.com/ocrquestionapi";
            string q = LoadAsBase64("圖片的路徑");
            string appKey = "您的應(yīng)用ID";
            string appSecret = "您的應(yīng)用密鑰";
            string salt = DateTime.Now.Millisecond.ToString();
            dic.Add("q", System.Web.HttpUtility.UrlEncode(q));
            dic.Add("signType", "v2");
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long) ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            dic.Add("curtime", curtime);
            string signStr = appKey + Truncate(q) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("sign", sign);
            string result = Post(url, dic);
            Console.WriteLine(result);
        }

        protected static string ComputeHash(string input, HashAlgorithm algorithm)
        {
          Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
          Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
          return BitConverter.ToString(hashedBytes).Replace("-", "");
        }

        protected static string Truncate(string q)
        {
            if (q == null)
            {
               return null;
            }
            int len = q.Length;
            return len <= 20 ? q : (q.Substring(0, 10) + len + q.Substring(len - 10, 10));
        }

        protected static string LoadAsBase64(string filename)
        {
            try
            {
                FileStream filestream = new FileStream(filename, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Position = 0;
                filestream.Read(arr, 0, (int)filestream.Length);
                filestream.Close();
                return Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        protected static string Post(string url, Dictionary<String, String> dic)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            StringBuilder builder = new StringBuilder();
            int i = 0;
            foreach (var item in dic)
            {
                if (i > 0)
                    builder.Append("&");
                builder.AppendFormat("{0}={1}", item.Key, item.Value);
                i++;
            }
            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }
    }
}

PHP 示例

<?php
define("CURL_TIMEOUT",   2000);
define("URL",            "https://openapi.youdao.com/ocrquestionapi");
define("APP_KEY",        "您的應(yīng)用ID"); // 替換為您的應(yīng)用ID
define("SEC_KEY",        "您的應(yīng)用密鑰"); // 替換為您的密鑰

function do_request($q)
{
    $salt = create_guid();
    $args = array(
        'appKey' => APP_KEY,
        'salt' => $salt,
    );
    $args['q'] = $q;
    $args['signType'] = 'v2';
    $curtime = strtotime("now");
    $args['curtime'] = $curtime;
    $signStr = APP_KEY . truncate($q) . $salt . $curtime . SEC_KEY;
    $args['sign'] = hash("sha256", $signStr);
    $ret = call(URL, $args);
    print_r($ret);
    $ret = json_decode($ret, true);
    return $ret;
}

// 發(fā)起網(wǎng)絡(luò)請求
function call($url, $args=null, $method="post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ret = false;
    $i = 0;
    while($ret === false)
    {
        if($i > 1)
            break;
        if($i > 0)
        {
            sleep(1);
        }
        $ret = callOnce($url, $args, $method, false, $timeout, $headers);
        $i++;
    }
    return $ret;
}

function callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ch = curl_init();
    if($method == "post")
    {
        $data = convert($args);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_POST, 1);
    }
    else
    {
        $data = convert($args);
        if($data)
        {
            if(stripos($url, "?") > 0)
            {
                $url .= "&$data";
            }
            else
            {
                $url .= "?$data";
            }
        }
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(!empty($headers))
    {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    if($withCookie)
    {
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
    }
    $r = curl_exec($ch);
    curl_close($ch);
    return $r;
}

function convert(&$args)
{
    $data = '';
    if (is_array($args))
    {
        foreach ($args as $key=>$val)
        {
            if (is_array($val))
            {
                foreach ($val as $k=>$v)
                {
                    $data .= $key.'['.$k.']='.rawurlencode($v).'&';
                }
            }
            else
            {
                $data .="$key=".rawurlencode($val)."&";
            }
        }
        return trim($data, "&");
    }
    return $args;
}

// uuid generator
function create_guid(){
    $microTime = microtime();
    list($a_dec, $a_sec) = explode(" ", $microTime);
    $dec_hex = dechex($a_dec* 1000000);
    $sec_hex = dechex($a_sec);
    ensure_length($dec_hex, 5);
    ensure_length($sec_hex, 6);
    $guid = "";
    $guid .= $dec_hex;
    $guid .= create_guid_section(3);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= $sec_hex;
    $guid .= create_guid_section(6);
    return $guid;
}

function truncate($q) {
    $len = abslength($q);
    return $len <= 20 ? $q : (mb_substr($q, 0, 10) . $len . mb_substr($q, $len - 10, $len));
}

function abslength($str)
{
    if(empty($str)){
        return 0;
    }
    if(function_exists('mb_strlen')){
        return mb_strlen($str,'utf-8');
    }
    else {
        preg_match_all("/./u", $str, $ar);
        return count($ar[0]);
    }
}

function ensure_length(&$string, $length){
    $strlen = strlen($string);
    if($strlen < $length)
    {
        $string = str_pad($string, $length, "0");
    }
    else if($strlen > $length)
    {
        $string = substr($string, 0, $length);
    }
}

function create_guid_section($characters){
    $return = "";
    for($i = 0; $i < $characters; $i++)
    {
        $return .= dechex(mt_rand(0,15));
    }
    return $return;
}
// 輸入
$file = "圖片的路徑";
$fp = fopen($file, "r") or die("Can't open file");
// base64編碼
$q = base64_encode(fread($fp, filesize($file)));
fclose($fp);
do_request($q);
?>
人人操世界av| 性色Av人人爽| 蜜桃人妻| 亚洲欧美BB视频免费| 欧洲亚洲一区 在线观看视频| JULIA京香一区二区三区| 国产精品无码无片在线观看3D| 亚洲无码自拍| 人妖网址| 日韩一区欧美专区| 国产毛片一级久久久久| 亚洲日韩一区二区在线观看| 国产露脸bbw| 欧美一级黄片在线播放| 丰满熟妇人妻av无码区| 欧美亚洲成人电影一区二区三区| 中文字幕精品一区久久久久| 日本综合久久| 日韩欧美三区| 草草影院精品一区二区三区| 国产 欧美 自拍| 西丰县| 日韩av无码中文字幕| 国产麻豆 9l 精品三级站 | 久久人人妻| 亚洲精品乱码久久久久久自慰| 免费国产黄片| 老师脱了内裤让我进去| 91丨porny丨丰满熟女| 少妇人妻共32部分| 免费人成视频在线观看欧美| 日本最新中文字幕在线| 欧州成人精品久久| 久久亚洲精品无码GV| 国产人妻精品一区二区三水牛| 日本18| 国产精在线| 免费网站成人 视频网站| 久久久精品国产99久久精品麻追| 宁晋县| 人人干操B视频|