by12 发表于 2024-6-3 14:03

手搓一个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

wodekuxiao1025 发表于 2024-6-6 15:19

改了一下上传图片到阿里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}&timestamp={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()

海是倒过来的天 发表于 2024-6-3 15:14

你搜一下发现论坛全是这个东西了,不过学习精神不错

wkdxz 发表于 2024-6-3 16:18

请问api链接有没有文字版? 之前有个知乎的文字版,作者说“各位知友十分抱歉了,从今天开始每天60秒读懂世界知乎号正式停更”,然后就没然后了。
图片版不太适合手机看。

Javajsc 发表于 2024-6-3 22:04

好巧,同款咨询,不过图片看起来不太优雅,还是转文字好看点

heyboy0306 发表于 2024-6-8 18:47

这类技术分享很多,不过举一反三的学习分享也是不错的。

finchliu 发表于 2024-6-16 13:54

能管多久呢

ffeiko 发表于 2024-6-16 22:10

学习一波

KeyFrror 发表于 2024-6-22 16:08

学习一下

flyzjl2024 发表于 2024-6-25 18:19

学习一下。感谢分享。
页: [1] 2
查看完整版本: 手搓一个python脚本每天钉钉机器人定时发资讯