crond_weather.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import requests
  2. import sqlite3
  3. import json
  4. import os
  5. import datetime
  6. from weather import all_city
  7. import logging
  8. # 配置日志级别和格式
  9. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  10. # 创建一个文件处理器,指定日志文件名和写入模式
  11. os.mkdir("/data/weather/") if not os.path.exists("/data/weather/") else None
  12. file_handler = logging.FileHandler('/data/weather/app.log')
  13. file_handler.setLevel(logging.INFO)
  14. # 创建一个格式化程序,用于定义日志消息的显示方式
  15. formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
  16. file_handler.setFormatter(formatter)
  17. # 将文件处理器添加到根日志记录器中
  18. logging.getLogger('').addHandler(file_handler)
  19. app_id = "69334222"
  20. app_secret = "2u4bHXHD"
  21. province_dict = {
  22. "11": '北京市',
  23. "12": '天津市',
  24. "13": '河北省',
  25. "14": '山西省',
  26. "15": '内蒙古自治区',
  27. "21": '辽宁省',
  28. "22": '吉林省',
  29. "23": '黑龙江省',
  30. "31": '上海市',
  31. "32": '江苏省',
  32. "33": '浙江省',
  33. "34": '安徽省',
  34. "35": '福建省',
  35. "36": '江西省',
  36. "37": '山东省',
  37. "41": '河南省',
  38. "42": '湖北省',
  39. "43": '湖南省',
  40. "44": '广东省',
  41. "45": '广西壮族自治区',
  42. "46": '海南省',
  43. "50": '重庆市',
  44. "51": '四川省',
  45. "52": '贵州省',
  46. "53": '云南省',
  47. "54": '西藏自治区',
  48. "61": '陕西省',
  49. "62": '甘肃省',
  50. "63": '青海省',
  51. "64": '宁夏回族自治区',
  52. "65": '新疆维吾尔自治区'
  53. }
  54. db = "/data/weather/weather.db"
  55. def init_data():
  56. # 导入全部的城市
  57. conn = sqlite3.connect(db)
  58. cursor = conn.cursor()
  59. cursor.execute(
  60. """
  61. CREATE TABLE IF NOT EXISTS `district` (
  62. `id` bigint(20) NOT NULL,
  63. `city` varchar(50) NOT NULL DEFAULT '',
  64. `pid` bigint(20) NOT NULL
  65. );
  66. """
  67. )
  68. cursor.execute(
  69. """
  70. CREATE TABLE IF NOT EXISTS `day_data` (
  71. `id` INTEGER PRIMARY KEY,
  72. `cityid` varchar(50) NOT NULL,
  73. `province` varchar(50) NOT NULL,
  74. `city` varchar(50) NOT NULL DEFAULT '',
  75. `district` varchar(50) NOT NULL DEFAULT '',
  76. `content` TEXT NULL DEFAULT ''
  77. );
  78. """
  79. )
  80. cursor.execute(
  81. """
  82. CREATE TABLE IF NOT EXISTS `server_day_data` (
  83. `id` INTEGER PRIMARY KEY,
  84. `cityid` varchar(50) NOT NULL,
  85. `province` varchar(50) NOT NULL,
  86. `city` varchar(50) NOT NULL DEFAULT '',
  87. `district` varchar(50) NOT NULL DEFAULT '',
  88. `content` TEXT NULL DEFAULT ''
  89. );
  90. """
  91. )
  92. sql = """
  93. select * from district where id > 65
  94. """
  95. cursor.execute(sql)
  96. results = cursor.fetchall()
  97. if not results:
  98. print("填充原始数据")
  99. for k in all_city:
  100. sql = """
  101. INSERT INTO `district` (`id`, `city`, `pid`) VALUES (?, ?, ?)
  102. """
  103. cursor.execute(sql, (k[0], k[1], k[2], ))
  104. conn.commit()
  105. conn.close()
  106. def main():
  107. init_data()
  108. logging.warning("up...")
  109. conn1 = sqlite3.connect(db)
  110. cursor1 = conn1.cursor()
  111. sql = """
  112. select * from district where id > 65
  113. """
  114. cursor1.execute(sql)
  115. results = cursor1.fetchall()
  116. # 更新数据
  117. for i, row in enumerate(results):
  118. temp = row[1] # 东城区
  119. id = row[0] # 110101000000
  120. pid = row[2] # 110100000000
  121. if len(str(pid)) == 2:
  122. # 处理 省 市 样例
  123. city = temp
  124. district = ""
  125. else:
  126. # 其它
  127. cursor1.execute('select city from district where id = ?', (pid,))
  128. te = cursor1.fetchone()
  129. city = te[0]
  130. district = temp
  131. if city == "市辖区":
  132. city = district
  133. district = ""
  134. province_id = (str(row[0]))[:2]
  135. province = province_dict.get(province_id)
  136. try:
  137. today_url = f"https://v0.yiketianqi.com/api?unescape=1&version=v62&appid={app_id}&appsecret={app_secret}&adcode={id}"
  138. today_response = requests.get(today_url)
  139. today_data = json.loads(today_response.text)
  140. if "errcode" not in today_data.keys():
  141. cityid = today_data.get("cityid", "")
  142. today_sql = """
  143. INSERT OR REPLACE INTO `day_data` (`id`, `cityid`, `province`, `city`, `district`, content) VALUES (?,?, ?, ?, ?, ?)
  144. """
  145. cursor1.execute(today_sql, (i, cityid, province, city, district,str(today_data)))
  146. server_day_url = f"https://v0.yiketianqi.com/api?unescape=1&version=v91&appid={app_id}&appsecret={app_secret}&adcode={id}&ext=hours,aqi,life"
  147. server_day_response = requests.get(server_day_url)
  148. server_day_data = json.loads(server_day_response.text)
  149. if "errcode" not in server_day_data.keys():
  150. cityid = today_data.get("cityid", "")
  151. server_sql = f"""
  152. INSERT OR REPLACE INTO `server_day_data` (`id`,`cityid`,`province`, `city`, `district`, `content`) VALUES (?,?, ?, ?, ?, ?)
  153. """
  154. cursor1.execute(server_sql, (i, cityid, province, city, district,str(server_day_data),))
  155. conn1.commit()
  156. except Exception as e:
  157. print(e)
  158. conn1.close()
  159. logging.warning("over...")
  160. if __name__ == "__main__":
  161. main()