dual language game descriptions stored in DB
This commit is contained in:
parent
192d86dbd5
commit
fa8d4c4b1d
105
setup.sh
105
setup.sh
|
@ -478,8 +478,9 @@ class Game(db.Model):
|
|||
historical_low = db.Column(db.Float)
|
||||
release_date = db.Column(db.DateTime)
|
||||
release_date = db.Column(db.DateTime)
|
||||
steam_description = db.Column(db.Text)
|
||||
itad_slug = db.Column(db.String(200))
|
||||
steam_description_en = db.Column(db.Text)
|
||||
steam_description_de = db.Column(db.Text)
|
||||
|
||||
# with users.id
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False)
|
||||
|
@ -579,26 +580,28 @@ def log_activity(user_id, action, details=None):
|
|||
db.session.commit()
|
||||
|
||||
# Game Infos Helper
|
||||
def fetch_steam_data(appid):
|
||||
def fetch_steam_data(appid, lang='en'):
|
||||
lang_map = {
|
||||
'en': 'english',
|
||||
'de': 'german'
|
||||
}
|
||||
steam_lang = lang_map.get(lang, 'english')
|
||||
try:
|
||||
response = requests.get(
|
||||
"https://store.steampowered.com/api/appdetails",
|
||||
params={"appids": appid, "l": "german"},
|
||||
params={"appids": appid, "l": steam_lang},
|
||||
timeout=15
|
||||
)
|
||||
if response.status_code != 200:
|
||||
app.logger.error(f"Steam API Error: Status {response.status_code}")
|
||||
return None
|
||||
|
||||
data = response.json().get(str(appid), {})
|
||||
if not data.get("success"):
|
||||
app.logger.error(f"Steam API Error: {data.get('error', 'Unknown error')}")
|
||||
return None
|
||||
|
||||
return data.get("data", {})
|
||||
if data.get("success"):
|
||||
return {
|
||||
"name": data["data"].get("name"),
|
||||
"detailed_description": data["data"].get("detailed_description"),
|
||||
"release_date": data["data"].get("release_date", {}).get("date"),
|
||||
}
|
||||
except Exception as e:
|
||||
app.logger.error(f"Steam API Exception: {str(e)}")
|
||||
return None
|
||||
app.logger.error(f"Steam API error: {str(e)}")
|
||||
return None
|
||||
|
||||
def parse_steam_release_date(date_str):
|
||||
"""Parsing Steam-Release-Date (the german us thingy, you know)"""
|
||||
|
@ -1241,35 +1244,32 @@ def update_game_data(game_id):
|
|||
steam_appid = request.form.get('steam_appid', '').strip()
|
||||
app.logger.info(f"🚀 Update gestartet für Game {game_id} mit AppID: {steam_appid}")
|
||||
|
||||
# 2. Steam-Data
|
||||
steam_data = None
|
||||
# 2. Steam-Data (Multilingual)
|
||||
if steam_appid:
|
||||
try:
|
||||
app.logger.debug(f"🔍 Steam-API-Aufruf für AppID: {steam_appid}")
|
||||
steam_data = fetch_steam_data(steam_appid)
|
||||
|
||||
if steam_data:
|
||||
# 3. Daten in Datenbank schreiben
|
||||
game.name = steam_data.get("name", game.name)
|
||||
game.steam_description = steam_data.get("detailed_description") or "No Infos available"
|
||||
|
||||
# Release-Datum mit Zeitzone
|
||||
date_str = steam_data.get("release_date", {}).get("date")
|
||||
if date_str:
|
||||
parsed_date = parse_steam_release_date(date_str)
|
||||
if parsed_date:
|
||||
game.release_date = local_tz.localize(parsed_date)
|
||||
else:
|
||||
app.logger.warning(f"Could not parse Steam release date: {date_str}")
|
||||
|
||||
app.logger.info("✅ Steam-Daten erfolgreich aktualisiert")
|
||||
else:
|
||||
app.logger.warning("⚠️ Keine Steam-Daten empfangen")
|
||||
flash(translate('Steam-API lieferte keine Daten'), 'warning')
|
||||
|
||||
app.logger.debug(f"🔍 Fetching Steam data for AppID: {steam_appid}")
|
||||
for lang in ['en', 'de']:
|
||||
steam_data = fetch_steam_data(steam_appid, lang=lang)
|
||||
if steam_data:
|
||||
if lang == 'en' and steam_data.get("name"):
|
||||
game.name = steam_data.get("name", game.name)
|
||||
setattr(game, f'steam_description_{lang}', steam_data.get("detailed_description") or "No Infos available")
|
||||
if lang == 'en':
|
||||
date_str = steam_data.get("release_date", {})
|
||||
if date_str:
|
||||
parsed_date = parse_steam_release_date(date_str)
|
||||
if parsed_date:
|
||||
game.release_date = local_tz.localize(parsed_date)
|
||||
else:
|
||||
app.logger.warning(f"Could not parse Steam release date: {date_str}")
|
||||
app.logger.info("✅ Steam data successfully updated")
|
||||
except Exception as e:
|
||||
app.logger.error(f"💥 Kritischer Steam-Fehler: {str(e)}", exc_info=True)
|
||||
flash(translate('Fehler bei Steam-Abfrage'), 'danger')
|
||||
flash(translate('Error during Steam query'), 'danger')
|
||||
else:
|
||||
app.logger.warning("⚠️ Keine Steam-AppID vorhanden, Steam-Daten werden nicht aktualisiert")
|
||||
flash(translate('Steam-AppID missing, no Steam Data transferred'), 'warning')
|
||||
|
||||
|
||||
# ITAD-Slug donings and such
|
||||
itad_slug = fetch_itad_slug(steam_appid)
|
||||
|
@ -1439,6 +1439,27 @@ scheduler.add_job(
|
|||
)
|
||||
|
||||
|
||||
def update_missing_steam_descriptions_job():
|
||||
with app.app_context():
|
||||
games = Game.query.filter(
|
||||
(Game.steam_description_en == None) | (Game.steam_description_en == '') |
|
||||
(Game.steam_description_de == None) | (Game.steam_description_de == '')
|
||||
).all()
|
||||
for game in games:
|
||||
for lang in ['en', 'de']:
|
||||
if not getattr(game, f'steam_description_{lang}', None):
|
||||
steam_data = fetch_steam_data(game.steam_appid, lang=lang)
|
||||
if steam_data:
|
||||
setattr(game, f'steam_description_{lang}', steam_data.get('detailed_description'))
|
||||
db.session.commit()
|
||||
|
||||
scheduler.add_job(
|
||||
update_missing_steam_descriptions_job,
|
||||
'interval',
|
||||
hours=24,
|
||||
id='update_missing_steam_descriptions'
|
||||
)
|
||||
|
||||
# start Scheduler
|
||||
scheduler.start()
|
||||
atexit.register(lambda: scheduler.shutdown(wait=False))
|
||||
|
@ -2351,13 +2372,15 @@ cat <<HTML_END > templates/game_details.html
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% if game.steam_description %}
|
||||
{% set lang = session.get('lang', 'en') %}
|
||||
{% set desc = getattr(game, 'steam_description_' + lang) %}
|
||||
{% if desc %}
|
||||
<div class="row mt-4">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-header">{{ _('Game Description') }}</div>
|
||||
<div class="card-body">
|
||||
{{ game.steam_description|safe }}
|
||||
{{ desc|safe }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue