From 9e9f5ec9544f7924c7f44eee07fe825db65c3fa4 Mon Sep 17 00:00:00 2001 From: MasonLiu <2857911564@qq.com> Date: Thu, 5 Dec 2024 21:25:31 +0800 Subject: [PATCH] update --- Core.py | 16 ++- GotoSend_seebug.py | 134 ++++++++++++++++++++ README.md | 9 ++ __pycache__/GotoSend_seebug.cpython-312.pyc | Bin 0 -> 5499 bytes db/seebug.db | Bin 0 -> 20480 bytes test.py | 9 ++ 6 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 GotoSend_seebug.py create mode 100644 __pycache__/GotoSend_seebug.cpython-312.pyc create mode 100644 db/seebug.db create mode 100644 test.py diff --git a/Core.py b/Core.py index c00bca8..5078280 100644 --- a/Core.py +++ b/Core.py @@ -14,6 +14,7 @@ from GotoSend_doonsec import Src_doonsec from GotoSend_xianzhi import Src_xianzhi from GotoSend_freebuf import Src_freebuf from GotoSend_qianxin import Src_qianxin +from GotoSend_seebug import Src_seebug # 加载参数 with open('./config.yaml', 'r', encoding="utf-8") as file: @@ -36,6 +37,7 @@ def send_job(time_1): reslt_xianzhi = Src_xianzhi(time_1) reslt_freebuf = Src_freebuf(time_1) reslt_qianxin = Src_qianxin(time_1) + reslt_seebug = Src_seebug(time_1) webhook_url, timestamp, sign = gen_sign() @@ -106,6 +108,18 @@ def send_job(time_1): print("-" * 40) print("奇安信攻防社区数据为空,跳过执行。") + # 发送Seebug资讯 + if reslt_seebug: + reslt_seebug = Src_seebug(1000) + webhook_url, timestamp, sign = gen_sign() + print("-" * 40) + print("Seebug社区资讯递送中:") + SendToFeishu(reslt_seebug, "Seebug社区资讯递送", webhook_url, timestamp, sign) + print("-" * 40 + "\n") + else: + print("-" * 40) + print("Seebug社区数据为空,跳过执行。") + def signal_handler(sig, frame): print("接收到退出信号,程序即将退出...") sys.exit(0) @@ -150,7 +164,7 @@ def test_rss_source(): # "安全维基": "https://www.sec_wiki.com/news/rss", "安全客": "https://api.anquanke.com/data/v1/rss", "嘶吼": "https://www.4hou.com/feed", - # "Seebug社区": "https://paper.seebug.org/rss/", + "Seebug社区": "https://paper.seebug.org/rss/", "FreeBuf社区": "https://www.freebuf.com/feed", "先知社区": "https://xz.aliyun.com/feed" } diff --git a/GotoSend_seebug.py b/GotoSend_seebug.py new file mode 100644 index 0000000..2551f93 --- /dev/null +++ b/GotoSend_seebug.py @@ -0,0 +1,134 @@ +import json +import sqlite3 +import os +from datetime import datetime, timedelta +from SendBot import SendToFeishu +import email.utils + + +def create_database(): + conn = sqlite3.connect('./db/seebug.db') + cursor = conn.cursor() + cursor.execute('''CREATE TABLE IF NOT EXISTS articles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT, + link TEXT, + category TEXT, + description TEXT, + pubDate DATETIME + )''') + conn.commit() + conn.close() + + +def insert_data(data): + conn = sqlite3.connect('./db/seebug.db') + cursor = conn.cursor() + for entry in data: + # 解析并格式化时间 + parsed_date = email.utils.parsedate_to_datetime(entry['pubDate']) + formatted_date = parsed_date.strftime('%Y-%m-%d %H:%M:%S') + + cursor.execute(''' + INSERT INTO articles (title, link, category, description, pubDate) + VALUES (?, ?, ?, ?, ?) + ''', (entry['title'], entry['link'], entry['category'], entry['description'], formatted_date)) + conn.commit() + conn.close() + +def get_seebug_json(): + # 检查文件是否存在 + if not os.path.exists('./JSON/seebug.json'): + raise FileNotFoundError(f"seebug.json文件不存在,请检查程序是否运行正常!") + + # 打开并读取JSON文件 + with open('./JSON/seebug.json', 'r', encoding='utf-8') as file: + data = json.load(file) + + # 假设data是一个包含多个JSON对象的列表 + if not isinstance(data, list): + raise ValueError("JSON文件格式错误,请检查common.py是否异常!") + + # 提取所需字段并编号 + total_data = [] + for index, item in enumerate(data, start=1): + entry = { + "id": index, + "title": item.get("title", ""), + "link": item.get("link", ""), + "description": item.get("description", ""), + "pubDate": item.get("pubDate", ""), + "category": item.get("category", "") + } + total_data.append(entry) + + return total_data + +def select_articles(e_hour): + conn = sqlite3.connect('./db/seebug.db') + cursor = conn.cursor() + + # 获取当前日期和时间 + now = datetime.now() + start_time = now - timedelta(hours=e_hour) + end_time = now + + # 查询指定时间段内的数据 + cursor.execute(''' + SELECT * FROM articles + WHERE pubDate BETWEEN ? AND ? + ''', (start_time.strftime('%Y-%m-%d %H:%M:%S'), end_time.strftime('%Y-%m-%d %H:%M:%S'))) + + results = cursor.fetchall() + conn.close() + return results + +def clear_table(): + conn = sqlite3.connect('./db/seebug.db') + cursor = conn.cursor() + cursor.execute('DELETE FROM articles') + conn.commit() + conn.close() + +def get_filtered_articles(entries): + result = "" + for entry in entries: + result += f"类型:{entry[3]}\t文章:{entry[1]}" + result += f"链接:{entry[2]}\t上传时间:{entry[5]}\n" + result += f"{entry[4]}\n" + result += "-" * 40 + "\n" # 添加分隔线以便区分不同文章 + return result + + +def Src_seebug(e_hour): + if not os.path.exists('./db/seebug.db'): + # 创建数据库和表 + create_database() + + # 清空表 + clear_table() + + # 获取 JSON 数据 + M_seebug_data = get_seebug_json() + + # 插入数据到数据库 + insert_data(M_seebug_data) + + # 查询指定时间段内的数据 + filtered_articles = select_articles(e_hour) + # print(filtered_articles) + + if filtered_articles: + results = get_filtered_articles(filtered_articles) + return results + else: + return False + +if __name__ == "__main__": + reslts = Src_seebug(100) + if reslts != False: + print(reslts) + else: + # 如果为空,则跳过执行 + print("-" * 40) + print("Seebug社区数据为空,跳过执行。") diff --git a/README.md b/README.md index dd8b20b..6384510 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,15 @@ RSS订阅链接来源:https://github.com/zhengjim/Chinese-Security-RSS
使用python-json进行格式化,然后使用飞书webhook机器人进行发送
config.yaml可指定大部分可能需要的参数
+### 使用建议:
+Linux系统建议下载screen于后台持续运行本脚本。
+debian/ubuntu/kali: `apt install screen`
+centos: `yum install screen`
+创建新会话:`screen -S 会话名称`
+保存并退回到界面:`ctrl+a+d`
+重新进入会话:`screen -r 会话名称`
+结束对话:进入会话后输入`exit`
+ ### 使用方法:
先下载支持库:`pip install -r requirements.txt`
随后便可直接运行:`python Core.py`
diff --git a/__pycache__/GotoSend_seebug.cpython-312.pyc b/__pycache__/GotoSend_seebug.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4226ff85b06cc84cd9ff6f670ba822fc7ea59c6a GIT binary patch literal 5499 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 literal 0 HcmV?d00001 diff --git a/test.py b/test.py new file mode 100644 index 0000000..cce6dcc --- /dev/null +++ b/test.py @@ -0,0 +1,9 @@ +from SendBot import SendToFeishu, gen_sign +from GotoSend_seebug import Src_seebug + +reslt_seebug = Src_seebug(1000) +webhook_url, timestamp, sign = gen_sign() +print("-" * 40) +print("Seebug社区资讯递送中:") +SendToFeishu(reslt_seebug, "Seebug社区资讯递送", webhook_url, timestamp, sign) +print("-" * 40 + "\n") \ No newline at end of file