首页 移动开发 在线交易 IT笔记 网络技术 操作系统 企业架构 数据库 考试认证 IT培训 开源软件 数据存储 行业资讯
大家都在看:java   开发   C#   oracle   mysql   android   web开发   学习   sqlserver   linux   asp   php   ajax   javascript   css   html
python调用 bing api search接口 技术
2013-01-25 09:49:41 来源: 作者:admin 栏目:python平台 责任编辑:admin
[导读]python调用 bing api search接口 技术

0x01 微软bing的api现在也放开了,可以供大家使用了,以前的v1板的时候采用的是appid的方式,这个网上有很多介绍了,可惜现在这个接口取消了,取而代之是新的认证方式

 

0x02 首先可以参考http://blogs.msdn.com/b/translation/p/gettingstarted1.aspx这个文章讲的就比较细了,注意的点不多,

 

0x3 首先注册的时候bing的应用(先注册个账号什么的就不用多说了),下来关键就是注册bing的search api 应用

https://datamarket.azure.com/browse/data?price=free&sort=name

这里面找,

 

 

点击进去,我们大多数穷人就选这个了

 

 

一路next下去,到最后完成后,可以打开My Account,看到如下界面就说明成功了,其中核心是Primary Account Key。

 

 
<!--[endif]-->

 

0x04 下来核心就是怎么用了,这里的文档讲的也比较细

https://skydrive.live.com/view.aspx?resid=9C9479871FBFA822!112&app=Word&authkey=!ANNnJQREB0kDC04

这里注意的点就比较多了,首先最重要的是api的认证方式,有两种,一种是OAuth2,一种是基本的401认证,其中OAuth2的方式比较正规和复杂点,但是管理性强些,而401认证就比较简单粗暴了,我用的是401认证的方式

 

0x05 401认证,顾名思义就是利用http 包头增加Authorization basic字段来实现认证。要注意的是这里认证的密码就是前面提到的Primary Account Key,用户名为空,

python中就是这个样子:

https:// api.datamarket.azure.com/Bing/Search/Web?'+ urllib.urlencode(payload)

AccountKey要注意的是,401认证的实质是在包头增加Authorization basic,而这里如果要直接代码实现的话,包头的内容应该增加如下:

Authorization basic base64.encode(":"+AccountKey)

一定要注意虽然用户名为空,但是冒号不能少,然后base64编码后,发送

payload的字段也很关键:

 

 

 

 

其中比较重要的是四个字段如下

$format  决定了返回的格式样式,是xml还是json,例如 $format=json

$top     决定了每一次返回的结果个数,类似于数据库分页中的limit,(0-50)。  

$skip    决定了返回的起始数字,类似与数据库分页的start

Query    就是实际查询的语句,特别要注意,这里的查询语句需要用两个单引  号括起来,不然会报错注意要url编码下

其中前三个字段的开头都要有$符号,千万不能忘。

 

0x06 返回的json格式目前是

   

 

 

0x07 附上一段python利用代码

 

Python代码 
# coding=utf-8   
""" 
Created on 2013-1-24 
 
@author: icefish 
""" 
import urllib  
import urllib2  
import base64  
try:  
    import json  
except ImportError:  
    import simplejson as json  
#这里填上你申请到的bing的accout key 就可以了      
AccountKey='XXXXXXX.....' 
top=50 
skip=0 
format='json' 
 
def BingSearch(query):  
    payload={}  
    payload['$top']=top  
    payload['$skip']=skip  
    payload['$format']=format  
    payload['Query']="'""'"+query+"'" 
    url='https://api.datamarket.azure.com/Bing/Search/Web?' + urllib.urlencode(payload)       
    sAuth='Basic '+base64.b64encode(':'+AccountKey)  
      
    headers = { }  
    headers['Authorization']= sAuth  
    try:  
        req = urllib2.Request(url,headers=headers)          
        response = urllib2.urlopen(req)  
        the_page=response.read()   
        #print the_page  
        data=json.loads(the_page)   
          
        return data  
    except Exception as e:  
        print e  
        #print e.info()  
      
if __name__ == '__main__':  
    data=BingSearch("abc")  
    print data 

 

本站地址:/
版权所有:转载请注明出处!
分享到:
上一篇python: extend (扩展) 与 append.. 下一篇python oracle查询中文乱码(问号..
您可能还喜欢
今日最新资讯 最新推荐信息
考试认证 更多
开发技术 更多
移动开发 更多

关于 | 合作伙伴 | 联系我们 | 友情链接 | 版权声明 | 网站制作 | 网站地图 | 加入收藏 | 设为首页

Copyright@2012-2016 京ICP备12027873号