Skip to content

Commit

Permalink
新增微信接口测试号、电子邮件通道,支持多类型随机图片,截断超长链接,修复Bug,拆分代码
Browse files Browse the repository at this point in the history
  • Loading branch information
Thund1R committed Oct 3, 2022
1 parent bd548f8 commit af8140f
Show file tree
Hide file tree
Showing 13 changed files with 1,155 additions and 853 deletions.
78 changes: 42 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
<div align=center><img src="https://urlshare.img.ink/2022/68919a2809dbb.png" alt="phone2"/></div>
<div align=center><img src="https://urlshare.img.ink/2022/c1aacad5a9507.png" alt="phone2"/></div>
<h1 align="center">DailyInfo</h1>
<h6 align="center">基于企业微信的每日图文推送</h6>
<h6 align="center">基于Python的每日图文推送</h6>

## Notice

### 受企业微信9月19日策略调整,新企业必须有认证、必须有备案域名,且二者信息一致情况下,才能使用自建应用。
🆙**2022年10月3日更新,新增微信接口测试号、电子邮件通道,支持随机图片多类型,修复Bug等,更新前请务必仔细了解相关内容,并做好所有代码的备份,详情请看 [更新日志](https://mp.weixin.qq.com/s/G8yf2eZ-9BH1rnK-dZkEcw)**

### 新建企业用户暂时无法使用本项目,带来不便,深感抱歉!
🆙**第一个公开的付费定制DailyTip日常提醒发布,支持获取自己准备的图片,支持21种天行数据,感兴趣的可以去看看~,详情请看 [更新日志](https://mp.weixin.qq.com/s/ZTDU6_vVSaNQJyu712hYDw)**

### 9月19日前已建企业及应用的用户暂时不受此影响。
⚠️**受企业微信官方9月19日策略调整,新建企业用户在新建应用时需要配置可信域名,且备案信息与企业一致。有服务器和备案域名的朋友可以按照官方要求自行尝试配置,不能保证成功。没有上述条件的朋友暂时无法使用企业微信通道,请使用微信接口测试号/电子邮件通道。9月19日前已建企业及应用的用户暂时不受此影响。**

❗︎︎**本项目采用 [GPLv3](https://www.gnu.org/licenses/gpl-3.0.txt) 协议,仅供个人学习和使用,未授权任何商业化、付费行为,包括但不限于源代码、教程、代建、代搭。使用本项目源码/教程即视为同意本条款,本人保留对一切违反本条款行为诉诸法律的权利**
💻**企业微信通道、带图文详情页面的接口测试号通道——只支持云服务器或腾讯云函数平台部署**

🆙**2022年9月16日更新,新增多城市疫情数据等功能,优化调整以往功能,更新前请务必仔细了解相关内容,并做好所有代码的备份,详情请看 [更新日志](https://mp.weixin.qq.com/s/Y44K7seceGKmCCOnDssb3g )**
💻**电子邮件通道、不带图文详情页面的接口测试号通道——支持任意平台部署。**

❗︎︎**本项目采用 [GPLv3](https://www.gnu.org/licenses/gpl-3.0.txt) 协议,仅供个人学习和使用,不得用于其他用途,未授权任何商业化、付费行为。使用本项目源码/教程即视为同意本条款,本人保留对一切违反本条款行为诉诸法律的权利。**

🔔**当前支持的内容过多,容易突破图文链接长度上限,请合理安排有关多城市、多日期等内容。**

📖**扫描文末二维码,关注微信公众号 勃然大陆 ,回复 教程 即可获取最新部署教程地址。**

🤔**有问题可以扫描文末二维码进群询问,有功能需求可联系群主定制。**

💻**目前只支持云服务器或腾讯云函数等IP固定的平台部署。**

🐞**已知Bug:云服务器部署Diary用户会因 ‘ 等字符的转义处理错误导致之后的内容无法显示。**

## Introduction

- Bing必应 每日壁纸
Expand All @@ -33,7 +31,8 @@
- 和风天气 多城市天气预报
- 可点击卡片 自带图文展示页
- 可选单图文 / 多图文推送模式
- 多日期提醒 纪念日 / 单日 农历 / 公历
- 多日期提醒 纪念日 / 单日 农历 / 公历
- 可选企业微信 / 微信接口测试号 / 电子邮件通道
- 可自定义机器人名称 头像 卡片头图 标题 内容 称呼
- 详细的拓展模板

Expand All @@ -51,26 +50,33 @@

## Preparation

| 环境变量 | 含义 | 备注 |
| :--------: | :----------------------------------------------------------: | :----: |
| corpid | 企业微信企业ID | 必填 |
| corpsecret | 企业微信应用Secret | 必填 |
| agentid | 企业微信应用AgentId | 必填 |
| qweather | 和风天气应用Key | 非必填 |
| city | 天气预报地址<br />格式:省/市-市/区/县,多城市以&&间隔<br />例如:成都-双流&&江苏-江宁 | 非必填 |
| beginname | 单日项目名称<br />只有某一年有的日子,多日期以&&分隔<br />例如:跟XX在一起&&某某某出生 | 非必填 |
| beginday | 单日日期,公历格式20XX-XX-XX<br />农历年份前加n,多日期以&&分隔,注意与名称对应<br />例如:n2020-08-11&&2021-08-26 | 非必填 |
| targetname | 纪念日名称<br />每年都有的日子,多日期以&&分隔<br />例如:某某某的生日&&结婚纪念日 | 非必填 |
| targetday | 纪念日日期,公历格式20XX-XX-XX<br />农历年份前加n,多日期以&&分隔,注意与名称对应<br />例如:n2020-08-11&&2021-08-26 | 非必填 |
| msgtype | 图文类型,默认单图文<br />1为单图文,2为多图文 | 非必填 |
| link | 图文详情页网址,务必以 http:// 或 https:// 开头 | 非必填 |
| call | 自定义称呼,例如:宝贝~ | 非必填 |
| title | 自定义标题,例如:今天的推送来啦! | 非必填 |
| content | 自定义第一段内容,例如:记得喝水水哦~ | 非必填 |
| pic | 自定义头图链接,务必以 http:// 或 https:// 开头 | 非必填 |
| pictype | 随机头图类型,默认fengjing<br />可选项(接口要求)meizi、dongman、fengjing、suiji、none<br />分别是妹子、动漫、风景、随机、单图文不显示图片 | 非必填 |
| yqcity | 需要疫情数据的城市名称,只能是市级<br />多城市以&&分隔,例如:成都&&南京 | 非必填 |
| tian | 天行数据APIKEY<br />填写即默认第一段内容增加彩虹屁<br />需要自行申请相关接口 | 非必填 |
| 环境变量 | 含义 |
| :--------: | :----------------------------------------------------------: |
| corpid | 企业微信企业ID<br />需要发送企业微信消息时必填 |
| corpsecret | 企业微信应用Secret<br />需要发送企业微信消息时必填 |
| agentid | 企业微信AgentId<br />需要发送企业微信消息时必填 |
| appid | 测试号appID<br />需要发送测试号消息时必填 |
| appsecret | 测试号appsecret<br />需要发送测试号消息时必填 |
| userid | 测试号后台用户微信号<br />需要发送测试号消息时必填<br />多用户以&&分割<br />例如:abc123&&def456 |
| templateid | 测试号模板ID<br />需要发送测试号消息时必填 |
| emailfrom | 发送邮件的邮箱地址<br />需要发送邮件时必填 |
| emailtoken | 发送邮件的邮箱的授权码<br />需要发送邮件时必填 |
| emailto | 接收邮件的邮箱地址<br />需要发送邮件时必填<br />多地址以&&分割<br />例如:[email protected]&&[email protected] |
| qweather | 和风天气应用Key<br />需要天气预报时必填 |
| city | 天气预报地址<br />需要天气预报时必填<br />格式:省/市-市/区/县,多城市以&&间隔<br />例如:成都-双流&&江苏-江宁 |
| beginname | 单日事件名称<br />只有某一年有的日子,多日期以&&分隔<br />例如:跟XX在一起&&某某某出生 |
| beginday | 单日日期<br />公历格式20XX-XX-XX,农历年份前加n<br />多日期以&&分隔,注意与名称对应<br />例如:n2020-08-11&&2060-08-26 |
| targetname | 纪念日事件名称<br />每年都有的日子,多日期以&&分隔<br />例如:某某某的生日&&结婚纪念日 |
| targetday | 纪念日日期<br />公历格式20XX-XX-XX,农历年份前加n<br />多日期以&&分隔,注意与名称对应<br />例如:n2020-08-11&&2021-08-26 |
| msgtype | 图文类型,默认单图文<br />1为单图文,2为多图文 |
| pic | 自定义固定头图链接<br />务必以 http:// 或 https:// 开头 |
| call | 自定义称呼<br />例如:宝贝~ |
| title | 自定义标题<br />例如:今天的推送来啦! |
| content | 自定义第一段内容<br />例如:记得喝水水哦~ |
| tian | 天行数据APIKEY<br />需要彩虹屁时必填 |
| pictype | 随机头图类型,默认风景<br />可选项(接口要求)meizi、dongman、fengjing、suiji、none<br />分别是妹子、动漫、风景、随机、单图文不显示图片<br />多类型以&&分隔,例如:dongman&&fengjing |
| yqcity | 需要疫情数据的城市名称<br>需要疫情数据时必填,只能是市级<br />多城市以&&分隔,例如:成都&&南京 |
| link | 图文详情页网址<br />需要点击卡片进入页面时必填<br />务必以 http:// 或 https:// 开头 |

## Deployment

Expand All @@ -88,8 +94,8 @@

- 提供极为详细的 **拓展模板** [template.py](./template.py) 用于大家自行拓展功能,玩得开心~
- 受企业微信的限制,2022年6月20日后新建应用必须配置企业可信IP,在此之前创建的应用不受此限制。建议使用 **云服务器或腾讯云函数** 等IP固定的方式,阿里云、华为云函数暂时均无此功能。
- 受企业微信API限制,超出字数限制部分文字将自动截断不展示。图文展示页面不受此限制,但仍受图片链接长度和文字长度的制约,**请合理安排有关多城市、多日期等内容**
- 腾讯云日志服务CLS于2022年9月5日开始执行按量计费,请在完成测试后及时关闭日志投递并删除日志主题。**关闭日志方法**请在微信公众号回复 **日志**
- 受企业微信API限制,超出字数限制部分文字将自动截断不展示。**请合理安排有关多城市、多日期等内容**
- 腾讯云日志服务CLS于2022年9月5日开始执行按量计费,请在完成测试后及时关闭日志投递并删除日志主题。**关闭日志方法** 请在微信公众号回复 **日志**
- 环境变量可通过设置系统环境变量 或 修改config.py完成配置,**系统环境变量优先级高于 config.py**
- **日期提醒 **会自动排序,越接近的时间越显示在上方,以保证提醒的有效性。
- **和风天气预报 **会根据天气文本信息自动更换对应的天气emoji图标。
Expand All @@ -102,11 +108,11 @@

感谢所有支持、使用、打赏的用户,不足之处,多多包涵

欢迎Star、Fork、PR
欢迎**Star、Fork、PR**

欢迎关注微信公众号 **勃然大陆**,回复 **教程** 即可获得最新教程地址

![](https://urlshare.img.ink/2022/84aa3a957bc5f.png)
![](https://urlshare.img.ink/2022/5e64a3ae1e023.png)



Expand Down
122 changes: 122 additions & 0 deletions api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
'''
Author: Thund1r [email protected]
Date: 2022-09-22 14:16:12
LastEditTime: 2022-10-03 04:31:16
Description: API数据
Copyright (c) 2022 by Thund1r [email protected], All Rights Reserved.
'''
# -*- coding: utf8 -*-
import requests
import config
import re
import random


pictype_list = config.get_list("pictype")
tian = config.get("tian")


# 获取天行彩虹屁
def get_chp():
if not tian:
return None
try:
chp_url = f"http://api.tianapi.com/caihongpi/index?key={tian}"
chp_res = requests.get(chp_url).json()
return "🌈 " + chp_res["newslist"][0]["content"]
except Exception as e:
print("获取彩虹屁数据错误,请检查是否正确填写天行Key,是否申请彩虹屁接口:", e)
return None


# 获取随机图片链接数据
# 来自搏天API:https://api.btstu.cn/
def get_random_pic():
p_type_list = pictype_list
p_type = "fengjing"
if p_type_list and isinstance(p_type_list, list):
p_type = random.choice(p_type_list)
try:
pic_url = f"https://api.btstu.cn/sjbz/api.php?format=json&lx={p_type}"
pic_res = requests.get(pic_url).json()["imgurl"]
return pic_res
except Exception as e:
print("获取随机图片数据错误:", e)
return None


# 获取bing每日壁纸数据
def get_bing():
try:
bing_url = "https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1"
bing_res = requests.get(bing_url).json()
bing_pic = "https://cn.bing.com/" + bing_res["images"][0]["url"]
bing_title = bing_res["images"][0]["title"]
bing_content = re.sub(
"\\(.*?\\)", "", bing_res["images"][0]["copyright"])
bing_tip = f"{bing_title}——{bing_content}"
return {
"bing_pic": bing_pic,
"bing_tip": bing_tip
}
except Exception as e:
print("获取必应数据错误:", e)
return None


# 获取金山词霸数据
def get_ciba():
try:
ciba_url = "http://open.iciba.com/dsapi/"
ciba_res = requests.get(ciba_url).json()
ciba_en = ciba_res["content"]
ciba_zh = ciba_res["note"]
ciba_pic = ciba_res["fenxiang_img"]
ciba_tip = f"🔤 {ciba_en}\n🀄️ {ciba_zh}"
return {
"ciba_tip": ciba_tip,
"ciba_pic": ciba_pic
}
except Exception as e:
print("获取金山词霸数据错误:", e)
return None


# 获取ONE一个图文数据
def get_one():
try:
one_url = "https://apier.youngam.cn/essay/one"
one_res = requests.get(one_url).json()['dataList'][0]
one_id = "VOL."+one_res['id']
one_pic = one_res['src']
one_tip = f"✒️ {one_id} {one_res['text']}"
return {
"one_pic": one_pic,
"one_tip": one_tip
}
except Exception as e:
print("获取ONE一个图文数据错误:", e)
return None


# # 获取XXX自定义图片与文字
# def get_XXX():
# try:
# XXX_url = "https://XXXX.XXX"
# XXX_res = requests.get(XXX_url).json()
# print("获取XXX自定义图片与文字json数据:", XXX_res)
# XXX_item0 = XXX_res["键名"][n]["需要的数据键名"]
# XXX_item1 = XXX_res["键名"][n]["需要的数据键名"]
# XXX_pic = XXX_res["键名"][n]["需要的数据键名"]
# XXX_tip = "✒️ " + XXX_item0 + "\n" + "🗓️ " + XXX_item1
# res = {
# # 没有图片就删除下面这一句
# "XXX_pic": XXX_pic,
# "XXX_tip": XXX_tip
# }
# print("获取XXX数据:", res)
# return res
# except Exception as e:
# print("获取XXX数据错误:", e)
# return None
70 changes: 59 additions & 11 deletions config.py
Original file line number Diff line number Diff line change
@@ -1,48 +1,92 @@
'''
Author: thund1r thuncoder@foxmail.com
Date: 2022-08-23 09:36:39
LastEditTime: 2022-09-16 16:14:18
Description: 配置函数
Author: Thund1r thund1r@foxmail.com
Date: 2022-09-22 03:13:11
LastEditTime: 2022-10-03 03:54:29
Description: 配置程序
Copyright (c) 2022 by thund1r thuncoder@foxmail.com, All Rights Reserved.
Copyright (c) 2022 by Thund1r thund1r@foxmail.com, All Rights Reserved.
'''

# -*- coding: utf8 -*-
import os
SYS_CONFIG = {
# 企业微信企业ID,必填
# 企业微信企业ID,非必填
# 需要发送企业微信消息时必填
"corpid": "",

# 企业微信应用Secret,必填
# 企业微信应用Secret,非必填
# 需要发送企业微信消息时必填
"corpsecret": "",

# 企业微信AgentId,必填
# 企业微信AgentId,非必填
# 需要发送企业微信消息时必填
"agentid": "",

# 测试号appID,非必填
# 需要测试号发送时必填
"appid": "",

# 测试号appsecret,非必填
# 需要测试号发送时必填
"appsecret": "",

# 测试号后台用户微信号,非必填
# 需要测试号发送时必填
# 多用户以&&分割
# 例如:abc123&&def456
"userid": "",

# 测试号模板ID,非必填
# 需要测试号发送时必填
"templateid": "",

# 发送邮件的邮箱地址,非必填
# 需要发送邮件时必填
# 例如:[email protected]
"emailfrom": "",

# 发送邮件的邮箱的授权码,非必填
# 需要发送邮件时必填
# 请前往自己的邮箱设置中开启stmp功能并获取授权码
"emailtoken": "",

# 接收邮件的邮箱地址,非必填
# 需要发送邮件时必填
# 多地址以&&分割
# 例如:[email protected]&&[email protected]
"emailto": "",

# 和风天气Key,非必填
# 需要天气信息时必填
"qweather": "",

# 天气预报地址,非必填
# 需要天气信息时必填
# 格式:省/市-市/县/区,多地址以&&分隔
# 例如:四川-成都&&江苏-江宁
"city": "",

# 纪念日名称,非必填
# 需要纪念日功能时必填
# 每年都有的日子,多日期以&&分隔
# 例如:某某某的生日&&结婚纪念日
"targetname": "",

# 纪念日日期,非必填
# 需要纪念日功能时必填
# 公历格式20XX-XX-XX,农历年份前加n
# 多日期以&&分隔,注意与名称对应
# 例如:n2020-08-11&&2021-08-26
"targetday": "",

# 单日项目名称,非必填
# 需要单日功能时必填
# 只有某一年有的日子,多日期以&&分隔
# 例如:跟XX在一起&&某某某出生
"beginname": "",

# 单日日期,非必填
# 需要单日功能时必填
# 公历格式20XX-XX-XX,农历年份前加n
# 多日期以&&分隔,注意与名称对应
# 例如:n2020-08-11&&2021-08-26
Expand All @@ -60,6 +104,8 @@
# 默认fengjing
# 可选项meizi、dongman、fengjing、suiji、none
# 分别是妹子、动漫、风景、随机、单图文不显示图片
# 多类型以&&分隔
# 例如:dongman&&fengjing
"pictype": "",

# 自定义标题,非必填
Expand All @@ -74,20 +120,22 @@
# 例如:宝贝~
"call": "",

# 需要疫情数据的城市名称,非必填
# 疫情数据的城市名称,非必填
# 需要疫情数据功能时必填
# 只能是市级,多城市以&&分隔
# 例如:成都&&南京
"yqcity": "",

# 天行数据APIKEY,非必填
# 需要彩虹屁等数据时填写
# 需要彩虹屁功能时必填
"tian": "",

# 图文详情页链接,非必填
# 需要卡片可点击进入详情页功能时必填
# 完成教程 配置页面 后再填写
# 腾讯云函数用户填写API网关触发网关网址
# 服务器用户请自行搭建Diary,填写已备案域名:端口号/show
# 务必以http:// 或 https:// 开头
# 务必以 http:// 或 https:// 开头
"link": ""
}

Expand Down
Loading

0 comments on commit af8140f

Please sign in to comment.