今天偶然看到百度开放平台,发现上面还有一个百度翻译的API接口。
于是就写了一个简单的词典程序。代码如下。
#include <libsoup/soup.h>
#include <json-glib/json-glib.h>
#define CLIENT_ID "WOkykfPXheIbcGE2UvqRSU1f"
#define TARGET_URL "http://openapi.baidu.com/public/2.0/bmt/translate?"\
"from=auto&to=auto&client_id=" CLIENT_ID "&q=%s"
int main(int argc, char *argv[])
{
if(argc!=2)
return;
gchar *q=argv[1];
SoupSession *session=soup_session_new();
gchar *target=g_strdup_printf(TARGET_URL,q);
SoupMessage *msg=soup_message_new("GET",target);
if(msg==NULL){
g_error("Fail to create HTTP message 'GET %s'",target);
}
guint status;
status=soup_session_send_message(session,msg);
if(status!=SOUP_STATUS_OK){
g_error("HTTP response %d",status);
}
SoupMessageBody *body=NULL;
g_object_get(msg,"response-body",&body,NULL);
JsonParser *parser=json_parser_new();
if(json_parser_load_from_data(parser,body->data,body->length,NULL)
==FALSE){
g_error("Invalid HTTP response\n%s",body->data);
}
JsonNode *root_node=json_parser_get_root(parser);
JsonObject *root_obj=json_node_get_object(root_node);
const gchar *from=json_object_get_string_member(root_obj,"from");
const gchar *to=json_object_get_string_member(root_obj,"to");
JsonArray *results=json_object_get_array_member(root_obj,"trans_result");
g_printf("%s ==> %s\n",from,to);
gint i,len=json_array_get_length(results);
for (i = 0; i < len; i++) {
JsonObject *res=json_array_get_object_element(results,i);
const gchar *src=json_object_get_string_member(res,"src");
const gchar *dst=json_object_get_string_member(res,"dst");
g_printf("\t%s : %s\n",src,dst);
}
g_object_unref(parser);
g_object_unref(msg);
g_object_unref(session);
return 0;
}
保存后编译
gcc a.c `pkg-config --libs --cflags libsoup-2.4 json-glib-1.0`
其中 CLIENT_ID是注册百度开放平台开发者帐号后拿到的一个ID。
|