快速业务通道

搜狗云输入法移植到linux平台的想法

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13

在ubuntu9.04的时代,自带的输入法一直认为不够好用,看到了搜狗的云输入法,故产生了移植的想法.

通过chrome的inspect Element功能,我发现了搜狗、百度、QQ云输入法的接口.公布一下,供大家参考.

百度http://olime.baidu.com/py?py=bit&rn=0&pn=5

搜狗http://web.pinyin.sogou.com/api/py?key=938cdfe9e1e39f8dd5da428b1a6a69cb&query=bit

QQhttp://ime.qq.com/fcgi-bin/getword?key=f56b884eebd87625cb4f87fcf125b0db&cb=window.QQWebIME.callback238&q=y

写了一段百度的测试了一下,之后只用正则表达式就好了,后来看到google code上面有人开发了基于ibus的搜狗的云输入法,故决定停止开发吧.

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <errno.h>
  4. #include <string.h>
  5. #include <netdb.h>
  6. #include <unistd.h>
  7. #include <fcntl.h>
  8. #include <fcntl.h>
  9. #include <sys/time.h>
  10. #include <sys/types.h>
  11. #include <netinet/in.h>
  12. #include <sys/socket.h>
  13. #include<iconv.h>
  14. #define MaxRecvLen 255
  15. //定义网站结构
  16. struct DOMAIN
  17. {
  18. char url[255]; //完整网址
  19. char host[20]; //主机地址
  20. int port; //sock 联接的端口号
  21. };
  22. typedef struct DOMAIN domain;
  23. //*********************gb2312toutf-8****************
  24. int gb2312toutf8(char *sourcebuf,size_t sourcelen,char *destbuf,size_t destlen)
  25. {
  26. iconv_t cd;
  27. if( (cd = iconv_open("utf-8","gb2312")) ==0 )
  28. return -1;
  29. memset(destbuf,0,destlen);
  30. char **source = &sourcebuf;
  31. char **dest = &destbuf;
  32. if(-1 == iconv(cd,source,&sourcelen,dest,&destlen))
  33. return -1;
  34. iconv_close(cd);
  35. return 0;
  36. }
  37. //***********************百度云输入法**************************
  38. char* Getword(domain web_domain)
  39. {
  40. //******************* 有关 sock 的变量 *************************
  41. int sock_id; //sock 联接句柄
  42. struct hostent *hostbyname; //主机的信息 结构
  43. struct sockaddr_in remote_addr; //包含远端主机IP地址和端口号的结构
  44. //******************* 有关 无阻塞 select 所用到 的变量 *************
  45. struct timeval timeout; //用于无阻塞 select 调用 的时间变量
  46. fd_set sockid_readable; //sock 类似联接句柄 传递给 select 有效的连接
  47. char send_str[255]; //保存要发送的字符串
  48. char temp[2048];
  49. char result[512];
  50. char word[2048];
  51. char *recBuf; //临时字串,接收到的字串指针
  52. int recv_numb; //保存远端返回的字串大小
  53. timeout.tv_sec = 10; //设置几秒钟超时
  54. timeout.tv_usec = 5000; //设置几微秒超时
  55. //******************* 处理命令行的参数 *************************
  56. hostbyname = gethostbyname(web_domain.host); //将基本名字和地址转换
  57. if((sock_id=socket(PF_INET,SOCK_STREAM,0))==-1)
  58. {
  59. perror("socket");
  60. exit(1);
  61. }
  62. //初始化远端要传递的socket
  63. remote_addr.sin_family=AF_INET; //地址族
  64. remote_addr.sin_port=htons(web_domain.port); //端口号
  65. remote_addr.sin_addr=*((struct in_addr *)hostbyname->h_addr); //IP地址
  66. bzero(&(remote_addr.sin_zero),8); //填充0 以保持与struct sockaddr同样大小
  67. //和服务器建立连接
  68. if(connect(sock_id,(struct sockaddr *)&remote_addr,sizeof(remote_addr))==-1)
  69. {
  70. perror("connect");
  71. exit(1);
  72. }
  73. //printf("nnconnected %s:%d ok!nn",web_domain.host,web_domain.port);
  74. //创建要发送给远端的字串
  75. sprintf(send_str,"GET %s HTTP/1.1nAccept: */*nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)nHost: %snn",web_domain.url,web_domain.host);
  76. //printf("%snn",send_str);
  77. //开始向服务器发送数据
  78. if(send(sock_id,send_str,strlen(send_str),0)==-1)
  79. {
  80. perror("send");
  81. exit(1);
  82. }
  83. recBuf=(char *)malloc(MaxRecvLen); //为储存远端返回的字串的变量申请空间
  84. while(1)
  85. {
  86. //设置无堵塞模式
  87. FD_ZERO(&sockid_readable);
  88. FD_SET(sock_id,&sockid_readable);
  89. select(sock_id 1, &sockid_readable, NULL, NULL, &timeout);
  90. if (!FD_ISSET(sock_id, &sockid_readable))
  91. {
  92. printf("Timed out.n");
  93. //break;
  94. }

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号