]> git.wh0rd.org - tt-rss.git/blobdiff - functions.php
add experimental support for simplepie rss parser
[tt-rss.git] / functions.php
index d246ee98c228fa5049f317f1f17b18341ade0590..61b35a901afffeebd93e0897edfc64dbbf49dace 100644 (file)
        require_once 'errors.php';
        require_once 'version.php';
 
-       require_once 'magpierss/rss_utils.inc';
+       if (RSS_BACKEND_TYPE == "magpie") {     
+               require_once 'magpierss/rss_utils.inc';
+       } else if (RSS_BACKEND_TYPE == "simplepie") {
+               require_once 'simplepie/simplepie.inc';
+       }
 
        define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
 
                        }
 
                }
-               error_reporting(0);
-               $rss = fetch_rss($fetch_url);
 
-               error_reporting (DEFAULT_ERROR_LEVEL);
+               if (RSS_BACKEND_TYPE == "magpie") {             
+                       error_reporting(0);
+                       $rss = fetch_rss($fetch_url);
+                       error_reporting (DEFAULT_ERROR_LEVEL);
+               } else if (RSS_BACKEND_TYPE == "simplepie") {
+                       
+                       if (!file_exists(SIMPLEPIE_CACHE_DIR)) {
+                                       mkdir(SIMPLEPIE_CACHE_DIR);
+                       }
 
+                       $rss = new SimplePie();
+                       $rss->feed_url($fetch_url);
+                       $rss->cache_location(SIMPLEPIE_CACHE_DIR);
+                       $rss->init();
+               }
+               
                $feed = db_escape_string($feed);
 
