aboutsummaryrefslogtreecommitdiff
path: root/docs/05_Bridge_API/03_FeedExpander.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/05_Bridge_API/03_FeedExpander.md')
-rw-r--r--docs/05_Bridge_API/03_FeedExpander.md104
1 files changed, 104 insertions, 0 deletions
diff --git a/docs/05_Bridge_API/03_FeedExpander.md b/docs/05_Bridge_API/03_FeedExpander.md
new file mode 100644
index 00000000..7e72670a
--- /dev/null
+++ b/docs/05_Bridge_API/03_FeedExpander.md
@@ -0,0 +1,104 @@
+`FeedExpander` extends [`BridgeAbstract`](./02_BridgeAbstract.md) and adds functions to collect data from existing feeds.
+
+**Usage example**: _You have discovered a site that provides feeds which are hidden and inaccessible by normal means. You want your bridge to directly read the feeds and provide them via **RSS-Bridge**_
+
+To create a new Bridge extending `FeedExpander` you must implement all required functions of [`BridgeAbstract`](./02_BridgeAbstract.md). `FeedExpander` additionally provides following functions:
+
+* [`parseItem`](#the-parseitem-function)
+* [`getName`](#the-getname-function)
+* [`getURI`](#the-geturi-function)
+* [`getDescription`](#the-getdescription-function)
+
+Find a [template](#template) at the end of this file.
+
+**Notice:** For a standard feed only `collectData` need to be implemented. `collectData` should call `$this->collectExpandableDatas('your URI here');` to automatically load feed items and header data (will subsequently call `parseItem` for each item in the feed). You can limit the number of items to fetch by specifying an additional parameter for: `$this->collectExpandableDatas('your URI here', 10)` (limited to 10 items).
+
+## The `parseItem` function
+
+This function receives one item from the current feed and should return one **RSS-Bridge** item.
+The default function does all the work to get the item data from the feed, whether it is RSS 1.0,
+RSS 2.0 or Atom 1.0. If you have to redefine this function in your **RSS-Bridge** for whatever reason,
+you should first call the parent function to initialize the item, then apply the changes that you require.
+
+**Notice:** The following code sample is just an example. Implementation depends on your requirements!
+
+```PHP
+protected function parseItem($feedItem){
+ $item = parent::parseItem($feedItem);
+ $item['content'] = str_replace('rssbridge','RSS-Bridge',$feedItem->content);
+
+ return $item;
+}
+```
+
+### Helper functions
+
+The `FeedExpander` already provides a set of functions to parse RSS or Atom items based on the specifications. Where possible make use of these functions:
+
+Function | Description
+---------|------------
+`parseATOMItem` | Parses an Atom 1.0 feed item
+`parseRSS_0_9_1_Item` | Parses an RSS 0.91 feed item
+`parseRSS_1_0_Item` | Parses an RSS 1.0 feed item
+`parseRSS_2_0_Item` | Parses an RSS 2.0 feed item
+
+In the following list you'll find the feed tags assigned to the the **RSS-Bridge** item keys:
+
+Function | uri | title | timestamp | author | content
+---------|-----|-------|-----------|--------|--------
+`parseATOMItem` | id | title | updated | author | content
+`parseRSS_0_9_1_Item` | link | title | | | description
+`parseRSS_1_0_Item` | link | title | dc:date | dc:creator | description
+`parseRSS_2_0_Item` | link, guid | title | pubDate, dc:date | author, dc:creator | description
+
+## The `getName` function
+
+Returns the name of the current feed.
+
+```PHP
+return $this->name;
+```
+
+**Notice:** Only implement this function if you require different behavior!
+
+## The `getURI` function
+
+Return the uri for the current feed.
+
+```PHP
+return $this->uri;
+```
+
+**Notice:** Only implement this function if you require different behavior!
+
+## The `getDescription` function
+
+Returns the description for the current bridge.
+
+```PHP
+return $this->description;
+```
+
+**Notice:** Only implement this function if you require different behavior!
+
+# Template
+
+This is the template for a new bridge:
+
+```PHP
+<?php
+class MySiteBridge extends FeedExpander {
+
+ const MAINTAINER = 'No maintainer';
+ const NAME = 'Unnamed bridge';
+ const URI = '';
+ const DESCRIPTION = 'No description provided';
+ const PARAMETERS = array();
+ const CACHE_TIMEOUT = 3600;
+
+ public function collectData(){
+ $this->collectExpandableDatas('your feed URI');
+ }
+}
+// Imaginary empty line!
+``` \ No newline at end of file