用Python加itchat写一个爬虫脚本每天定时给女朋友发微信暖心话

功能

定时给女朋友发送每日天气、提醒、每日一句。

数据来源

每日一句和上面的大佬一样也是来自ONE·一个

天气信息来自SOJSON

实现效果

image
image

代码说明

目录结构

image

city_dict.py :城市对应编码字典

config.yaml :设置定时时间,女友微信名称等参数

GFWeather.py:核心代码

requirements.txt:需要安装的库

run.py:项目运行类

核心代码

GFWeather.py

class gfweather:
 headers = {
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36",
 }
 # 女朋友的用户id
 bf_wechat_name_uuid = ''
 def __init__(self):
 self.city_code, self.start_datetime, self.bf_wechat_name, self.alarm_hour, self.alarm_minute = self.get_init_data()
 def get_init_data(self):
 '''
 初始化基础数据
 :return:
 '''
 with open('config.yaml', 'r', encoding='utf-8') as f:
 config = yaml.load(f)
 city_name = config.get('city_name').strip()
 start_date = config.get('start_date').strip()
 wechat_name = config.get('wechat_name').strip()
 alarm_timed = config.get('alarm_timed').strip()
 init_msg = f"每天定时发送时间:{alarm_timed}\n女友所在城市名称:{city_name}\n女朋友的微信昵称:{wechat_name}\n在一起的第一天日期:{start_date}"
 print(u"*" * 50)
 print(init_msg)
 # 根据城市名称获取城市编号,用于查询天气。查看支持的城市为:http://cdn.sojson.com/_city.json
 city_code = city_dict.city_dict.get(city_name)
 if not city_code:
 print('您输出城市无法收取到天气信息')
 start_datetime = datetime.strptime(start_date, "%Y-%m-%d")
 hour, minute = [int(x) for x in alarm_timed.split(':')]
 # print(hour, minute)
 return city_code, start_datetime, wechat_name, hour, minute
 def is_online(self, auto_login=False):
 '''
 判断是否还在线,
 :param auto_login:True,如果掉线了则自动登录。
 :return: True ,还在线,False 不在线了
 '''
 def online():
 '''
 通过获取好友信息,判断用户是否还在线
 :return: True ,还在线,False 不在线了
 '''
 try:
 if itchat.search_friends():
 return True
 except:
 return False
 return True
 if online():
 return True
 # 仅仅判断是否在线
 if not auto_login:
 return online()
 # 登陆,尝试 5 次
 for _ in range(5):
 # 命令行显示登录二维码
 # itchat.auto_login(enableCmdQR=True)
 itchat.auto_login()
 if online():
 print('登录成功')
 return True
 else:
 return False
 def run(self):
 # 自动登录
 if not self.is_online(auto_login=True):
 return
 # 定时任务
 scheduler = BlockingScheduler()
 # 每天9:30左右给女朋友发送每日一句
 scheduler.add_job(self.start_today_info, 'cron', hour=self.alarm_hour, minute=self.alarm_minute)
 scheduler.start()
 def start_today_info(self):
 print("*" * 50)
 print('获取相关信息...')
 dictum_msg = self.get_dictum_info()
 today_msg = self.get_weather_info(dictum_msg)
 print(f'要发送的内容:\n{today_msg}')
 if self.is_online(auto_login=True):
 # 获取好友username
 if not self.bf_wechat_name_uuid:
 friends = itchat.search_friends(name=self.bf_wechat_name)
 if not friends:
 print('昵称错误')
 return
 self.bf_wechat_name_uuid = friends[0].get('UserName')
 itchat.send(today_msg, toUserName=self.bf_wechat_name_uuid)
 print('发送成功..\n')
 def get_dictum_info(self):
 '''
 获取格言信息(从『一个。one』获取信息 http://wufazhuce.com/)
 :return: str 一句格言或者短语
 '''
 print('获取格言信息..')
 user_url = 'http://wufazhuce.com/'
 resp = requests.get(user_url, headers=self.headers)
 soup_texts = BeautifulSoup(resp.text, 'lxml')
 # 『one -个』 中的每日一句
 every_msg = soup_texts.find_all('div', class_='fp-one-cita')[0].find('a').text
 return every_msg
 def get_weather_info(self, dictum_msg=''):
 '''
 获取天气信息。网址:https://www.sojson.com/blog/305.html
 :param dictum_msg: 发送给朋友的信息
 :return:
 '''
 print('获取天气信息..')
 weather_url = f'http://t.weather.sojson.com/api/weather/city/{self.city_code}'
 resp = requests.get(url=weather_url)
 if resp.status_code == 200 and resp.json().get('status') == 200:
 weatherJson = resp.json()
 # 今日天气
 today_weather = weatherJson.get('data').get('forecast')[1]
 locale.setlocale(locale.LC_CTYPE, 'chinese')
 today_time = datetime.now().strftime('"%Y年%m月%d日 %H:%M:%S"')
 # 今日天气注意事项
 notice = today_weather.get('notice')
 # 温度
 high = today_weather.get('high')
 high_c = high[high.find(' ') + 1:]
 low = today_weather.get('low')
 low_c = low[low.find(' ') + 1:]
 temperature = f"温度 : {low_c}/{high_c}"
 # 风
 fx = today_weather.get('fx')
 fl = today_weather.get('fl')
 wind = f"{fx} : {fl}"
 # 空气指数
 aqi = today_weather.get('aqi')
 aqi = f"空气 : {aqi}"
 day_delta = (datetime.now() - self.start_datetime).days
 delta_msg = f'宝贝这是我们在一起的第 {day_delta} 天'
 today_msg = f'{today_time}\n{delta_msg}。\n{notice}\n{temperature}\n{wind}\n{aqi}\n{dictum_msg}\n来自最爱你的我。'
 return today_msg

项目运行

安装依赖

使用 pip install -r requirements.txt 安装所有依赖

参数配置

config.yaml

#每天定时发送的时间点,如:8:30
alarm_timed: '9:30'
# 女友所在城市名称
city_name: '桂林'
# 你女朋友的微信名称
wechat_name: '古典'
# 从那天开始勾搭的
start_date: '2017-11-11'

小编最近整理了一套Python学习教程,有需要的小伙伴,记得来小编的交流群:556370268,即可免费领取一套Python学习教程哦

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 软迩,一个九零后,谈过三场恋爱。 初恋,初中,同班同学,像往常的初恋一样很甜很单纯,180+的...
    软迩阅读 268评论 0 0
  • 我们曾经经历过许多一瞬间,有的让我感动,有的让我难忘,有的让我高兴,像天上闪烁的星星一样,数也数不尽。我曾经发生过...
    崔梦欣阅读 580评论 0 0
  • 因为花钱就是流水。 哪些地方花钱多呢?吃饭。吃饭,随意可到30+,其实可以控制在15以内的。就可以省很多钱。另外,...
    冬木暖阳阅读 430评论 0 1
  • 一直以来都不是个喜欢写作的人,一想到写作,立即就会联想到两个词——“绞尽脑汁”和“如临大敌”。在端银老师的组织下,...
    龙马行天下阅读 553评论 0 6
  • 最近弟弟在开始尝试一个人睡觉,很是艰难,妈妈突然说起我当年尝试一个人睡的场景,深更半夜趁他们睡着,就披着被子偷偷下...
    稻草稻草和麦田阅读 185评论 0 3