打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用金山词霸API做翻译(c语言实现)

使用金山词霸API做翻译(c语言实现)  

2014-01-14 23:54:27|  分类: 计算机语言相关 |举报 |字号 订阅

金山词霸提供了API接口可以让我们方便使用,金山词霸也只能作中英互译(中文貌似不能翻译成英文,不知道是怎么回事),金山词霸提供的接口不仅仅只有翻译功能还有每是一句接口,相对于翻译API来说第日一句功能不需要申请key就可以使用,同时金山词霸还提供了浏览器划译的功能,该功能是一个javascript,将它保存到浏览器中的收藏栏中,在想使用该功能的时候点击该标签(启动划译)然后再使用鼠标在浏览器中选中就会进行翻译(原来有这种东西,我之前一直都不知道),本文主要讲使用翻译API接口做简单地翻译(为什么最近总是写关于翻译相关的文章,好吧,其实我准备使用这些API【金山词霸、有道、百度、必应】做一个简单的翻译软件,这些文章都是探路的。。。)

金山词霸翻译API也需要使用KEY,KEY的申请目的地是
open.iciba.com/?c=api
在词霸查词哪里填写相应内容,然后会给你的邮件中发送一封邮件,该邮件中有key,所以邮件千万别乱填,收到key后好好保管(原来目前金山词霸API的查词功能是不作限制的)

查词的接口也非常简单,使用HTTP的GET方式,接口地址是
http://dict-co.iciba.com/api/dictionary.php?w=go&key=********

w为要翻译的字/词
key为你申请的key
而返回数据的格式是XML的,只有XML,其实我还是比较喜欢json的。为什么?因为我对XML不太了解,所以赶鸭子上架,网上找了一个使用libxml2写的解析xml的程序看了一遍,然后自己简单地做了测试就这样使用libxml2进行解析了。发送GET请求还是使用curl,这次接收数据的方法我使用了保存到文件的方法(libxml2貌似只有从文件读取xml数据的方法= =)
下面放代码

#include "mysock/mysock.h"
#include <libxml/parser.h>
#include <curl/curl.h>

#define KEY "你的key"

size_t save_file(char *ptr,size_t size,size_t nmemb,void *userdata)
{
    return fwrite(ptr,size,nmemb,(FILE *)userdata);
}

void parse_xml(char *name) //解析xml数据
{
    xmlDocPtr doc;
    xmlNodePtr root;
    xmlChar *str;

    doc=xmlParseFile(name);
    root=xmlDocGetRootElement(doc);
    root=root->children;

    printf("翻译:\n\n");
    while(root)
    {
        if(!xmlStrcmp(root->name,"pos"))
        {
            str=xmlNodeGetContent(root);
            printf("%s",str);
           
            xmlFree(str);
        }

        if(!xmlStrcmp(root->name,"acceptation"))
        {
            str=xmlNodeGetContent(root);
            printf("%s",str);
           
            xmlFree(str);
        }

        if(!xmlStrcmp(root->name,"sent"))
            break;

        root=root->next;
    }

    printf("\n\n例句:\n\n");
    while(root)
    {
        if(!xmlStrcmp(root->name,"sent"))
        {
            str=xmlNodeGetContent(root);
            printf("%s",str);

            xmlFree(str);
        }

        root=root->next;
    }

    xmlFreeDoc(doc);
}

int main(int argc,char **argv)
{
    CURL *curl;
    CURLcode code;
    char *url;
    char *name;
    FILE *fp;

    url=string_add("http://dict-co.iciba.com/api/dictionary.php?w=%s&key=%s",argv[1],KEY);
    name=tempnam(NULL,NULL); //生成一个临时文件用来保存xml数据
    if((fp=fopen(name,"wb")) == NULL)
        error_quit(name);
    curl=curl_easy_init();

    curl_easy_setopt(curl,CURLOPT_URL,url);
    curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,save_file);
    curl_easy_setopt(curl,CURLOPT_WRITEDATA,fp);

    code=curl_easy_perform(curl);

    free(url);
    fclose(fp);
    curl_easy_cleanup(curl);
    parse_xml(name);
    remove(name); //删除临时文件

    return 0;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Curl: Libcurl POST XML file URGENT help
linux使用curl实现新浪天气API应用
snprintf函数说明
微软面试中简单的算法题目
Windows API教程(四) 进程编程
String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服