http://fanyi.youdao.com/openapi.do?keyfrom=&key=&type=data&doctype=&version=1.1&q=要翻译的文本

参数说明:

type - 返回结果的类型,固定为data

doctype - 返回结果的数据格式,xml或json或jsonp

version - 版本,当前最新版本为1.1

q - 要翻译的文本,不能超过200个字符,需要使用utf-8编码

errorCode:

0 - 正常

20 - 要翻译的文本过长

30 - 无法进行有效的翻译

40 - 不支持的语言类型

50 - 无效的key

我的程序里使用了json格式,并用json-glib做解析,使用curl做get请求,这时有一个问题,那就是curl接收数据的时候是使用回调函数的方式,也就是说我们需要在得到接收到的数据中费点心思,有如下几个方案

1、将数据保存到文件中,然后再从文件中读取数据

2、创建一个比较大的字符数组作为参数传递给回调函数来得到数据

3、使用一个“全局”变量用来存储数据

4、创建一个字符指针传递给回调函数,在回调函数中动态开辟内存保存数据

我使用的方法是第4种,其实第一种方法也是可行的,下面放程序

#include

#include

#include

#include "mysock/mysock.h"

#define KEYFROM "你的keyform"

#define KEY "你的key"

typedef struct

{

char *data;

}DATA; //我们传递给回调函数的数据

size_t get_data(char *ptr,size_t size,size_t nmemb,DATA *userdata)

{

if(userdata->data) //如果指针非空则动态增加内存

{

char *temp;

int len;

len=strlen(userdata->data);

temp=malloc(len+1);

strncpy(temp,userdata->data,len);

free(userdata->data);

userdata->data=malloc(len+nmemb+1);

strncpy(userdata->data,temp,len);

free(temp);

strncat(userdata->data,ptr,nmemb);

userdata->data[len+nmemb]='\0';

}

else

{

userdata->data=malloc(nmemb+1);

strncpy(userdata->data,ptr,nmemb);

userdata->data[nmemb]='\0';

}

return nmemb;

}

void parser_json(char *data) //解析json数据

{

JsonParser *parser;

JsonReader *reader;

g_type_init();

parser=json_parser_new();

json_parser_load_from_data(parser,data,-1,NULL);

reader=json_reader_new(json_parser_get_root(parser));

if(json_reader_read_member(reader,"query"))

{

printf("%s\n",json_reader_get_string_value(reader));

json_reader_end_member(reader);

}

if(json_reader_read_member(reader,"translation"))

{

int count;

int i;

count=json_reader_count_elements(reader);

for(i=0;i != count;++i)

{

json_reader_read_element(reader,i);

printf("%s\n",json_reader_get_string_value(reader));

json_reader_end_element(reader);

}

json_reader_end_member(reader);

}

if(json_reader_read_member(reader,"basic"))

{

int count;

int i;

printf("\n简单翻译:\n");

if(json_reader_read_member(reader,"phonetic"))

{

printf("%s\n",json_reader_get_string_value(reader));

json_reader_end_member(reader);

}

else

{

json_reader_end_member(reader);

json_reader_read_member(reader,"basic");

}

json_reader_read_member(reader,"explains");

count=json_reader_count_elements(reader);

for(i=0;i != count;++i)

{

json_reader_read_element(reader,i);

printf("%s\n",json_reader_get_string_value(reader));

json_reader_end_element(reader);

}

json_reader_end_member(reader);

json_reader_end_member(reader);

}

if(json_reader_read_member(reader,"web"))

{

int count;

int i;

int j;

int n;

printf("\n网络翻译:\n");

count=json_reader_count_elements(reader);

for(i=0;i != count;++i)

{

json_reader_read_element(reader,i);

json_reader_read_member(reader,"key");

printf("%s\n",json_reader_get_string_value(reader));

json_reader_end_member(reader);

json_reader_read_member(reader,"value");

n=json_reader_count_elements(reader);

for(j=0;j != n;++j)

{

json_reader_read_element(reader,j);

printf("%s\n",json_reader_get_string_value(reader));

json_reader_end_element(reader);

}

json_reader_end_member(reader);

json_reader_end_element(reader);

printf("\n");

}

json_reader_end_member(reader);

}

}

int main(int argc,char **argv)

{

CURL *curl;

char *url;

DATA data;

url=string_add("http://fanyi.youdao.com/openapi.do?keyfrom=%s&key=%s&type=data&doctype=json&version=1.1&q=%s",KEYFROM,KEY,argv[1]);

curl=curl_easy_init();

data.data=NULL;

curl_easy_setopt(curl,CURLOPT_URL,url);

curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,get_data);

curl_easy_setopt(curl,CURLOPT_WRITEDATA,&data); //传递接收数据的指针

