aboutsummaryrefslogtreecommitdiffstats
path: root/generate.py
diff options
context:
space:
mode:
Diffstat (limited to 'generate.py')
-rw-r--r--generate.py154
1 files changed, 73 insertions, 81 deletions
diff --git a/generate.py b/generate.py
index a136fa5..71093e5 100644
--- a/generate.py
+++ b/generate.py
@@ -1,118 +1,110 @@
"""
Generates news JSON files
+Generally you're expected to update the game versions manually
+as for most games you only ever want the latest version (supported) of the game
"""
import news_feed as feed
import requests
import constants
import json
import os
+import argparse
from datetime import datetime, timedelta
OUTPUT_DIR = "news"
-def create_merged_feed(*news_lists):
+def create_merged_feed(*news_lists, limit=constants.DAYS_LIMIT):
+ """
+ Merge multiple news feeds into a singular one
+ limit = maximum number of days old to be included in the merged feed
+ """
merged_feed = []
for news_list in news_lists:
merged_feed.extend(news_list)
- cutoff_date = datetime.now() - timedelta(days=constants.DAYS_LIMIT)
+ cutoff_date = datetime.now() - timedelta(days=limit)
filtered_feed = [news for news in merged_feed if datetime.fromtimestamp(news['timestamp']) >= cutoff_date]
sorted_feed = sorted(filtered_feed, key=lambda x: x['timestamp'], reverse=True)
return sorted_feed
-def fetch_json_from_url(url):
- response = requests.get(url)
- response.raise_for_status()
- return response.json()
-
def attach_news_meta_data(news_data: list):
+ """
+ Attaches additional metadata to news data files
+ Currently this is only the time of completion
+ """
return {
"fetch_time": int(datetime.now().timestamp()),
"news_posts": news_data
}
-if __name__ == "__main__":
- if not os.path.exists(OUTPUT_DIR):
- os.makedirs(OUTPUT_DIR)
+def log_output(message: str, type: str="DEBUG"):
+ """
+ Prints a log line output with a timestamp
+ """
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ print(f"[{timestamp}] [{type}]: {message}")
+
+def generate_news_file(filename, url, version=None):
+ log_output(f"Fetching {filename.upper()} News Data", "NEWS")
+ news_data = feed.get_news(url, version) if version else feed.get_news(url)
+ if len(news_data) != 0:
+ log_output(f"Success. Got {filename.upper()} News Data. Saving to file...", "NEWS")
+ with open(f"{OUTPUT_DIR}/{filename}.json", 'w') as json_file:
+ json.dump(attach_news_meta_data(news_data), json_file)
+ elif os.path.exists(f"{OUTPUT_DIR}/{filename}.json"):
+ print(f"Failed. Couldn't fetch {filename.upper()} data. Using previously scraped data", "NEWS")
+ with open(f"{OUTPUT_DIR}/{filename}.json", 'r') as json_file:
+ news_data = json.load(json_file)['news_posts']
+ else:
+ print(f"Failed. Couldn't fetch {filename.upper()} data. Skipping...", "NEWS")
+ return news_data
- print("Fetching IIDX Data")
- iidx_news_data = feed.get_news(constants.IIDX_PINKY_CRUSH_NEWS_SITE)
- if len(iidx_news_data) != 0:
- with open(OUTPUT_DIR+'/iidx_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(iidx_news_data), json_file)
- print("IIDX Data fetched and saved.")
- elif len(iidx_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/iidx_news.json'):
- with open(OUTPUT_DIR+'/iidx_news.json', 'r') as json_file:
- iidx_news_data = json.load(json_file)['news_posts']
- print("IIDX Data not fetched, using existing data.")
+def generate_iidx_news_file():
+ return generate_news_file("iidx_news", constants.IIDX_PINKY_CRUSH_NEWS_SITE)
- print("Fetching SDVX Data")
- sdvx_news_data = feed.get_news(constants.SOUND_VOLTEX_EXCEED_GEAR_NEWS_SITE)
- if len(sdvx_news_data) != 0:
- with open(OUTPUT_DIR+'/sdvx_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(sdvx_news_data), json_file)
- print("SDVX Data fetched and saved.")
- elif len(sdvx_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/sdvx_news.json'):
- with open(OUTPUT_DIR+'/sdvx_news.json', 'r') as json_file:
- sdvx_news_data = json.load(json_file)['news_posts']
- print("SDVX Data not fetched, using existing data.")
+def generate_sdvx_news_file():
+ return generate_news_file("sdvx_news", constants.SOUND_VOLTEX_EXCEED_GEAR_NEWS_SITE)
- print("Fetching CHUNITHM JPN Data")
- chunithm_jp_news_data = feed.get_news(constants.CHUNITHM_JP_NEWS_SITE, constants.CHUNITHM_VERSION.VERSE)
- if len(chunithm_jp_news_data) != 0:
- with open(OUTPUT_DIR+'/chunithm_jp_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(chunithm_jp_news_data), json_file)
- print("CHUNITHM JPN Data fetched and saved.")
- elif len(chunithm_jp_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/chunithm_jp_news.json'):
- with open(OUTPUT_DIR+'/chunithm_jp_news.json', 'r') as json_file:
- chunithm_jp_news_data = json.load(json_file)['news_posts']
- print("CHUNITHM JPN Data not fetched, using existing data.")
+def generate_chunithm_jp_news_file():
+ return generate_news_file("chunithm_jp_news", constants.CHUNITHM_JP_NEWS_SITE, constants.CHUNITHM_VERSION.VERSE)
- print("Fetching MAIMAI DX JPN Data")
- maimaidx_jp_news_data = feed.get_news(constants.MAIMAIDX_JP_NEWS_SITE, constants.MAIMAIDX_VERSION.PRISM_PLUS)
- if len(maimaidx_jp_news_data) != 0:
- with open(OUTPUT_DIR+'/maimaidx_jp_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(maimaidx_jp_news_data), json_file)
- print("MAIMAI DX JPN Data fetched and saved.")
- elif len(maimaidx_jp_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/maimaidx_jp_news.json'):
- with open(OUTPUT_DIR+'/maimaidx_jp_news.json', 'r') as json_file:
- maimaidx_jp_news_data = json.load(json_file)['news_posts']
- print("MAIMAI DX JPN Data not fetched, using existing data.")
+def generate_maimaidx_jp_news_file():
+ return generate_news_file("maimaidx_jp_news", constants.MAIMAIDX_JP_NEWS_SITE, constants.MAIMAIDX_VERSION.PRISM_PLUS)
- print("Fetching ONGEKI JPN Data")
- ongeki_jp_news_data = feed.get_news(constants.ONGEKI_JP_NEWS_SITE, constants.ONGEKI_VERSION.REFRESH)
- if len(ongeki_jp_news_data) != 0:
- with open(OUTPUT_DIR+'/ongeki_jp_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(ongeki_jp_news_data), json_file)
- print("ONGEKI JPN Data fetched and saved.")
- elif len(ongeki_jp_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/ongeki_jp_news.json'):
- with open(OUTPUT_DIR+'/ongeki_jp_news.json', 'r') as json_file:
- ongeki_jp_news_data = json.load(json_file)['news_posts']
- print("ONGEKI JPN Data not fetched, using existing data.")
+def generate_ongeki_jp_news_file():
+ return generate_news_file("ongeki_jp_news", constants.ONGEKI_JP_NEWS_SITE, constants.ONGEKI_VERSION.REFRESH)
- print("Fetching MAIMAIDX INTL Data")
- maimaidx_intl_news_data = feed.get_news(constants.MAIMAIDX_INTL_NEWS_SITE, constants.MAIMAIDX_VERSION.PRISM)
- if len(maimaidx_intl_news_data) != 0:
- with open(OUTPUT_DIR+'/maimaidx_intl_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(maimaidx_intl_news_data), json_file)
- print("MAIMAIDX INTLN Data fetched and saved.")
- elif len(maimaidx_intl_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/maimaidx_intl_news.json'):
- with open(OUTPUT_DIR+'/maimaidx_intl_news.json', 'r') as json_file:
- maimaidx_intl_news_data = json.load(json_file)['news_posts']
- print("MAIMAIDX INTL Data not fetched, using existing data.")
+def generate_maimaidx_intl_news_file():
+ return generate_news_file("maimaidx_intl_news", constants.MAIMAIDX_INTL_NEWS_SITE, constants.MAIMAIDX_VERSION.PRISM)
+
+def generate_chunithm_intl_news_file():
+ return generate_news_file("chunithm_intl_news", constants.CHUNITHM_INTL_NEWS_SITE, constants.CHUNITHM_VERSION.LUMINOUS_PLUS)
+
+if __name__ == "__main__":
+ log_output("JOB START", "TASK")
+ if not os.path.exists(OUTPUT_DIR):
+ log_output(f"{OUTPUT_DIR} was not found. Creating this directory...")
+ os.makedirs(OUTPUT_DIR)
- print("Fetching CHUNITHM INTL Data")
- chunithm_intl_news_data = feed.get_news(constants.CHUNITHM_INTL_NEWS_SITE, constants.CHUNITHM_VERSION.LUMINOUS_PLUS)
- if len(chunithm_intl_news_data) != 0:
- with open(OUTPUT_DIR+'/chunithm_intl_news.json', 'w') as json_file:
- json.dump(attach_news_meta_data(chunithm_intl_news_data), json_file)
- print("CHUNITHM INTL Data fetched and saved.")
- elif len(chunithm_intl_news_data) == 0 and os.path.exists(OUTPUT_DIR+'/chunithm_intl_news.json'):
- with open(OUTPUT_DIR+'/chunithm_intl_news.json', 'r') as json_file:
- chunithm_intl_news_data = json.load(json_file)['news_posts']
- print("CHUNITHM INTL Data not fetched, using existing data.")
+ iidx_news_data = generate_iidx_news_file()
+ sdvx_news_data = generate_sdvx_news_file()
+ chunithm_jp_news_data = generate_chunithm_jp_news_file()
+ maimaidx_jp_news_data = generate_maimaidx_jp_news_file()
+ ongeki_jp_news_data = generate_ongeki_jp_news_file()
+ maimaidx_intl_news_data = generate_maimaidx_intl_news_file()
+ chunithm_intl_news_data = generate_chunithm_intl_news_file()
- news = create_merged_feed(iidx_news_data, sdvx_news_data, chunithm_jp_news_data, maimaidx_jp_news_data, ongeki_jp_news_data, maimaidx_intl_news_data, chunithm_intl_news_data)
+ news = create_merged_feed(
+ iidx_news_data,
+ sdvx_news_data,
+ chunithm_jp_news_data,
+ maimaidx_jp_news_data,
+ ongeki_jp_news_data,
+ maimaidx_intl_news_data,
+ chunithm_intl_news_data
+ )
+ log_output("Creating merged news.json file for all news that are within " + str(constants.DAYS_LIMIT) + " days old")
with open(OUTPUT_DIR+'/news.json', 'w') as json_file:
json.dump(attach_news_meta_data(news), json_file)
+ log_output("JOB DONE", "TASK")
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage