状态码定义
状态码 | 定义 | 注释 |
---|---|---|
0 | 正常 | |
1 | 服务器内部错误 | 该服务响应超时或系统内部错误,请留下联系方式 |
10 | 上传内容超过8M | Post上传数据不能超过8M |
101 | AK参数不存在 | 请求消息没有携带AK参数 |
102 | MCODE参数不存在,mobile类型mcode参数必需 | 对于Mobile类型的应用请求需要携带mcode参数,该错误码代表服务器没有解析到mcode |
200 | APP不存在,AK有误请检查再重试 | 根据请求的ak,找不到对应的APP |
201 | APP被用户自己禁用,请在控制台解禁 | |
202 | APP被管理员删除 | 恶意APP被管理员删除 |
203 | APP类型错误 | 当前API控制台支持Server(类型1), Mobile(类型2, 新版控制台区分为Mobile_Android(类型21)及Mobile_IPhone(类型22))及Browser(类型3),除此之外其他类型认为是APP类型错误 |
210 | APP IP校验失败 | 在申请SERVER类型应用的时候选择IP校验,需要填写IP白名单,如果当前请求的IP地址不在IP白名单或者不是0.0.0.0/0就认为IP校验失败 |
211 |
APP SN校验失败 |
SERVER类型APP有两种校验方式IP校验和SN校验,当用户请求的SN和服务端计算出来的SN不相等的时候提示SN校验失败 |
220 | APP Referer校验失败 | 浏览器类型的APP会校验referer字段是否存且切在referer白名单里面,否则返回该错误码 |
230 | APP Mcode码校验失败 | 服务器能解析到mcode,但和数据库中不一致,请携带正确的mcode |
240 | APP 服务被禁用 | 用户在API控制台中创建或设置某APP的时候禁用了某项服务,若需开通权限,可进入API控制台为AK勾选对应服务 |
250 | 用户不存在 | 根据请求的user_id, 数据库中找不到该用户的信息,请携带正确的user_id |
251 | 用户被自己删除 | 该用户处于未激活状态 |
252 | 用户被管理员删除 | 恶意用户被加入黑名单 |
260 | 服务不存在 | 服务器解析不到用户请求的服务名称 |
261 | 服务被禁用 | 该服务已下线 |
301 | 永久配额超限,限制访问 | 配额超限,如果想增加配额请联系我们 |
302 | 天配额超限,限制访问 | 配额超限,如果想增加配额请联系我们 |
401 | 当前并发量已经超过约定并发配额,限制访问 | 并发控制超限,请控制并发量或联系我们 |
402 | 当前并发量已经超过约定并发配额,并且服务总并发量也已经超过设定的总并发配额,限制访问 | 并发控制超限,请控制并发量或联系我们 |
网址:http://lbsyun.baidu.com/apiconsole/key,如下
点击:设置,如下图
sn计算算法,网址:http://lbsyun.baidu.com/index.php?title=webapi/appendix
javascript中一般采用encodeURIComponent函数对特殊字符进行编码。
Java中可以使用函数URLEncoder.encode对特殊字符进行编码。
C#中可以使用函数HttpUtility.UrlEncode对特殊字符进行编码。
php中可以使用函数urlencode对特殊字符进行编码。
Python计算SN算法如下,python 2.7参考代码:
填入自己的AK和SK,计算出自己的SN
# -*- coding: utf-8 -*-
# 第一行必须有,否则报中文字符非ascii码错误
import urllib
import hashlib
# 以get请求为例http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak
queryStr = '/geocoder/v2/?address=百度大厦&output=json&ak=yourak'
# 对queryStr进行转码,safe内的保留字符不转换
encodedStr = urllib.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
# 在最后直接追加上yoursk
rawStr = encodedStr + 'yoursk'
# md5计算出的sn值7de5a22212ffaa9e326444c75a58f9a0
# 最终合法请求url是http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak&sn=7de5a22212ffaa9e326444c75a58f9a0
print hashlib.md5(urllib.quote_plus(rawStr)).hexdigest()
http://api.map.baidu.com/geocoder/v2/?address=%E7%99%BE%E5%BA%A6%E5%A4%A7%E5%8E%A6&output=json&ak=你的AK&sn=你的SN
得到结果:
{"status":0,"result":{"location":{"lng":116.30788068028267,"lat":40.05705856845244},"precise":1,"confidence":80,"comprehension":100,"level":"商务大厦"}}
由于 SN的计算结果与要查询的字符串相关,SN不是固定的,每次都是变动的。
所以每次都得重新计算SN的值。
如下代码是计算SN值,并得到URL的程序:
# -*- coding: utf-8 -*-
import urllib
import hashlib
import json
def get_urt(address):
# 以get请求为例http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=你的ak
queryStr = '/geocoder/v2/?address=%s&output=json&ak=mAiGweYSlAt0pGYDOetmyOByRUEzpiSG' % address
# 对queryStr进行转码,safe内的保留字符不转换
encodedStr = urllib.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
# 在最后直接追加上yoursk
rawStr = encodedStr + 'Rx2n282wzMACr4Iu1tNvPxmWFjC9VTOL'
# 计算sn
sn = (hashlib.md5(urllib.quote_plus(rawStr).encode("utf8")).hexdigest())
# 由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
url = urllib.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
return url
url = get_urt('高新兴创联科技有限公司')
print url
data = urllib.urlopen(url);
print data
hjson = json.loads(data.read());
print 'hjson= ',hjson
print 'hjson[result]= ',hjson['result']
if hjson['status'] == 0:
result = hjson['result'];
# for m in range(1,len(result)):# 提取返回的结果
# print result[m];
print result['level']
print result['location']
得到的结果:
http://api.map.baidu.com/geocoder/v2/?address=%E9%AB%98%E6%96%B0%E5%85%B4%E5%88%9B%E8%81%94%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&output=json&ak=mAiGweYSlAt0pGYDOetmyOByRUEzpiSG&sn=60f61bc1d6573cdf01618f6530a5b1bd
hjson= {u'status': 0, u'result': {u'precise': 0, u'confidence': 16, u'level': u'\u533a\u53bf', u'location': {u'lat': 45.81349359029997, u'lng': 130.89318834855956}, u'comprehension': 65}}
hjson[result]= {u'precise': 0, u'confidence': 16, u'level': u'\u533a\u53bf', u'location': {u'lat': 45.81349359029997, u'lng': 130.89318834855956}, u'comprehension': 65}
区县
{u'lat': 45.81349359029997, u'lng': 130.89318834855956}
Process finished with exit code 0