summaryrefslogtreecommitdiff
path: root/lib/lib_rss.php
diff options
context:
space:
mode:
authorGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2012-10-23 22:33:16 +0200
committerGravatar Marien Fressinaud <dev@marienfressinaud.fr> 2012-10-23 22:33:16 +0200
commit5383f6206c6dfc7f2fe2376c12ce8879783e3506 (patch)
tree5722d302bd43a0c74567e87aaf380f8ac11396e2 /lib/lib_rss.php
parentfca236dc6d6ff6e09182c560f3566904cbc7a70a (diff)
ajout fonction importation fichiers OPMs OPML
Diffstat (limited to 'lib/lib_rss.php')
-rw-r--r--lib/lib_rss.php73
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;
}