summaryrefslogtreecommitdiff
path: root/config/services
diff options
context:
space:
mode:
Diffstat (limited to 'config/services')
-rw-r--r--config/services/web/rss/ParisJazzClubBridge.php33
-rw-r--r--config/services/web/rss/default.nix29
2 files changed, 62 insertions, 0 deletions
diff --git a/config/services/web/rss/ParisJazzClubBridge.php b/config/services/web/rss/ParisJazzClubBridge.php
new file mode 100644
index 0000000..02d6c31
--- /dev/null
+++ b/config/services/web/rss/ParisJazzClubBridge.php
@@ -0,0 +1,33 @@
+<?php
+
+class ParisJazzClubBridge extends XPathAbstract {
+ const NAME = 'Paris Jazz Club Bridge';
+ const URI = 'https://www.parisjazzclub.net/en/agenda-free/';
+ const DESCRIPTION = 'Free concerts for the Paris Jazz Club subscribers.';
+ const MAINTAINER = 'Quentin Aristote';
+ const CACHE_TIMEOUT = 86400; // 24h
+
+ const FEED_SOURCE_URL = 'https://www.parisjazzclub.net/en/agenda-free/';
+ const XPATH_EXPRESSION_ITEM = '//div[@class="col-12 mb-5 concerts-items"]';
+ const XPATH_EXPRESSION_ITEM_TITLE = './/h3';
+ const XPATH_EXPRESSION_ITEM_CONTENT = '.';
+ const XPATH_EXPRESSION_ITEM_URI = './/a/@href';
+ const XPATH_EXPRESSION_ITEM_AUTHOR = './/i[@class="fa fa-fw fa-street-view text-ocre"]/..';
+ const XPATH_EXPRESSION_ITEM_TIMESTAMP = './/i[@class="fa fa-fw fa-calendar text-ocre"]/..';
+ const XPATH_EXPRESSION_ITEM_ENCLOSURES = './/img[@class="img"]/@src';
+ const XPATH_EXPRESSION_ITEM_CATEGORIES = './/i[@class="fa fa-fw fa-music text-ocre"]/..';
+
+ public function getIcon() {
+ return 'https://www.parisjazzclub.net/favicon/favicon.ico';
+ }
+
+ protected function formatItemTimestamp($value) {
+ $date = str_replace("/", "-", substr($value, -10));
+ return strtotime($date);
+ }
+
+ protected function formatItemContent($value) {
+ $text = preg_replace("/\s\s+/", "\n", $value);
+ return $text;
+ }
+}
diff --git a/config/services/web/rss/default.nix b/config/services/web/rss/default.nix
new file mode 100644
index 0000000..1ed96ce
--- /dev/null
+++ b/config/services/web/rss/default.nix
@@ -0,0 +1,29 @@
+{ config, lib, pkgs, ... }:
+
+let
+ cfg = config.services.rss-bridge;
+ debug = false;
+ rss-bridge = pkgs.rss-bridge.overrideAttrs (oldAttrs:
+ oldAttrs // {
+ installPhase = oldAttrs.installPhase + ''
+ ln -sf ${./ParisJazzClubBridge.php} $out/bridges/ParisJazzClubBridge.php
+ '' + lib.optionalString debug ''
+ touch $out/DEBUG
+ '';
+ });
+in {
+ services.rss-bridge = {
+ enable = true;
+ whitelist = [ "ParisJazzClub" ];
+ virtualHost = "rss";
+ };
+
+ services.nginx = lib.mkIf (cfg.virtualHost != null) {
+ virtualHosts.${cfg.virtualHost} = {
+ serverName = "rss.${config.networking.domain}";
+ root = lib.mkForce "${rss-bridge}";
+ forceSSL = true;
+ enableACME = true;
+ };
+ };
+}