#-*- 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()