-               if ($rss) {
+               $rss_check = $rss;
 
+               if (RSS_BACKEND_TYPE == "simplepie") {
+                       $rss_check = $rss->data;
+               }
+               
+               if ($rss_check) {
+                       
 //                     db_query($link, "BEGIN");
 
                        $result = db_query($link, "SELECT title,icon_url,site_url,owner_uid
                        }
 
                        if (!$registered_title || $registered_title == "[Unknown]") {
-                               $feed_title = db_escape_string($rss->channel["title"]);
+                       
+                               if (RSS_BACKEND_TYPE == "magpie") {                             
+                                       $feed_title = db_escape_string($rss->channel["title"]);
+                               } else {
+                                       $feed_title = $rss->get_feed_title();
+                               }
+                               
                                db_query($link, "UPDATE ttrss_feeds SET 
                                        title = '$feed_title' WHERE id = '$feed'");
                        }
 
-                       $site_url = $rss->channel["link"];
-                       // weird, weird Magpie
-                       if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]);
+                       if (RSS_BACKEND_TYPE == "magpie") {                             
+                               $site_url = $rss->channel["link"];
+                               // weird, weird Magpie
+                               if (!$site_url) $site_url = db_escape_string($rss->channel["link_"]);
+                       } else {
+                               $site_url = $rss->get_feed_link();
+                       }
 
                        if ($site_url && $orig_site_url != db_escape_string($site_url)) {
                                db_query($link, "UPDATE ttrss_feeds SET 
 
 //                     print "I: " . $rss->channel["image"]["url"];
 
-                       $icon_url = $rss->image["url"];
+                       if (RSS_BACKEND_TYPE == "magpie") {
+                               $icon_url = $rss->image["url"];
+                       } else {
+                               $icon_url = $rss->get_image_url(); # FIXME
+                       }
 
                        if ($icon_url && !$orig_icon_url != db_escape_string($icon_url)) {
                                $icon_url = db_escape_string($icon_url);
                                array_push($filters[$line["name"]], $filter);
                        }
 
-                       $iterator = $rss->items;
+                       if (RSS_BACKEND_TYPE == "magpie") {                     
+                               $iterator = $rss->items;
 
-                       if (!$iterator || !is_array($iterator)) $iterator = $rss->entries;
-                       if (!$iterator || !is_array($iterator)) $iterator = $rss;
+                               if (!$iterator || !is_array($iterator)) $iterator = $rss->entries;
+                               if (!$iterator || !is_array($iterator)) $iterator = $rss;
+
+                       } else {
+                               $iterator = $rss->get_items();
+                       }
 
                        if (!is_array($iterator)) {
                                /* db_query($link, "UPDATE ttrss_feeds 
                        }
 
                        foreach ($iterator as $item) {
+
+                               if (RSS_BACKEND_TYPE == "magpie") {
+                               
+                                       $entry_guid = $item["id"];
+               
+                                       if (!$entry_guid) $entry_guid = $item["guid"];
+                                       if (!$entry_guid) $entry_guid = $item["link"];
        
-                               $entry_guid = $item["id"];
+                                       if (!$entry_guid) continue;
        
-                               if (!$entry_guid) $entry_guid = $item["guid"];
-                               if (!$entry_guid) $entry_guid = $item["link"];
-
-                               if (!$entry_guid) continue;
-
-                               $entry_timestamp = "";
-
-                               $rss_2_date = $item['pubdate'];
-                               $rss_1_date = $item['dc']['date'];
-                               $atom_date = $item['issued'];
-                               if (!$atom_date) $atom_date = $item['updated'];
-                       
-                               if ($atom_date != "") $entry_timestamp = parse_w3cdtf($atom_date);
-                               if ($rss_1_date != "") $entry_timestamp = parse_w3cdtf($rss_1_date);
-                               if ($rss_2_date != "") $entry_timestamp = strtotime($rss_2_date);
+                                       $entry_timestamp = "";
+       
+                                       $rss_2_date = $item['pubdate'];
+                                       $rss_1_date = $item['dc']['date'];
+                                       $atom_date = $item['issued'];
+                                       if (!$atom_date) $atom_date = $item['updated'];
                                
-                               if ($entry_timestamp == "") {
-                                       $entry_timestamp = time();
-                                       $no_orig_date = 'true';
-                               } else {
-                                       $no_orig_date = 'false';
-                               }
-
-                               $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp);
+                                       if ($atom_date != "") $entry_timestamp = parse_w3cdtf($atom_date);
+                                       if ($rss_1_date != "") $entry_timestamp = parse_w3cdtf($rss_1_date);
+                                       if ($rss_2_date != "") $entry_timestamp = strtotime($rss_2_date);
+                                       
+                                       if ($entry_timestamp == "") {
+                                               $entry_timestamp = time();
+                                               $no_orig_date = 'true';
+                                       } else {
+                                               $no_orig_date = 'false';
+                                       }
+       
+                                       $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp);
+       
+                                       $entry_title = $item["title"];
+       
+                                       // strange Magpie workaround
+                                       $entry_link = $item["link_"];
+                                       if (!$entry_link) $entry_link = $item["link"];
+       
+                                       if (!$entry_title) continue;
+                                       if (!$entry_link) continue;
+       
+                                       $entry_content = $item["content:escaped"];
+       
+                                       if (!$entry_content) $entry_content = $item["content:encoded"];
+                                       if (!$entry_content) $entry_content = $item["content"];
+                                       if (!$entry_content) $entry_content = $item["summary"];
+                                       if (!$entry_content) $entry_content = $item["description"];
+       
+       //                              if (!$entry_content) continue;
+       
+                                       // WTF
+                                       if (is_array($entry_content)) {
+                                               $entry_content = $entry_content["encoded"];
+                                               if (!$entry_content) $entry_content = $entry_content["escaped"];
+                                       }
+       
+       //                              print_r($item);
+       //                              print_r(htmlspecialchars($entry_content));
+       //                              print "<br>";
+       
+                                       $entry_content_unescaped = $entry_content;
+                                       $content_hash = "SHA1:" . sha1(strip_tags($entry_content));
+       
+                                       $entry_comments = $item["comments"];
+       
+                                       $entry_author = db_escape_string($item['dc']['creator']);
+       
+                                       $entry_guid = db_escape_string($entry_guid);
+       
+                                       $result = db_query($link, "SELECT id FROM       ttrss_entries 
+                                               WHERE guid = '$entry_guid'");
+       
+                                       $entry_content = db_escape_string($entry_content);
+                                       $entry_title = db_escape_string($entry_title);
+                                       $entry_link = db_escape_string($entry_link);
+                                       $entry_comments = db_escape_string($entry_comments);
+       
+                                       $num_comments = db_escape_string($item["slash"]["comments"]);
+       
+                                       if (!$num_comments) $num_comments = 0;
 
-                               $entry_title = $item["title"];
+                               } else if (RSS_BACKEND_TYPE == "simplepie") {
 
-                               // strange Magpie workaround
-                               $entry_link = $item["link_"];
-                               if (!$entry_link) $entry_link = $item["link"];
+                                       $entry_guid = $item->get_id();
 
-                               if (!$entry_title) continue;
-                               if (!$entry_link) continue;
+                                       if (!$entry_guid) {
+                                                       $entry_guid = $item->get_permalink();
+                                       }
+       
+                                       if (!$entry_guid) continue;
+                                       
+                                       $entry_timestamp = $item->get_date("U");
+                                       
+                                       if ($entry_timestamp == "") {
+                                               $entry_timestamp = time();
+                                               $no_orig_date = 'true';
+                                       } else {
+                                               $no_orig_date = 'false';
+                                       }
+       
+                                       $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp);
+       
+                                       $entry_title = $item->get_title();
+                                       $entry_link = $item->get_permalink();
+       
+                                       if (!$entry_title) continue;
+                                       if (!$entry_link) continue;
 
-                               $entry_content = $item["content:escaped"];
+                                       $entry_content = $item->get_description();
+                                               
+//                                     print_r(htmlspecialchars($entry_content));
+//                                     print "<br>";
+       
+                                       $entry_content_unescaped = $entry_content;
+                                       $content_hash = "SHA1:" . sha1(strip_tags($entry_content));
+       
+                                       $entry_comments = ""; # FIXME
+                                       
+                                       $entry_author = $item->get_author(0);
 
-                               if (!$entry_content) $entry_content = $item["content:encoded"];
-                               if (!$entry_content) $entry_content = $item["content"];
-                               if (!$entry_content) $entry_content = $item["summary"];
-                               if (!$entry_content) $entry_content = $item["description"];
+                                       $entry_author = db_escape_string($entry_author->name);
+                                       
+                                       $entry_guid = db_escape_string($entry_guid);
 
-//                             if (!$entry_content) continue;
+                                       $result = db_query($link, "SELECT id FROM       ttrss_entries 
+                                               WHERE guid = '$entry_guid'");
+       
+                                       $entry_content = db_escape_string($entry_content);
+                                       $entry_title = db_escape_string($entry_title);
+                                       $entry_link = db_escape_string($entry_link);
+                                       $entry_comments = db_escape_string($entry_comments);
+       
+                                       $num_comments = 0; # FIXME
+       
+                                       if (!$num_comments) $num_comments = 0;
 
-                               // WTF
-                               if (is_array($entry_content)) {
-                                       $entry_content = $entry_content["encoded"];
-                                       if (!$entry_content) $entry_content = $entry_content["escaped"];
                                }
 
-//                             print_r($item);
-//                             print_r(htmlspecialchars($entry_content));
-//                             print "<br>";
-
-                               $entry_content_unescaped = $entry_content;
-                               $content_hash = "SHA1:" . sha1(strip_tags($entry_content));
-
-                               $entry_comments = $item["comments"];
-
-                               $entry_author = db_escape_string($item['dc']['creator']);
-
-                               $entry_guid = db_escape_string($entry_guid);
-
-                               $result = db_query($link, "SELECT id FROM       ttrss_entries 
-                                       WHERE guid = '$entry_guid'");
-
-                               $entry_content = db_escape_string($entry_content);
-                               $entry_title = db_escape_string($entry_title);
-                               $entry_link = db_escape_string($entry_link);
-                               $entry_comments = db_escape_string($entry_comments);
-
-                               $num_comments = db_escape_string($item["slash"]["comments"]);
-
-                               if (!$num_comments) $num_comments = 0;
-
                                db_query($link, "BEGIN");
 
                                if (db_num_rows($result) == 0) {