wanzhuang.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import os, sys,time,datetime
  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 DateTimeField
  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. from apps.web.core.db import Searchable
  15. register_connection(alias = 'spider',
  16. name = 'spider',
  17. host = '211.159.224.10',
  18. port = 27119,
  19. username = 'service',
  20. password = 'oOzjoQcO5DyyiN97AY0NpzJ6vztjNpx5',
  21. authentication_source = 'admin')
  22. class Goverment(Searchable):
  23. province = StringField(default = "")
  24. city = StringField(default = "")
  25. name = StringField(default = '')
  26. lat = StringField(default = '')
  27. lng = StringField(default = '')
  28. meta = {
  29. 'collection': 'Goverment',
  30. 'db_alias': 'spider',
  31. 'unique_together': {'lat', 'lng'}
  32. }
  33. class wanzhuangDevice(Searchable):
  34. lat = StringField(default = '')
  35. lng = StringField(default = '')
  36. meta = {
  37. 'collection': 'wanzhuang_device',
  38. 'db_alias': 'spider',
  39. 'unique_together': {'device_num'}
  40. }
  41. class errorLog(Searchable):
  42. meta = {
  43. 'collection': 'wanzhuang_err_location',
  44. 'db_alias': 'spider',
  45. 'unique_together': {'lat', 'lng'}
  46. }
  47. # 根据二维码编号,获取设备更详细的信息
  48. url = 'https://webapp.wanzhuangkj.com/api/record/deviceMap?longitude=%s&latitude=%s&scale=50000&device_type=-1'
  49. auth = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vYXBpLndlYmFwcC53YW56aHVhbmdrai5jb20vYXV0aC90b2tlbiIsImlhdCI6MTYxNTE4MjUxNiwiZXhwIjoxNjE2MzkyMTE2LCJuYmYiOjE2MTUxODI1MTYsImp0aSI6ImpPb2RLamw0ZXhmdUQwajEiLCJzdWIiOjE4NTAzMjIsInBydiI6IjZmMTdkOTMxYmZlNjUwYzNlMjU3YWNkNGE5NDMxYWU5ZWM1MDEyNjciLCJjb21wYW55X2lkIjoiMiIsImNvbXBhbnlEYl9jb25uIjoid3oiLCJ1c2VyX2lkIjoxNzg4MDY1LCJ1c2VyX3R5cGUiOiJ3eHBheSIsIm9wZW5pZCI6Im9feGdxMHF6eUJPVHpQbmNRWU1EVWt5RFoyeVEifQ.2bPZFgPJPS6O5N0_XKXjLKsUI57d-QiHTClpjUWUpvs'
  50. govs = Goverment.get_collection().find()
  51. ii = 0
  52. for gov in govs:
  53. try:
  54. ii += 1
  55. print ii,gov['name']
  56. url1 = url % (gov['lng'],gov['lat'])
  57. strhtml = requests.get(url1,verify=False,headers = {'Authorization':auth}).text
  58. result = json.loads(strhtml)
  59. if result.has_key('status_code') and result['status_code'] == 429:
  60. time.sleep(20)
  61. errorLog.get_collection().update({'lat':gov['lat'],'lng':gov['lng']})
  62. if not result.has_key('data'):
  63. continue
  64. if len(result['data'])== 0:
  65. continue
  66. print len(result['data'])
  67. for dev in result['data']:
  68. wanzhuangDevice.get_collection().update({'device_num':dev['device_num']},{'$set':dev},upsert = True)
  69. except Exception,e:
  70. continue
  71. print('OK')