curl_easy_perform(curl);

free(url);

curl_easy_cleanup(curl);

parser_json(data.data);

free(data.data);

return 0;

}

c语言怎么做翻译软件,使用有道翻译API做翻译(c语言实现)相关推荐

  1. 使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行)

    使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行) 代码很简单,适合初学者学习借鉴.可以当成一个小工具使用. 注意: 1.代码应联网使用. 2.在输入密钥和id时 ...

  2. python有道翻译接口-Python调用有道翻译api实现翻译

    通过调用有道翻译的api,实现中译英.其他语言译中文 代码: # coding=utf-8 import urllib import urllib2 import json import time i ...

  3. php调用翻译,PHP调用有道词典翻译API实现翻译功能及代码

    PHP调用有道词典翻译API实现翻译功能及代码,其中英文可以翻译,中文不能翻译是什么问题啊?急 http://fanyi.youdao.com/openapi.do?keyfrom=cxvsdffd3 ...

  4. python有道翻译接口-Python通过调用有道翻译api实现翻译功能示例

    本文实例讲述了Python通过调用有道翻译api实现翻译功能.分享给大家供大家参考,具体如下: 通过调用有道翻译的api,实现中译英.其他语言译中文 Python代码: # coding=utf-8 ...

  5. Python 调用有道翻译api接口翻译外文网站的整篇西班牙文实战演示

    Python 调用有道翻译 api 接口翻译整篇西班牙文实战演示 第一章:翻译效果展示 ① 翻译文章示例一[阿尔卡拉门的无海摩纳哥:"不到4万欧元,你就不能在这里租任何东西."] ...

  6. 批量翻译API接口工具:实现语言的自由转化

    批量翻译API接口对部分用户来说有一定的对接难度,不管是英文.日文.俄文还是法文通过集成google.baidu.有道等大厂的免费翻译API接口,我们能够轻松的使用文章翻译功能,软件集成的采集.翻译. ...

  7. python有道翻译接口翻译页面-tornado框架学习及借用有道翻译api做自动翻译页面...

    Home Link Link auto 翻译

  8. python数据分析 pandas对某列Series调用有道翻译API进行翻译

    需求:使用pandas对船舶数据分析中,爬取下来的一些字段是英文的,将某列Series的英文翻译成中文 解决方案:这里封装了一个对某列不同语言的Series进行翻译的类 思路:因为翻译接口有访问次数的 ...

  9. C语言百度翻译API的使用,c语言怎么翻译? 程序怎么运行?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 } /*******************************LED动作*************************************/ ...

最新文章

  1. 终于有人把各路StyleGAN做了个大汇总 | Reddit超热
  2. saltstack执行state.sls耗时长的坑
  3. 13道BGP属性面试题
  4. 安防专用交换机的应用介绍
  5. 【渝粤教育】国家开放大学2018年秋季 0692-22T化工设备机械基础 参考试题
  6. android新建工程横屏,华为MatePad Pro构建的安卓平板横屏生态有何不同?来看看
  7. 如何进行Tuxera NTFS的挂载卷设置?实现MacOS对NTFS磁盘的完全读写功能
  8. Java自动化测试框架-06 - 来给你的测试报告化个妆整个形 - (下)(详细教程)
  9. 梅森旋转产生随机数c语言实现,梅森旋转法产生随机数
  10. Revit二次开发之ISelectionFilter 接口的用法
  11. 基于51单片机的交通灯控制系统设计
  12. android httpclient版本,android版本存在 httpclient leak
  13. VMwareTools安装工具linux.iso
  14. (原创)巧用通道作颜色网
  15. Pytorch之pack_padded_sequence与pad_packed_sequence函数
  16. 访问页面升级访问_BPC页面访问缓慢无报错
  17. Boot(重点SCSS☆☆☆☆☆)(day03)
  18. 供应链协作平台产品设计思维导图
  19. HTML点击图片实现跳转的两种方法
  20. NAS 详细搭建方案 - 安装Ubuntu Server

热门文章

  1. 支付宝SDK下载页面
  2. 什么是LTE(Long Term Evolution)
  3. 机器学习-增量训练方法
  4. 线性回归基础相关公式
  5. ASPICE_SWE.1_01_01_QA
  6. 11月初.wang域名总量TOP15:13家中国域名商上榜
  7. H3C交换机常用命令(初学)
  8. 软件配置管理(一)配置管理概念与目标
  9. react native ScrollView实现滑动锚定,滑动到指定位置
  10. matlab图像雅可比行列式,函数矩阵与行列式(雅可比(Jacobi)矩阵与行列式)雅克...-雅可比矩阵-数学-詹底巧同学...