基于百度地图的python开发-【Python】百度地图API获取地理信息

#-*- coding: utf-8 -*-

importurllib2, json, sys, timereload(sys)

sys.setdefaultencoding("utf8")

GLOBAL_URL= "http://api.map.baidu.com/place/v2/search?region=北京%s&city_limit=true&query=%s&page_size=10&output=json&ak=%s"GLOBAL_AK= ""GLOBAL_SQL= "SELECT `name`, `district` FROM estate WHERE location IS NULL and `status` IS NULL LIMIT 100"

COLUMN_LIST = ["area", "address", "location", "province", "city", "uid"]

UPDATE_SQL= """UPDATE estate

SET %s, source_name = "%s", `status` = %s, `result` = "%s"

WHERE `name` = "%s" AND `district` = "%s""""

"""estate的status字段

更新数据状态

小区名全匹配且全属性 0

小区名全匹配属性不全 1

小区名全匹配无detail=1 2

小区名无全匹配第一个detail=1的全属性数据 3

小区名无全匹配第一个detail=1的属性不全数据 4

小区名无全匹配没有detail=1的数据 5

没搜到任何数据 -1"""

class CheckEstate:

def __init__(self):

# 本地存

pass

classCheckEstateData:def __init__(self, name, district):

self.name=name

self.district=district

self.error=None

self.msg=None

self.__get_data__()ifself.datas:

self.do()def __get_data__(self):try:print "URL: %s" % (GLOBAL_URL %(self.district, self.name, GLOBAL_AK))

html= urllib2.urlopen(GLOBAL_URL %(self.district, self.name, GLOBAL_AK))

b=html.read()

c=json.loads(b)if c["status"] == 0 and c["message"] == "ok":

self.datas, self.error= c["results"], Noneelse:

self.datas, self.error= None, "ERR: API return %s" % c["message"]exceptException, e:

self.datas, self.error= None, "ERR: get data %s %s" %(self.name, str(e))defupdate(self, sql):print "INFO: sql %s" %sql

s=CheckEstate(sql)ifs.error:

self.error= "ERR: UPDATE ERR, %s" %s.errorelse:

self.msg= "INFO: %s ok" %self.namedefcheck_colunm(self, data):if not set(COLUMN_LIST).difference([k for k indata]):returnTruereturnFalsedefget_info(self):for d inself.datas:if d["name"] == self.name and "detail" in d and d["detail"] == 1:

r=check_colunm(d)ifr:returnd, 0else:return d, 1

#if self.name in [row["name"] for row in self.datas]:

#return None, 2

for d inself.datas:if "detail" in d and d["detail"] == 1:

r=self.check_colunm(d)ifr:return d, 3

else:return d, 4

return None, -1

defdo(self):

r, status=self.get_info()ifr:

value= ",".join(

["%s = "%s"" %(k, json.dumps(r[k]))if k == "location"

else "%s = "%s"" %(k, r[k])for k in [key for key in r if key inCOLUMN_LIST]

]

)

sql= UPDATE_SQL % (value, r["name"], status, json.dumps(self.datas, ensure_ascii=False), self.name, self.district)else:

sql= "UPDATE estate set `status` = %s, `result` = "%s" WHERE `name` = "%s" and district = "%s"" % (status, json.dumps(self.datas, ensure_ascii=False), self.name, self.district)

self.update(sql)defget_estate_info():

c=CheckEstate(None)ifc.error:printc.errorreturnc.errorfor d inc.r:

estate= CheckEstateData(d["name"], d["district"])ifestate.error:printestate.errorelse:printestate.msg

time.sleep(0.5)returnNoneif __name__ == "__main__":

get_estate_info()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值