情侣 微信公众号定时天气推送
时间: 2025-01-17 15:42:53 浏览: 30
实现微信公众号定时天气推送功能
配置微信公众测试号
为了实现定时天气推送,首先需要拥有一个微信公众平台账号。对于开发和测试目的,可以选择注册申请微信公众测试号[^1]。此测试号允许体验几乎所有的公众平台功能API接口,特别是模板消息推送API。
获取天气数据源
选择可靠的第三方API作为天气数据来源至关重要。考虑到稳定性和准确性,建议采用百度地图开放平台提供的天气服务API来替代其他不可靠的小公司API[^5]。这一步骤涉及注册成为百度开发者并申请相应的API密钥[^3]。
设置模板消息
在微信公众平台上配置用于发送天气预报的消息模板是必要的。进入微信公众平台后台,在菜单中找到“模板消息”,按照官方指南完成模板的选择与编辑工作[^2]。确保所选模板适用于传递气象信息,并能体现温馨关怀的特点。
编写自动化脚本
编写Python程序或其他编程语言编写的脚本来定期调用微信服务器端口以触发消息发送行为。下面是一个简单的例子:
import requests
from datetime import datetime, timedelta
def get_weather(api_key, location):
url = f"http://api.map.baidu.com/weather/v1/?district_id={location}&data_type=all&ak={api_key}"
response = requests.get(url).json()
weather_info = {
'date': datetime.now().strftime('%Y-%m-%d'),
'temperature': response['result']['now']['temp'],
'description': response['result']['now']['text']
}
return weather_info
def send_message(access_token, openid, template_id, data):
post_data = {
"touser": openid,
"template_id": template_id,
"url": "",
"topcolor": "#FF0000",
"data": {
"first": {"value":"亲爱的,今天的天气情况如下:", "color":"#173177"},
"keyword1":{"value":f"{data['date']}", "color":"#173177"},
"keyword2":{"value":f"温度:{data['temperature']}°C", "color":"#173177"},
"keyword3":{"value":f"描述:{data['description']}", "color":"#173177"}
}
}
message_url = f"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={access_token}"
resp = requests.post(message_url, json=post_data)
if __name__ == '__main__':
api_key = '<Your_Baidu_API_Key>'
access_token = '<Your_WeChat_Access_Token>'
openid = '<Recipient_OpenID>' # 接收者的OpenID
template_id = '<Template_ID>'
loc = 'your_location_code' # 替换为目标城市的区县编码
while True:
now_time = datetime.now()
target_hour = 8 # 设定每天早上八点钟发送
if now_time.hour == target_hour and now_time.minute >= 0 and now_time.minute < 59:
try:
weather_details = get_weather(api_key=api_key, location=loc)
send_message(
access_token=access_token,
openid=openid,
template_id=template_id,
data=weather_details
)
print(f"Weather info sent at {datetime.now()}")
except Exception as e:
print(e)
tomorrow = (now_time + timedelta(days=1)).replace(hour=target_hour, minute=0, second=0, microsecond=0)
sleep_seconds = int((tomorrow - now_time).total_seconds())
time.sleep(sleep_seconds)
这段代码实现了每日早晨固定时间点向指定用户推送当地最新天气状况的功能。需要注意的是<Your_Baidu_API_Key>
、<Your_WeChat_Access_Token>
以及<Recipient_OpenID>
这些占位符应该替换为实际值;另外还需要设置好目标城市对应的地理位置码(your_location_code
)。
相关推荐







