diff options
Diffstat (limited to 'config')
| -rw-r--r-- | config/services/web/rss/ParisJazzClubBridge.php | 33 | ||||
| -rw-r--r-- | config/services/web/rss/default.nix | 29 |
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; + }; + }; +} |
