util.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. import json
  2. import random
  3. import requests
  4. import os
  5. import time
  6. import smtplib
  7. from email.mime.text import MIMEText
  8. from email.mime.multipart import MIMEMultipart
  9. from email.mime.image import MIMEImage
  10. from config import global_config
  11. from jd_logger import logger
  12. USER_AGENTS = [
  13. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36",
  14. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
  15. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
  16. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
  17. "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36",
  18. "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
  19. "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36",
  20. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36",
  21. "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36",
  22. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
  23. "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
  24. "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36",
  25. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
  26. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36",
  27. "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36",
  28. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36",
  29. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36",
  30. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36",
  31. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36",
  32. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36",
  33. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36",
  34. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F",
  35. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
  36. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36",
  37. "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36",
  38. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
  39. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36",
  40. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36",
  41. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36",
  42. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36",
  43. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36",
  44. "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36",
  45. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36",
  46. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36",
  47. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36",
  48. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36",
  49. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36",
  50. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
  51. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
  52. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
  53. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
  54. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
  55. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
  56. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36",
  57. "Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
  58. "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36",
  59. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17",
  60. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17",
  61. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15",
  62. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14"
  63. ]
  64. def parse_json(s):
  65. begin = s.find('{')
  66. end = s.rfind('}') + 1
  67. return json.loads(s[begin:end])
  68. def get_random_useragent():
  69. """生成随机的UserAgent
  70. :return: UserAgent字符串
  71. """
  72. return random.choice(USER_AGENTS)
  73. def wait_some_time():
  74. time.sleep(random.randint(100, 300) / 1000)
  75. def send_wechat(message):
  76. """推送信息到微信"""
  77. url = 'http://sc.ftqq.com/{}.send'.format(global_config.getRaw('messenger', 'sckey'))
  78. payload = {
  79. "text":'抢购结果',
  80. "desp": message
  81. }
  82. headers = {
  83. 'User-Agent':global_config.getRaw('config', 'DEFAULT_USER_AGENT')
  84. }
  85. requests.get(url, params=payload, headers=headers)
  86. def response_status(resp):
  87. if resp.status_code != requests.codes.OK:
  88. print('Status: %u, Url: %s' % (resp.status_code, resp.url))
  89. return False
  90. return True
  91. def open_image(image_file):
  92. if os.name == "nt":
  93. os.system('start ' + image_file) # for Windows
  94. else:
  95. if os.uname()[0] == "Linux":
  96. if "deepin" in os.uname()[2]:
  97. os.system("deepin-image-viewer " + image_file) # for deepin
  98. else:
  99. os.system("eog " + image_file) # for Linux
  100. else:
  101. os.system("open " + image_file) # for Mac
  102. def save_image(resp, image_file):
  103. with open(image_file, 'wb') as f:
  104. for chunk in resp.iter_content(chunk_size=1024):
  105. f.write(chunk)
  106. class Email():
  107. def __init__(self, mail_user, mail_pwd, mail_host=''):
  108. smtpObj = smtplib.SMTP()
  109. # 没传会自动判断 判断不出来默认QQ邮箱
  110. if mail_host:
  111. self.mail_host = mail_host
  112. elif mail_user.endswith('163.com'):
  113. self.mail_host = 'smtp.163.com'
  114. elif mail_user.endswith(('sina.com', 'sina.cn')):
  115. self.mail_host = 'smtp.163.com'
  116. elif mail_user.endswith('qq.com'):
  117. self.mail_host = 'smtp.qq.com'
  118. elif mail_user.endswith('sohu.com'):
  119. self.mail_host = 'smtp.sohu.com'
  120. else:
  121. self.mail_host = 'smtp.qq.com'
  122. self.mail_user = mail_user
  123. self.is_login = False
  124. try:
  125. smtpObj.connect(mail_host, 25)
  126. smtpObj.login(mail_user, mail_pwd)
  127. self.is_login = True
  128. except Exception as e:
  129. logger.info('邮箱登录失败!', e)
  130. self.smtpObj = smtpObj
  131. def send(self, title, msg, receivers: list, img=''):
  132. """
  133. 发送smtp邮件至收件人
  134. :param title:
  135. :param msg: 如果发送图片,需在msg内嵌入<img src='cid:xxx'>,xxx为图片名
  136. :param receivers:
  137. :param img: 图片名
  138. :return:
  139. """
  140. if self.is_login:
  141. message = MIMEMultipart('alternative')
  142. msg_html = MIMEText(msg, 'html', 'utf-8')
  143. message.attach(msg_html)
  144. message['Subject'] = title
  145. message['From'] = self.mail_user
  146. if img:
  147. with open(img, "rb") as f:
  148. msg_img = MIMEImage(f.read())
  149. msg_img.add_header('Content-ID', img)
  150. message.attach(msg_img)
  151. try:
  152. self.smtpObj.sendmail(self.mail_user, receivers, message.as_string())
  153. except Exception as e:
  154. logger.info('邮件发送失败!', e)
  155. else:
  156. logger.info('邮箱未登录')
  157. email = Email(
  158. mail_host=global_config.getRaw('messenger', 'email_host'),
  159. mail_user=global_config.getRaw('messenger', 'email_user'),
  160. mail_pwd=global_config.getRaw('messenger', 'email_pwd'),
  161. )