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: 11 months ago
JSON representation
rssc provides a real-time, self-hostable regex-oriented customization service for atom, rss and json feeds.
- Host: GitHub
- URL: https://github.com/larrasket/rssc
- Owner: larrasket
- License: gpl-3.0
- Created: 2023-08-12T10:51:52.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-11-14T08:05:10.000Z (over 2 years ago)
- Last Synced: 2025-04-06T00:23:02.671Z (about 1 year ago)
- Topics: atom, rss, rss-generator
- Language: Go
- Homepage: https://rssc.fly.dev/
- Size: 61.5 KB
- Stars: 19
- Watchers: 2
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.html
- License: LICENSE
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 berss,atomor
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
netis 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
usingnet=1.
- rssc is pre-alpha. Please report bugs here (url)