get_charger_station.py 6.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import os, sys
  4. import urllib
  5. import requests
  6. from mongoengine import register_connection, PointField, DynamicDocument, StringField
  7. import simplejson as json
  8. from django.db.models.fields import FloatField
  9. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  10. sys.path.insert(0, PROJECT_ROOT)
  11. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "configs.testing")
  12. from script.base import init_env
  13. init_env(interactive = False)
  14. # 获取全国的大学和学院的地理位置信息
  15. # strhtml = requests.post(url, json = payload,timeout = 15).text
  16. # result = json.loads(strhtml)
  17. regCodes = [33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,731,770,789,792,1214,1215,1216,1217,1218,1277,1293,1498,1515,1641,1642,1643,1644,1713,2031,2032,2033,2358,2359,2634,2654,2734,2757,2758]
  18. # regCodes = [124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,731,770,789,792,1214,1215,1216,1217,1218,1277,1293,1498,1515,1641,1642,1643,1644,1713,2031,2032,2033,2358,2359,2634,2654,2734,2757,2758]
  19. #regCodes = [169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,731,770,789,792,1214,1215,1216,1217,1218,1277,1293,1498,1515,1641,1642,1643,1644,1713,2031,2032,2033,2358,2359,2634,2654,2734,2757,2758]
  20. #regCodes = [218]
  21. register_connection(alias = 'spider',
  22. name = 'spider',
  23. host = '211.159.224.10',
  24. port = 27119,
  25. username = 'service',
  26. password = 'oOzjoQcO5DyyiN97AY0NpzJ6vztjNpx5',
  27. authentication_source = 'admin')
  28. class ChargeStation(DynamicDocument):
  29. province = StringField(default = "")
  30. city = StringField(default = "")
  31. name = StringField(default = '')
  32. address = StringField(default = '')
  33. telephone = StringField(default = '')
  34. lat = StringField(default = '')
  35. lng = StringField(default = '')
  36. meta = {
  37. 'collection': 'ChargeStation',
  38. 'db_alias': 'spider',
  39. 'unique_together': {'lat', 'lng'}
  40. }
  41. def get_page(regCode,pageNum):
  42. baiduUrl = 'http://api.map.baidu.com/place/v2/search?query=充电桩&page_num=%s&region=%s&output=json&ak=3RVEkGkdaiSnVHn0dT5EGZu1RngcFlyP' % (pageNum,regCode)
  43. return json.loads(requests.get(baiduUrl,timeout=15).text)
  44. def upsert_gov(result):
  45. for info in result['results']:
  46. if 'location' not in info:
  47. continue
  48. newSch = ChargeStation(province = info.get('province',''),city = info.get('city',''),name = info.get('name',''),address = info.get('address',''),telephone=info.get('telephone',''),lat = str(info['location']['lat']),lng = str(info['location']['lng']))
  49. try:
  50. newSch.save()
  51. except Exception,e:
  52. continue
  53. pageNum = 0
  54. for reg in regCodes:
  55. print reg
  56. getCount = 0
  57. pageNum = 0
  58. result = get_page(reg,pageNum)
  59. getCount += len(result['results'])
  60. upsert_gov(result)
  61. while getCount < result['total']:
  62. pageNum += 1
  63. result = get_page(reg,pageNum)
  64. upsert_gov(result)
  65. getCount += len(result['results'])
  66. print reg,getCount
  67. print 'ok'