feat/flask: add sitemap.xml and robots.txt

This commit is contained in:
2025-08-03 10:43:19 +03:00
parent e8ce7ee1d5
commit 9bc60ac47b

60
app.py
View File

@@ -9,13 +9,20 @@ from flask import (
request, request,
send_from_directory, send_from_directory,
url_for, url_for,
Response
) )
# ---------- APP CONFIG ------------------------------------------------------
cp = ConfigParser() cp = ConfigParser()
app = Flask(__name__) app = Flask(__name__)
# ---------- LOCALES FUNCTIONS -----------------------------------------------
def load_all_locales(): def load_all_locales():
locales_list = [] locales_list = []
locales_dict = {} locales_dict = {}
@@ -49,6 +56,9 @@ def load_all_locales():
locales_list, locales_dict, locales_code = load_all_locales() locales_list, locales_dict, locales_code = load_all_locales()
# ---------- HELPER FUNCTIONS ------------------------------------------------
def get_best_lang(): def get_best_lang():
return request.accept_languages.best_match(locales_code) or "en" return request.accept_languages.best_match(locales_code) or "en"
@@ -67,6 +77,9 @@ def render_localized_template(lang, template_name):
) )
# ---------- MAIN PAGES ------------------------------------------------------
@app.route("/favicon.ico") @app.route("/favicon.ico")
def favicon(): def favicon():
return send_from_directory( return send_from_directory(
@@ -89,5 +102,52 @@ def download(lang):
return render_localized_template(lang, "download.html") return render_localized_template(lang, "download.html")
# ---------- ROBOTS.TXT + SITEMAP.XML ----------------------------------------
@app.route("/robots.txt")
def robots_txt():
base_url = request.url_root.rstrip("/")
content = [
"User-agent: *",
"Disallow:",
f"Sitemap: {base_url}/sitemap.xml",
]
return Response("\n".join(content), mimetype="text/plain")
@app.route("/sitemap.xml")
def sitemap_xml():
base_url = request.url_root.rstrip("/")
today = date.today().isoformat()
urls = []
for lang in locales_code:
urls.append(f"{base_url}/{lang}")
urls.append(f"{base_url}/{lang}/download")
xml_lines = [
'<?xml version="1.0" encoding="UTF-8"?>',
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
]
for loc in urls:
xml_lines.extend(
[
" <url>",
f" <loc>{loc}</loc>",
f" <lastmod>{today}</lastmod>",
" <changefreq>monthly</changefreq>",
" <priority>0.8</priority>",
" </url>",
]
)
xml_lines.append("</urlset>")
return Response("\n".join(xml_lines), mimetype="application/xml")
# ---------- APP ENTRY -------------------------------------------------------
if __name__ == "__main__": if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True) app.run(host="0.0.0.0", debug=True)