diff options
| author | 2012-10-23 22:33:16 +0200 | |
|---|---|---|
| committer | 2012-10-23 22:33:16 +0200 | |
| commit | 5383f6206c6dfc7f2fe2376c12ce8879783e3506 (patch) | |
| tree | 5722d302bd43a0c74567e87aaf380f8ac11396e2 /lib/lib_rss.php | |
| parent | fca236dc6d6ff6e09182c560f3566904cbc7a70a (diff) | |
ajout fonction importation fichiers OPMs OPML
Diffstat (limited to 'lib/lib_rss.php')
| -rw-r--r-- | lib/lib_rss.php | 73 |
1 files changed, 66 insertions, 7 deletions
diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 74a86558c..7d01a4a0f 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -1,13 +1,12 @@ <?php // tiré de Shaarli de Seb Sauvage function small_hash ($txt) { + $t = rtrim (base64_encode (hash ('crc32', $txt, true)), '='); + $t = str_replace ('+', '-', $t); // Get rid of characters which need encoding in URLs. + $t = str_replace ('/', '_', $t); + $t = str_replace ('=', '@', $t); - $t = rtrim (base64_encode (hash ('crc32', $txt, true)), '='); - $t = str_replace ('+', '-', $t); // Get rid of characters which need encoding in URLs. - $t = str_replace ('/', '_', $t); - $t = str_replace ('=', '@', $t); - - return $t; + return $t; } function timestamptodate ($t, $hour = true) { @@ -90,5 +89,65 @@ function opml_export ($cats) { } function opml_import ($xml) { - // TODO + $opml = @simplexml_load_string ($xml); + + if (!$opml) { + return array (array (), array ()); + } + + $categories = array (); + $feeds = array (); + + foreach ($opml->body->outline as $outline) { + if (!isset ($outline['xmlUrl'])) { + // Catégorie + $title = ''; + + if (isset ($outline['text'])) { + $title = (string) $outline['text']; + } elseif (isset ($outline['title'])) { + $title = (string) $outline['title']; + } + + if ($title) { + $cat = new Category ($title); + $categories[] = $cat; + + $feeds = array_merge ($feeds, getFeedsOutline ($outline, $cat->id ())); + } + } else { + // Flux rss + $feeds[] = getFeed ($outline, ''); + } + } + + return array ($categories, $feeds); +} + +/** + * import all feeds of a given outline tag + */ +function getFeedsOutline ($outline, $cat_id) { + $feeds = array (); + + foreach ($outline->children () as $child) { + if (isset ($child['xmlUrl'])) { + $feeds[] = getFeed ($child, $cat_id); + } else { + $feeds = array_merge( + $feeds, + getFeedsOutline ($child, $cat_id) + ); + } + } + + return $feeds; +} + +function getFeed ($outline, $cat_id) { + $url = (string) $outline['xmlUrl']; + $feed = new Feed ($url); + $feed->_category ($cat_id); + + return $feed; } |
