mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-10-25 12:38:37 -04:00
Fix issue #10 : On peut désormais charger les articles complets pour des flux incomplets... Nécessite des tests plus approfondis
This commit is contained in:
1 parent
6dfab0b1dc
commit
87ae244176
7 files changed
+1788
-5
No files matched your search
@@ -17,6 +17,7 @@ class App_FrontController extends FrontController {
|
||||
}
|
||||
|
||||
private function loadLibs () {
|
||||
require (LIB_PATH . '/lib_simple_html_dom.php');
|
||||
require (LIB_PATH . '/lib_rss.php');
|
||||
require (LIB_PATH . '/lib_simplepie.php');
|
||||
}
|
||||
|
||||
+15
-3
@@ -79,21 +79,33 @@ class Feed extends Model {
|
||||
$feed->init ();
|
||||
|
||||
$title = $feed->get_title ();
|
||||
$this->loadEntries ($feed);
|
||||
$this->_name (!is_null ($title) ? $title : $this->url);
|
||||
$this->_website ($feed->get_link ());
|
||||
$this->_description ($feed->get_description ());
|
||||
$this->loadEntries ($feed);
|
||||
}
|
||||
}
|
||||
private function loadEntries ($feed) {
|
||||
$entries = array ();
|
||||
|
||||
|
||||
foreach ($feed->get_items () as $item) {
|
||||
$title = $item->get_title ();
|
||||
$author = $item->get_author ();
|
||||
$content = $item->get_content ();
|
||||
$link = $item->get_permalink ();
|
||||
$date = strtotime ($item->get_date ());
|
||||
|
||||
// Gestion du contenu
|
||||
// On cherche à récupérer les articles en entier... même si le flux ne le propose pas
|
||||
$path = get_path ($this->website ());
|
||||
if ($path) {
|
||||
try {
|
||||
$content = get_content_by_parsing ($item->get_permalink (), $path);
|
||||
} catch (Exception $e) {
|
||||
$content = $item->get_content ();
|
||||
}
|
||||
} else {
|
||||
$content = $item->get_content ();
|
||||
}
|
||||
|
||||
$entry = new Entry (
|
||||
$this->id (),
|
||||
|
||||
@@ -165,3 +165,45 @@ function getFeed ($outline, $cat_id) {
|
||||
|
||||
return $feed;
|
||||
}
|
||||
|
||||
/*
|
||||
* Vérifie pour un site donné s'il faut aller parser directement sur le site
|
||||
* Renvoie le path (id et class html) pour récupérer le contenu, false si pas besoin
|
||||
* On se base sur une base connue de sites
|
||||
*/
|
||||
function get_path ($url) {
|
||||
$list_sites_parse = include (PUBLIC_PATH . '/data/Sites.array.php');
|
||||
if (isset ($list_sites_parse[$url])) {
|
||||
return $list_sites_parse[$url];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* supprime les trucs inutiles des balises html */
|
||||
function good_bye_extra ($element) {
|
||||
$element->style = null;
|
||||
$element->class = null;
|
||||
$element->id = null;
|
||||
}
|
||||
/* permet de récupérer le contenu d'un article pour un flux qui n'est pas complet */
|
||||
function get_content_by_parsing ($url, $path) {
|
||||
$content = new simple_html_dom ();
|
||||
$content->set_callback ('good_bye_extra');
|
||||
$ok = $content->load_file ($url);
|
||||
|
||||
if ($ok !== false) {
|
||||
// Le __toString () permet d'écraser le DOM (on n'en a plus besoin)
|
||||
// une autre solution serait $content->clear () qui vide le dom
|
||||
$content = $content->find ($path, 0)->__toString ();
|
||||
|
||||
if ($content) {
|
||||
return $content;
|
||||
} else {
|
||||
throw new Exception ();
|
||||
}
|
||||
} else {
|
||||
throw new Exception ();
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1 +0,0 @@
|
||||
<?php
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return array (
|
||||
'http://www.numerama.com/' => '#newstext',
|
||||
'http://www.rue89.com/' => '#article .content', // buggué lorsqu'il y a des mises à jour :-/
|
||||
'http://www.explosm.net/' => '#maincontent div div div img'
|
||||
);
|
||||
@@ -128,7 +128,7 @@ form {
|
||||
}
|
||||
.aside li > a:hover, .aside li > span:hover {
|
||||
text-decoration: none;
|
||||
background: #f0f0f0;
|
||||
background: #fafafa;
|
||||
}
|
||||
.aside li.disable > span {
|
||||
background: #fff;
|
||||
|
||||
Reference in new issue
Block a user