From 324cdb3733d3cb1c8d79f7470228004210b5b2eb Mon Sep 17 00:00:00 2001 From: Kobayashi123 Date: Sun, 2 Jul 2023 12:09:40 +0900 Subject: [PATCH] fix: :bug: A vulnerability information acquisition scraping program runs daily. --- vuln_info_bot/main.py | 12 ++++-------- vuln_info_bot/{discord => }/notify_info.py | 19 ++++++++++++------- vuln_info_bot/{web => }/scraping.py | 21 +++++++++++++++++++-- 3 files changed, 35 insertions(+), 17 deletions(-) rename vuln_info_bot/{discord => }/notify_info.py (86%) rename vuln_info_bot/{web => }/scraping.py (82%) diff --git a/vuln_info_bot/main.py b/vuln_info_bot/main.py index b75e361..ffab3cd 100644 --- a/vuln_info_bot/main.py +++ b/vuln_info_bot/main.py @@ -20,16 +20,15 @@ """ __author__ = 'pigeon-sable' -__version__ = '1.0.1' -__date__ = '2023/05/14 (Created: 2023/04/19)' +__version__ = '1.0.2' +__date__ = '2023/06/02 (Created: 2023/04/19)' import sys import discord from dotenv import load_dotenv -from web import scraping -from discord import notify_info +import notify_info def main() -> int: @@ -40,14 +39,11 @@ def main() -> int: load_dotenv() # .envファイルから環境変数を読み込む - table_today_vulnerabilities = scraping.table_of_jvn_info( - 'https://jvndb.jvn.jp/index.html') - client = discord.Client(intents=discord.Intents.default(), messages=discord.Intents.messages, activity=discord.Game(name="/vuln")) - notify_info.event_method(client, table_today_vulnerabilities) + notify_info.event_method(client) return 0 diff --git a/vuln_info_bot/discord/notify_info.py b/vuln_info_bot/notify_info.py similarity index 86% rename from vuln_info_bot/discord/notify_info.py rename to vuln_info_bot/notify_info.py index dc28695..a9875ab 100644 --- a/vuln_info_bot/discord/notify_info.py +++ b/vuln_info_bot/notify_info.py @@ -20,8 +20,8 @@ """ __author__ = 'pigeon-sable' -__version__ = '1.0.1' -__date__ = '2023/05/14 (Created: 2023/05/14)' +__version__ = '1.0.2' +__date__ = '2023/06/02 (Created: 2023/05/14)' import datetime import os @@ -30,8 +30,13 @@ import discord from discord.ext import tasks +import scraping -def event_method(client: discord.Client, table_today_vulnerabilities: tuple) -> None: +GET_TIME = '00:00' +NOTIFY_TIME = '12:00' + + +def event_method(client: discord.Client) -> None: """ Discord ボットでの処理を書きます。 イベントが発生したときに、自動的に呼び出されます。 @@ -61,11 +66,11 @@ async def on_ready(): @tasks.loop(seconds=60) async def loop(): notify_room = client.get_channel(room_id["VULNERABILITY_ROOM_ID"]) - now = datetime.datetime.now(datetime.timezone( - datetime.timedelta(hours=9))).strftime('%H:%M') - if now == '00:00': + now = datetime.datetime.now().strftime('%H:%M') + if now == GET_TIME: + table_today_vulnerabilities = scraping.table_of_jvn_info() # スクレイピングで脆弱性情報を取得する + if now == NOTIFY_TIME: await notify_room.send('=' * 40) - print(now) await notify_room.send(f'{datetime.datetime.now().date()} の脆弱性情報をお知らせします。') await notify_room.send('-' * 40) for summary, hyper_reference, severity in table_today_vulnerabilities: diff --git a/vuln_info_bot/web/scraping.py b/vuln_info_bot/scraping.py similarity index 82% rename from vuln_info_bot/web/scraping.py rename to vuln_info_bot/scraping.py index c373c2e..050b0ec 100644 --- a/vuln_info_bot/web/scraping.py +++ b/vuln_info_bot/scraping.py @@ -21,16 +21,17 @@ __author__ = 'pigeon-sable' __version__ = '1.0.1' -__date__ = '2023/05/14 (Created: 2023/05/14)' +__date__ = '2023/06/02 (Created: 2023/05/14)' import datetime import re import requests +import sys from bs4 import BeautifulSoup -def table_of_jvn_info(the_url_string: str) -> tuple: +def table_of_jvn_info() -> tuple: """ JVNのWebページをウェブスクレイピングし、サマリーとハイパーリンク、CVSSレベルのタプルを作って応答します。 抽出できない場合には、Noneを応答します。 @@ -42,6 +43,8 @@ def table_of_jvn_info(the_url_string: str) -> tuple: tuple: サマリーとハイパーリンク、CVSSレベルのタプル """ + the_url_string = 'https://jvndb.jvn.jp/index.html' + response = requests.get(the_url_string) if response.status_code != 200: return None @@ -85,3 +88,17 @@ def table_of_jvn_info(the_url_string: str) -> tuple: table.append([summary, hyper_reference, severity]) return table + + +def main() -> int: + """ + ライブラリとして提供する table_of_jvn_info() が正しく動作するかチェックする。 + """ + table = table_of_jvn_info('https://jvndb.jvn.jp/index.html') + print(table) + + return 0 + + +if __name__ == '__main__': # このスクリプトファイルが直接実行されたときだけ、以下の部分を実行する。 + sys.exit(main())