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. 用Go语言开发一个编程语言

    用Go语言开发一个编程语言 最近小弟业余时间闲来无事,所以就尝试一下自己开发一个轻量级的解释型语言. 出于学习的目的,我目前已经利用业余时间开发了一个多月,目前实现了变量声明,内置函数调用.自定义函数 ...

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

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

  3. python是用什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...

    时间回到30年前,Python 首次亮相.花了20年时间,Python才获得开发者的认可.来到 2019 年,Python已经成为开发人员第二喜欢的语言. 在过去的5年时间里,Python 成为了机器 ...

  4. python是什么语言开发的-专为人工智能和数据科学而生的Go语言,或将取代Python...

    时间回到30年前,Python 首次亮相.花了20年时间,Python才获得开发者的认可.来到 2019 年,Python已经成为开发人员第二喜欢的语言. 在过去的5年时间里,Python 成为了机器 ...

  5. 1 Go语言开发环境搭建详细教程+go常见bug合集【Go语言教程】

    Go语言开发环境搭建[Win.Linux.Mac] 1 SDK下载 官网地址:golang.org,因为一些原因国内可能无法访问.可以使用下面第二个链接. 国内地址访问:https://golang. ...

  6. 开发一个短信推送工具需要怎么做

    开发一个短信推送工具需要以下几步: 选择合适的编程语言,比如说 Python.Java 等. 选择短信 API 提供商,比如 Twilio.Alibaba Cloud 等. 注册一个账号,获取 API ...

  7. 用C语言开发一个BT下载软件 (二) ------ 算法和策略

    流水线作业 当客户端向peer发送数据请求时(即发送request消息),一次请求多个slice(即在一个数据包中发送多个request消息请求多个slice).peer发送完一个slice后接着发送 ...

  8. c语言开发一个学生成绩统计程序,用C语言实现成绩统计程序的设计课程设计报告.doc...

    武汉理工大学华夏学院 课程设计报告书 课程名称: 数据结构课程设计 题 目:用C语言实现成绩统计程序的设计 系 名: 信息工程系 专业班级: 计算机1121 姓 名: 学 号: 指导教师: 20**年 ...

  9. c语言bt下载程序,用C语言开发一个BT下载软件(一) ------ BitTorrent协议 -1

    BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断地向其他下载者上传已下载的数据.它是属于一个应用层的协议. 基于BT协议的文件分发系统由以下几个实体构成: 一个web服务 ...

  10. 用C语言开发一个BT下载软件(一) ------ BitTorrent协议 -1

    BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断地向其他下载者上传已下载的数据.它是属于一个应用层的协议. 基于BT协议的文件分发系统由以下几个实体构成: 一个web服务 ...

最新文章

  1. 硬件重要还是软件重要?一个人能同时学会吗?
  2. python画熊猫代码_用Python Turtle 画可爱的熊猫
  3. python人脸识别门禁系统毕设_树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理...
  4. JVM 生态系统 2018 调查报道
  5. 微前端在网易七鱼的实践
  6. jQuery用面向对象的思想来编写验证表单的插件
  7. flex自定义的分区域状态显示控件——原创
  8. rust灯灭了怎么办_Rust Rc 方法整理
  9. python3(一)数字Number
  10. Zuul 2 –样本过滤器
  11. oracle外表日期,三步教会您掌握oracle外表(external table)
  12. 类中构造函数、析构函数与赋值函数的重写
  13. Typecho添加投稿功能插件
  14. ARP检测的技术手段和作用详述
  15. 解决 meterpreter 使用shell后 shell内中文乱码的问题
  16. 洛谷 p1434 滑雪【记忆化搜索】
  17. Python实现音乐推荐系统【跟着迪哥学python】
  18. 基于浏览器扩展程序脚本和IDM提高下载速度
  19. ZZULIOJ.1092:素数表(函数专题)
  20. android原生系统怎么下载地址,安卓全机型原生官方ROM下载地址

热门文章

  1. React的性能优化 - 代码拆分之lazy的使用方法
  2. 树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)
  3. 今天解决了价位没有同步更新的问题
  4. 美国ADP就业数据是什么?与非农有何关系
  5. 深度学习下,中文分词是否还有必要?——ACL 2019论文阅读笔记
  6. 在茫茫决策树入门帖里,我强推这篇(附可视化图)
  7. linux错误—2.man:command not found
  8. python—scipy.stats.multivariate_normal
  9. python—缺失数据的处理
  10. bug-Both weights and assigned values must be a sequence of numbers when assigning to values of <clas