手搓一个python脚本每天钉钉机器人定时发资讯
本帖最后由 by12 于 2024-6-3 14:09 编辑用途:该脚本仅用来在钉钉群接收资讯使用
环境:python3,一个域名,一个宝塔环境最好
------------
脚本的执行思路:
第一步
首先运行脚本后会在同目录去查询60s文件夹下是否存在后缀.jpg文件,如果有就删除,没有就开始第二步
第二步
从api接口获取资讯图片,下载保存到60s文件夹,然后让钉钉机器人去用域名信息去访问并发送到钉钉群。
例如:https://www.abc.com/60s/01.jpg //机器人访问是否存在并发送到钉钉群。
答疑:为什么不直接发送本地图片到钉钉群,非用这种方式。
答:由于钉钉机制,经过测试无法发送{也有可能是我太菜了.发送内容是空白的,所以我尝试这样的方式}
用法:
有一个可以直接访问图片的环境.
就是你访问是这种效果
然后在python脚本中需要修改这4个地方
这是是你的机器人hook跟加签信息
注:直接运行脚本就行了,文件夹是会自己自动创建的。.
执行看效果
如何定时呢当然还是这个宝塔的计划任务了。
好了,以上就是该脚本全部信息了。下载地址在下面
秋波CB币:$qqq
https://www.lanzouw.com/ix0HV20pd7pi
改了一下上传图片到阿里OSS里#!/usr/bin/python
# -*- coding: utf-8 -*-
import oss2
import os
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
import json
import random
def generate_sign(timestamp, secret):
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
return sign
def clear_cache(image_path):
try:
os.remove(image_path)
print(f"缓存文件已删除: {image_path}")
except FileNotFoundError:
print(f"缓存文件不存在: {image_path}")
def download_image(url, folder_path, filename):
if not os.path.exists(folder_path):
os.makedirs(folder_path)
image_path = os.path.join(folder_path, filename)
response = requests.get(url, headers={'Cache-Control': 'no-cache'})
if response.status_code == 200:
with open(image_path, 'wb') as f:
f.write(response.content)
print(f"图片下载成功: {image_path}")
return image_path
else:
print(f"图片下载失败: {url}")
return None
def upload_image_to_server(local_image_path,oss_key,oss_secret):
access_key = oss_key
access_secret = oss_secret
auth = oss2.Auth(access_key, access_secret)
bucket = oss2.Bucket(auth, 'oss-cn-zhangjiakou.aliyuncs.com', 'yunli-yunwei')
file_path = local_image_path
object_name = 'pic/60s.jpg'
try:
bucket.put_object_from_file(object_name, file_path)
except ZeroDivisionError:
print ("上传服务器失败")
print(f"图片已上传到服务器: ")
full_url="https://yunli-yunwei.oss-cn-zhangjiakou.aliyuncs.com/pic/60s.jpg"
return full_url
def send_image_to_dingtalk(image_url, robot_webhook, secret):
timestamp = str(round(time.time() * 1000))
sign = generate_sign(timestamp, secret)
webhook_url = f"{robot_webhook}×tamp={timestamp}&sign={sign}"
# 构建消息内容
data = {
"msgtype": "markdown",
"markdown": {
"title": "60s图片的自定义内容",
"text": f"!({image_url})"
}
}
headers = {'Content-Type': 'application/json'}
response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
if response.status_code == 200 and response.json().get('errcode') == 0:
print("图片发送成功")
else:
print("图片发送失败")
print(response.text)
# 主函数
def main():
folder_path = '60s'
filename = '60s.jpg'
oss_key = ""
oss_secret = ""
image_path = os.path.join(folder_path, filename)
# 清除缓存文件
clear_cache(image_path)
image_source_url = 'https://api.03c3.cn/api/zb'
# 先下载图片并保存
local_image_path = download_image(image_source_url, folder_path, filename)
if local_image_path:
# 上传图片到服务器并获取新URL
local_server_image_url = upload_image_to_server(local_image_path,oss_key,oss_secret)
robot_webhook = 'https://oapi.dingtalk.com/robot/send?access_token='
secret = ""
# webhook里是机器人地址,secret是加签
send_image_to_dingtalk(local_server_image_url, robot_webhook, secret)
if __name__ == '__main__':
main()
你搜一下发现论坛全是这个东西了,不过学习精神不错 请问api链接有没有文字版? 之前有个知乎的文字版,作者说“各位知友十分抱歉了,从今天开始每天60秒读懂世界知乎号正式停更”,然后就没然后了。
图片版不太适合手机看。 好巧,同款咨询,不过图片看起来不太优雅,还是转文字好看点 这类技术分享很多,不过举一反三的学习分享也是不错的。 能管多久呢 学习一波 学习一下 学习一下。感谢分享。
页:
[1]
2