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:
Marien Fressinaud committed 2012-11-06 21:29:26 +01:00
1 parent 6dfab0b1dc
commit 87ae244176
7 files changed
+1788 -5

No files matched your search

+1
View File
@@ -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
View File
@@ -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 (),
+42
View File
@@ -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
View File
@@ -1 +0,0 @@
<?php
+7
View File
@@ -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'
);
+1 -1
View File
@@ -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;