phone.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. '''
  4. @Contact : liuyuqi.gov@msn.cn
  5. @Time : 2023/05/29 19:20:39
  6. @License : Copyright © 2017-2022 liuyuqi. All Rights Reserved.
  7. @Desc : 手机接口
  8. '''
  9. import hashlib
  10. import base64
  11. class KePhone(object):
  12. ''' 调用app接口 '''
  13. def __init__(self):
  14. pass
  15. # 获取挂牌信息-贝壳网信息
  16. def get_guapai_data(self, xiaoqu_id):
  17. guapai_url = 'https://app.api.ke.com/house/ershoufang/searchv5'
  18. guapai_data = {
  19. 'fullFilters': '1',
  20. 'containerType': '2',
  21. 'limitCount': '20',
  22. 'condition': xiaoqu_id,
  23. 'cityId': '**********',
  24. 'limitOffset': '0'
  25. }
  26. # header抓一下复制进来
  27. headers = {
  28. "x-req-id": "**********",
  29. "Page-Schema": "ershou%2Flist",
  30. "Referer": "ershoulistsearch",
  31. "Cookie": "lianjia_udid=********;"
  32. "lianjia_ssid=**********;"
  33. "lianjia_uuid=**********",
  34. "Lianjia-City-Id": "**********",
  35. "User-Agent": "Beike2.31.0;Android MuMu; Android 6.0.1",
  36. "Lianjia-Channel": "**********",
  37. "Lianjia-Device-Id": "**********",
  38. "Lianjia-Version": "2.31.0",
  39. "Lianjia-Im-Version": "2.34.0",
  40. "Lianjia-Recommend-Allowable": "1",
  41. "Authorization": self.generateAuthorization(guapai_url, guapai_data),
  42. "ip": "**********",
  43. "wifi_name": "**********",
  44. "lat": "**********",
  45. "lng": "**********",
  46. "Host": "app.api.ke.com",
  47. "Connection": "Keep-Alive",
  48. "Accept-Encoding": "gzip"
  49. }
  50. guapai_res = requests.get(guapai_url, headers=headers, params=guapai_data)
  51. # 获取小区的挂牌信息列表
  52. guapai_json = json.loads(guapai_res.text)
  53. if guapai_json['errno'] == 0:
  54. guapai_info = guapai_json['data']['list']
  55. for i in guapai_info:
  56. # 插入数据库的信息列表
  57. sql_data = []
  58. if 'houseCode' in i:
  59. # house_code
  60. house_code = i['houseCode']
  61. sql_data.append(house_code)
  62. # 标题
  63. resblock_name = i['title']
  64. sql_data.append(resblock_name)
  65. # 描述
  66. resblock_desc = i['desc']
  67. sql_data.append(resblock_desc)
  68. # 总价
  69. total_p = i['priceStr']
  70. total_p = self.return_no(total_p)
  71. sql_data.append(total_p)
  72. # 小区
  73. communityName = i['communityName']
  74. sql_data.append(communityName)
  75. # basicList处理
  76. for basic_info in i['basicList']:
  77. # pass
  78. sql_data.append(basic_info['value'])
  79. # infoList处理
  80. for infoList_info in i['infoList']:
  81. infoList_data = infoList_info['value']
  82. if infoList_info['name'] == '单价:':
  83. # 返回数字
  84. infoList_data = self.return_no(infoList_data)
  85. sql_data.append(infoList_data)
  86. # 构造URL,用于微信推送
  87. url = 'https://m.ke.com/tj/ershoufang/' + house_code + '.html'
  88. sql_data.append(url)
  89. # 数据插入数据库
  90. self.insert_guapai(sql_data)
  91. # 休眠
  92. sleeptime = random.randint(2, 10)
  93. time.sleep(sleeptime)
  94. # 获取Authorization
  95. # 来源https://github.com/ShiJianYingxiang/origin/blob/master/fang_beike/fang_beike/spiders/ershou_viewer.py
  96. # url没用
  97. def generateAuthorization(self, url, url_parm):
  98. secret_key = "d5e343d453aecca8b14b2dc687c381ca"
  99. secret_id = "20180111_android"
  100. # 提取URL内参数
  101. # url_parm = {i.split("=")[0]: i.split("=")[1] for i in url.split("?")[1].split("&")}
  102. # 参数排序
  103. url_parm_sort = sorted(url_parm.items(), key=lambda x: x[0], reverse=False)
  104. p2 = secret_key + "".join([i[0] + "=" + i[1] for i in url_parm_sort])
  105. v3 = hashlib.sha1(p2.encode('utf-8')).hexdigest()
  106. v4 = secret_id + ":" + v3
  107. v5 = base64.b64encode(v4.encode("utf-8"))
  108. return v5.decode()
  109. if __name__ == "__main__":
  110. pass