C++通过gSOAP使用Bing API进行搜索

简介:

Pnig0s1992:因为做一个关键词情感倾向的算法需要将关键字通过搜索引擎查询并取得结果集总数,前期框架是用C++写的,没辙只能接着用C++去调用Bing API的WebService了。Google了下,发现在C/C++下调用搜索引擎API的文章几乎没有,也许是杀鸡用牛刀了吧,经过一些时间的技术调查,最终通过gSOAP解决了这个问题。

    gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。gSOAP还是非常强大的,下面来说下具体操作。首先需要在http://www.bing.com/developers/createapp.aspx这里申请一个APPID才能使用Bing的一系列API。申请完之后构造如下连接YOURAPPIDhttp://api.search.live.net/search.wsdl?AppID= ,接下来祭出gSOAP,我使用的是最新的2.8.8版。下载之后解压,gsoap\bin\win32目录下有两个可执行文件wsdl2h.exe和soapcpp2.exe。把gsoap\WS目录下的typemap.dat复制到gsoap\bin\win32目录下,在命令行下执行:wsdl2h.exe -o BingAPI.h 。成功后win32目录下会生成一个BingAPI.h文件。然后在命令行执行:soapcpp2.exe -C BingAPI.h 。其中-C表示只生成客户端代码,执行成功后会在win32目录下生成若干文件,包括.h,.cpp,.nsmap,.xml等。

   

把刚刚生成的BingAPI.h,soapH.h,soapC.cpp,soapClient.Cpp,soapStub.h,BingPortBinding.nsmap,以及gsoap目录下的stdsoap2.h,stdsoap2.cpp以及gsoap\import下的stlvector.h复制到工程目录下,并添加进工程。然后加入winsock32.lib。

这里需要注意的是,因为我是使用C&WindowsAPI开发的 所以已经包含了WIndows.h。这里引入winsock32.lib会造成重定义错误。解决办法就是在#include <windows.h>前面加入#define    WIN32_LEAN_AND_MEAN如果你使用的是纯C库函数就没这个问题了。所有类的具体实现在soapStub.h里,下面直接给出调用Bing API的实例代码,头文件还需要

#include "soapH.h"
#include "BingPortBinding.nsmap"

 

 
  1. soap clientSOAP;  
  2. _ns1__SearchRequest BingRequest;  
  3. _ns1__SearchResponse BingResponse;  
  4. ns1__SearchRequest BingSearchRequest;  
  5. ns1__SearchResponse BingSearchResponse;  
  6. soap_init(&clientSOAP);  
  7. BingSearchRequest.AppId = "91DXXXXXXXXXXXXXB658A146E9DC007C2BA1";  
  8. BingSearchRequest.Query = "优秀";  
  9. BingSearchRequest.Market = new std::string("zh-cn");  
  10. BingSearchRequest.Sources = new class ns1__ArrayOfSourceType();  
  11. BingSearchRequest.Sources->SourceType.push_back(ns1__SourceType::ns1__SourceType__Web);  
  12. BingRequest.parameters  = &BingSearchRequest;  
  13. BingResponse.parameters = &BingSearchResponse;  
  14.  
  15. if(soap_call___ns1__Search(&clientSOAP,NULL,NULL,&BingRequest,&BingResponse) == SOAP_OK)  
  16. {  
  17.     cout<<BingResponse.parameters->Version<<endl;  
  18.     cout<<*BingResponse.parameters->Web->Total<<endl;  
  19. }else 
  20. {  
  21.     printf("\n使用Bing查询出错!");  
  22. }  
  23. soap_destroy(&clientSOAP);  
  24. soap_end(   &clientSOAP);  
  25. soap_done(&clientSOAP);  
  26. return

 Over~Thx for reading&Any comment is welcomed!















本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/791057,如需转载请自行联系原作者

相关文章
|
23天前
|
API 数据库 C语言
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
【C/C++ 数据库 sqlite3】SQLite C语言API返回值深入解析
164 0
|
1月前
|
数据采集 数据挖掘 API
淘系API接口推荐:淘宝搜索列表数据接口
淘系API接口推荐:淘宝搜索列表数据接口
227 0
|
6天前
|
API
当当网按关键字搜索dangdang商品 API 返回值说明
当当网按关键字搜索商品的API返回值通常包含了搜索到的商品列表及其相关信息。具体的返回值结构可能因API版本和请求参数的不同而有所差异。以下是一个典型的当当网按关键字搜索商品API返回值的示例和说明:
|
28天前
|
存储 JavaScript API
C++ 正则表达式库 std::basic_regex 中文手册(API说明来自cppreference.com)
C++ 正则表达式库 std::basic_regex 中文手册(API说明来自cppreference.com)
23 0
|
30天前
|
Linux API C++
【Linux C/C++ 线程同步 】Linux API 读写锁的编程使用
【Linux C/C++ 线程同步 】Linux API 读写锁的编程使用
18 1
|
1月前
|
机器学习/深度学习 算法 API
1688API接口推荐:1688按图搜索拍立淘数据接口
1688API接口推荐:1688按图搜索拍立淘数据接口
288 4
|
1月前
|
C++
C++进阶--搜索二叉树
C++进阶--搜索二叉树
|
1月前
|
XML JSON 缓存
temu跨境电商按关键字搜索temu商品 API 返回值说明
请求参数:q=shoe&start_price=&end_price=&page=&list_id=&cat=&discount_only=&sort=&page_size=&seller_info=&nick=&ppath=
|
2月前
|
算法 测试技术 C++
【记忆化搜索】【剪枝】【C++算法】1553吃掉 N 个橘子的最少天数
【记忆化搜索】【剪枝】【C++算法】1553吃掉 N 个橘子的最少天数
|
2月前
|
算法 测试技术 C++
【动态规划】【记忆化搜索】【C++算法】664. 奇怪的打印机
【动态规划】【记忆化搜索】【C++算法】664. 奇怪的打印机