mirror of
https://github.com/YunoHost/apps.git
synced 2024-09-03 20:06:07 +02:00
store: add rss for news
Co-authored-by: oleole39
This commit is contained in:
parent
0c330f0fd9
commit
3ff5a3d3a7
3 changed files with 63 additions and 2 deletions
25
store/app.py
25
store/app.py
|
@ -11,6 +11,7 @@ import hmac
|
||||||
import string
|
import string
|
||||||
import random
|
import random
|
||||||
import urllib
|
import urllib
|
||||||
|
from datetime import datetime
|
||||||
from slugify import slugify
|
from slugify import slugify
|
||||||
from flask import (
|
from flask import (
|
||||||
Flask,
|
Flask,
|
||||||
|
@ -19,6 +20,7 @@ from flask import (
|
||||||
session,
|
session,
|
||||||
redirect,
|
redirect,
|
||||||
request,
|
request,
|
||||||
|
make_response,
|
||||||
)
|
)
|
||||||
from flask_babel import Babel
|
from flask_babel import Babel
|
||||||
from flask_babel import gettext as _
|
from flask_babel import gettext as _
|
||||||
|
@ -89,6 +91,13 @@ def days_ago(timestamp):
|
||||||
return int((time.time() - timestamp) / (60 * 60 * 24))
|
return int((time.time() - timestamp) / (60 * 60 * 24))
|
||||||
|
|
||||||
|
|
||||||
|
@app.template_filter("format_datetime")
|
||||||
|
def format_datetime(value, format="%d %b %Y %I:%M %p"):
|
||||||
|
if value is None:
|
||||||
|
return ""
|
||||||
|
return datetime.strptime(value, "%b %d %Y").strftime(format)
|
||||||
|
|
||||||
|
|
||||||
@app.context_processor
|
@app.context_processor
|
||||||
def utils():
|
def utils():
|
||||||
d = {
|
d = {
|
||||||
|
@ -487,6 +496,22 @@ def charts():
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/news.rss")
|
||||||
|
def news_rss():
|
||||||
|
|
||||||
|
news_per_date = json.loads(open(".cache/news.json").read())
|
||||||
|
|
||||||
|
# Keepy only the last N entries
|
||||||
|
news_per_date = {d: infos for d, infos in reversed(list(news_per_date.items())[-2:])}
|
||||||
|
|
||||||
|
rss_xml = render_template('news_rss.xml', news_per_date=news_per_date, catalog=get_catalog())
|
||||||
|
response = make_response(rss_xml)
|
||||||
|
response.headers['Content-Type'] = 'application/rss+xml'
|
||||||
|
response.headers['Content-Disposition'] = "inline; filename=news_rss.xml"
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Session / SSO using Discourse #
|
# Session / SSO using Discourse #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
|
@ -10,8 +10,13 @@
|
||||||
<div id="levelHistory" class="h-80"></div>
|
<div id="levelHistory" class="h-80"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mx-auto w-80">
|
<div class="mx-auto w-80 py-2">
|
||||||
<h1 class="text-center font-medium text-2xl py-2">{{ _("History") }}</h1>
|
<h1 class="text-center font-medium text-2xl pt-4">
|
||||||
|
{{ _("History") }}
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="YunoHost apps catalog news" href="{{ url_for('news_rss')}}" />
|
||||||
|
<a href="{{ url_for('news_rss')}}" class="btn btn-sm h-6 bg-orange-500 text-white !font-bold align-middle !px-2 !py-1"><i class="fa fa-rss-square" aria-hidden="true"></i> Suscribe via RSS</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{% for date, news in news_per_date.items()|reverse %}
|
{% for date, news in news_per_date.items()|reverse %}
|
||||||
<h2 class="text-center font-medium text-xl py-4">{{ date }}</h2>
|
<h2 class="text-center font-medium text-xl py-4">{{ date }}</h2>
|
||||||
|
|
31
store/templates/news_rss.xml
Normal file
31
store/templates/news_rss.xml
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0"
|
||||||
|
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||||
|
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||||
|
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||||
|
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||||
|
>
|
||||||
|
<channel>
|
||||||
|
<title>YunoHost apps catalog News</title>
|
||||||
|
<link>{{ url_for('news_rss')}}</link>
|
||||||
|
<atom:link href="{{ url_for('news_rss')}}" rel="self" type="application/rss+xml" />
|
||||||
|
<description>YunoHost apps catalog news</description>
|
||||||
|
{%- for date, news in news_per_date.items() %}
|
||||||
|
{%- for status in ("added", "repaired", "broke", "removed") %}i
|
||||||
|
{%- for app, url in news[status] %}
|
||||||
|
{% set manifest = catalog["apps"][app]["manifest"] %}
|
||||||
|
<item>
|
||||||
|
<title>[{{ status|capitalize }}] {{ manifest['name'] }}</title>
|
||||||
|
<link>{{ url_for('app_info', app_id=app) }}</link>
|
||||||
|
<guid>{{ app }}#{{ date|format_datetime("%Y%m%d") }}</guid>
|
||||||
|
<pubDate>{{ date|format_datetime("%a, %d %b %Y %H:%M:%S +0000") }}</pubDate>
|
||||||
|
<description>{{ manifest["description"].get("en") }}</description>
|
||||||
|
<content:encoded>{{ manifest["description"].get("en") }}</content:encoded>
|
||||||
|
</item>
|
||||||
|
{% endfor -%}
|
||||||
|
{% endfor -%}
|
||||||
|
{% endfor %}
|
||||||
|
</channel>
|
||||||
|
</rss>
|
Loading…
Add table
Reference in a new issue