Without this, every item has an enclosure with the same basename and
different query parameters.
This is correct, but some podcast readers (gPodder) mess it up, writing
every download to the same file.
Some facebook tracking query parameter was getting inside the <link>
and <guid> tags. This commit strips them off so that a feed reader
won't think there are always new posts.
https://cad-comic.com/ now provides feeds at
- https://cad-comic.com/feed (rss)
- https://cad-comic.com/feed/atom (atom)
Thus multiple alternatives are available to choose from, making this
bridge obsolete:
- FilterBridge (using one of the feeds above)
- WordPressBridge (on the main site)
- One of the two available feeds
References #752
This commit fixes an issue caused by self closing tags not supported
by simplehtmldom (<source>).
Adds a monkey patch to extend simplehtmldom with the ability to detect
that particular tag. Most of the code added is copied directly from
simplehtmldom (see vendor/simplehtmldom) with adjustments to account
for RSS-Bridge formatting.
Related to: https://sourceforge.net/p/simplehtmldom/bugs/83/
Notice: The tag itself is valid according to Mozilla:
The HTML <picture> element serves as a container for zero or more
<source> elements and one <img> element to provide versions of an
image for different display device scenarios. The browser will
consider each of the child <source> elements and select one
corresponding to the best match found; if no matches are found
among the <source> elements, the file specified by the <img>
element's src attribute is selected. The selected image is then
presented in the space occupied by the <img> element.
-- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture
References #753
Adds a new action '?action=list' to return a list of bridges as JSON formatted text. Each bridge brings following information:
- status (active/inactive)
- uri
- name
- parameters
- maintainer
- description
For inactive bridges only the status is returned.
Bridges that cannot be instantiated are considered inactive.
Adds unit test for bridge implementations:
- Custom functions must be in protected or private scope
- getName() must return a valid string (non-empty)
- getURI() must return a valid URI
- Each bridge must define constants for NAME, URI, DESCRIPTION and
MAINTAINER. CACHE_TIMEOUT and PARAMETERS are optional.
The unit test is written for PHPUnit 6.x and will automatically be
tested by Travis-CI for PHP 7.0 (see .travis.yml).
Remarks:
Unit tests for bridge data were scrapped in #378 for complexity
reasons (tests would have to be maintained for each bridge). This
unit test, however, is written for testing all bridges without
taking specific implementation details into account.
* use defaultLinkTo
* remove duplicate video links
* remove line ending before "Reposted" label
* return newline before reposted string
* remove comments
* use video links that won't require login
* set title if video has no title
Adds a new option '&title_from_content=on' to build the title for feed
items from the feeds content. The title is generated from the first
whitespace after 50 characters of the content or the entire content if
the total size is lower than 50 characters.
References #587
This commit fixes a few things related to static::URI
1) Remove trailing slash from the URI to simplify using 'defaultLinkTo'
2) Use static::URI instead of self::URI for consistency
3) Remove custom implementation of 'defaultLinkTo'
Images are collected for each post and added to enclosures. Images or
animtions from lh3.googleusercontent.com are specifically handled in
order to return the animated version of the gif and the original sized
image (this is normally taken care of by JS in the browser).
Adds a new bridge for https://gist.github.com
The bridge generates feeds for comments on a particular gist based on
the gist ID or full URI. For better readability the general behavior
of code sections is manually restored with the original CSS styles
from GitHub.
New bridge for Skimfeed: https://skimfeed.com
Generates feeds for all features of Skimfeed:
- News (the ones displayed on the front page)
- Hot topics ("What's Hot" section on the front page)
- Tech news (preconfigured feeds in the menu bar)
- Custom feeds (using the configuration system of Skimfeed), see
https://skimfeed.com/custom.php
The number of items returned by the bridge can be limited for all
categories ('&limit=...'). This parameter is optional, all categories
are unlimited by default!
Authors are added with HTML anchors in order to allow quick navigation
to source channels.
The bridge ships with developer tools to auto-generate lists in the
future (especially useful for 'Tech news'!)
References #748
Following changes in the JSON data and selecting images for the
content (320x240 or bigger) and enclosure (largest version). All of
the data is now extracted from the JSON data instead of parsing the
DOM.
References #754
[html] Generate index and bridge cards using separate clases
Move HTML generating code from 'index.php' to 'Index.php', separating components into static functions.
Move HTML generation code for bridge cards from 'html.php' to 'BridgeCard.php', separating components into static functions.
Removing this bridge for two reasons:
1) The service moved from www.cpasbien.cm to www.torrents9.blue,
changing the layout in the process (incompatible).
2) The new site is permanently protected by Cloudflare IUAM, making
it inaccessible by RSS-Bridge.
While it would certainly be possible to rewrite the bridge to work
with the new layout, the site is still inaccessible.
References #605
Adds detection for servers responding with Cloudflare challenges,
throwing a server error if detected:
"The server responded with a Cloudflare challenge, which is not
supported by RSS-Bridge! If this error persists longer than a week,
please consider opening an issue on GitHub!"
This is supposed to support maintainers to identify broken bridges
for sites with Cloudflare enabled permanently. It doesn't circumvent
the protection in any form or shape!
The Cloudflare challenge is detected by analyzing the last response
header received from the server. If the HTTP Code is not 200 (OK)
and the server name contains 'cloudflare' ('Server: cloudflare'),
RSS-Bridge assumes the server responded with a challenge.
The header parsing is based on https://stackoverflow.com/a/18682872