Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/larrasket/rssc

rssc provides a real-time, self-hostable regex-oriented customization service for atom, rss and json feeds.
https://github.com/larrasket/rssc

atom rss rss-generator

Last synced: 17 days ago
JSON representation

rssc provides a real-time, self-hostable regex-oriented customization service for atom, rss and json feeds.

Awesome Lists containing this project

README

        




rssc - rss customizer

<![CDATA[
html {
color: #1a1a1a;
background-color: #fdfdfd;
}
body {
margin: 0 auto;
max-width: 36em;
padding-left: 50px;
padding-right: 50px;
padding-top: 50px;
padding-bottom: 50px;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media (max-width: 600px) {
body {
font-size: 0.9em;
padding: 12px;
}
h1 {
font-size: 1.8em;
}
}
@media print {
html {
background-color: white;
}
body {
background-color: transparent;
color: black;
font-size: 12pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: #1a1a1a;
}
a:visited {
color: #1a1a1a;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 1em 0 1em 1.7em;
padding-left: 1em;
border-left: 2px solid #e6e6e6;
color: #606060;
}
code {
font-family: Menlo, Monaco, Consolas, 'Lucida Console', monospace;
font-size: 85%;
margin: 0;
hyphens: manual;
}
pre {
margin: 1em 0;
overflow: auto;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
hr {
background-color: #1a1a1a;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid #1a1a1a;
border-bottom: 1px solid #1a1a1a;
}
th {
border-top: 1px solid #1a1a1a;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
#TOC li {
list-style: none;
}
#TOC ul {
padding-left: 1.3em;
}
#TOC > ul {
padding-left: 0;
}
#TOC a:not(:hover) {
text-decoration: none;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
/* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
]]>


rssc - rss customizer



rssc provides a real-time, self-hostable regex-oriented
customization service for atom, rss and json feeds.


Usage


rssc uses get request parameters to read user's preferences.
following are the supported parameters:




  • src: the source URL of the feeds. Example:
    https://hnrss.org/newest


  • t: the type of desired feeds (that rssc will
    return), can be rss, atom or
    json.


  • descriptionf: regular expression filter to
    filter feeds based on the description property.


  • titlef: regular expression filter to filter
    feeds based on the title property.


  • contentf: regular expression filter to filter
    feeds based on the content property.


  • linkf: regular expression filter to filter
    feeds based on the link property.


  • net: boolean (1 or 0) (default to 0 when
    omitted) whether to use the .NET engine regex instead of
    Go's.


All regex should be valid RE2 regex syntax
(in case of net, see
MS' Regular Expression Language
).


Examples


Replace https://rssc.fly.dev/ in the
following examples with your instance of rssc (can be a
localhost:8080 if self-hosted).




  • Get all new feeds that contain the word "emacs" but not
    the word "vim", and not posted by user lr0 (hnrss.org does
    not provide a creator/author property, so the author filter
    here is only for a demonstration purpose.):



    https://rssc.fly.dev/rss?src=https://hnrss.org/newest?q=emacs&titlef=^(?!.*\bvim\b).*\bEmacs\b.*&net=1&authorf=^(?!.*\blr0\b).*$


    Do note that net is used here because RE2
    does not support lookarounds.




  • Get geopolitical updates from your favorite hacker and
    skip all free software movement blessed propaganda:



    https://rssc.fly.dev/rss?src=https://stallman.org/rss/rss.xml&contentf=^(?=.*(?:palestine|syria|egypt|iraq|israel|algeria|morocco))(?!.*(?:linux|gnu|software|programming|program)).*$&net=1




  • Get BBC middle east updates, only ones that are related to
    Palestine:



    https://rssc.fly.dev/rss?src=http://feeds.bbci.co.uk/news/world/middle_east/rss.xml&titlef=(?i)palestine|palestinian|gaza




Self-host


To host rssc locally, install it using Go:


go install github.com/larrasket/rssc@latest


Set environment variable for PORT, if user
doesn't set a PORT value, rssc will use
:8080 by default.


PORT=4040 rssc


Now rssc should be running at localhost:4040. You
can use the same examples provided, with
replacing fly domain with your localhost.


Notes



  • RE2 is much safer than the .NET Regex, that's to say, all
    the good features that .NET engine enables you to use come with
    a risk cost and ends up enabling
    catastrophic backtracking
    , therefore a timeout of 5
    seconds is currently enabled on the fly.dev instance when
    using net=1.

  • rssc is pre-alpha. Please report bugs here (url)