optimisation de la mise à jour des flux --> attention, modification de la BDD nécessaire

This commit is contained in:
Marien Fressinaud committed 2012-12-08 13:28:53 +01:00
1 parent acc0c6f424
commit ba37c6e06f
4 files changed
+104 -39

No files matched your search

+60 -32
View File
@@ -23,6 +23,7 @@ class feedController extends ActionController {
'name' => $feed->name (),
'website' => $feed->website (),
'description' => $feed->description (),
'lastUpdate' => time ()
);
$feedDAO->addFeed ($values);
@@ -68,30 +69,44 @@ class feedController extends ActionController {
$feedDAO = new FeedDAO ();
$entryDAO = new EntryDAO ();
$feeds = $feedDAO->listFeeds ();
$feeds = $feedDAO->listFeedsOrderUpdate ();
// pour ne pas ajouter des entrées trop anciennes
$nb_month_old = $this->view->conf->oldEntries ();
$date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old);
$i = 0;
foreach ($feeds as $feed) {
$feed->load ();
$entries = $feed->entries ();
foreach ($entries as $entry) {
$values = array (
'id' => $entry->id (),
'guid' => $entry->guid (),
'title' => $entry->title (),
'author' => $entry->author (),
'content' => $entry->content (),
'link' => $entry->link (),
'date' => $entry->date (true),
'is_read' => $entry->isRead (),
'is_favorite' => $entry->isFavorite (),
'id_feed' => $feed->id ()
);
$entryDAO->addEntry ($values);
if ($entry->date (true) >= $date_min) {
$values = array (
'id' => $entry->id (),
'guid' => $entry->guid (),
'title' => $entry->title (),
'author' => $entry->author (),
'content' => $entry->content (),
'link' => $entry->link (),
'date' => $entry->date (true),
'is_read' => $entry->isRead (),
'is_favorite' => $entry->isFavorite (),
'id_feed' => $feed->id ()
);
$entryDAO->addEntry ($values);
}
}
$feedDAO->updateLastUpdate ($feed->id ());
$i++;
if ($i >= 10) {
break;
}
}
$entryDAO->cleanOldEntries ($this->view->conf->oldEntries ());
$entryDAO->cleanOldEntries ($nb_month_old);
// notif
$notif = array (
@@ -125,26 +140,38 @@ class feedController extends ActionController {
);
$catDAO->addCategory ($values);
}
$nb_month_old = $this->view->conf->oldEntries ();
$date_min = time () - (60 * 60 * 24 * 30 * $nb_month_old);
$i = 0;
foreach ($feeds as $feed) {
$feed->load ();
$entries = $feed->entries ();
// Chargement du flux
foreach ($entries as $entry) {
$values = array (
'id' => $entry->id (),
'guid' => $entry->guid (),
'title' => $entry->title (),
'author' => $entry->author (),
'content' => $entry->content (),
'link' => $entry->link (),
'date' => $entry->date (true),
'is_read' => $entry->isRead (),
'is_favorite' => $entry->isFavorite (),
'id_feed' => $feed->id ()
);
$entryDAO->addEntry ($values);
// on ajoute les entrées que de 10 flux pour limiter un peu la charge
// si on ajoute pas les entrées du flux, alors on met la date du dernier update à 0
$update = 0;
$i++;
if ($i < 10) {
$update = time ();
$entries = $feed->entries ();
foreach ($entries as $entry) {
if ($entry->date (true) >= $date_min) {
$values = array (
'id' => $entry->id (),
'guid' => $entry->guid (),
'title' => $entry->title (),
'author' => $entry->author (),
'content' => $entry->content (),
'link' => $entry->link (),
'date' => $entry->date (true),
'is_read' => $entry->isRead (),
'is_favorite' => $entry->isFavorite (),
'id_feed' => $feed->id ()
);
$entryDAO->addEntry ($values);
}
}
}
// Enregistrement du flux
@@ -155,6 +182,7 @@ class feedController extends ActionController {
'name' => $feed->name (),
'website' => $feed->website (),
'description' => $feed->description (),
'lastUpdate' => $update
);
$feedDAO->addFeed ($values);
}
+34 -1
View File
@@ -7,6 +7,7 @@ class Feed extends Model {
private $name = '';
private $website = '';
private $description = '';
private $lastUpdate = 0;
public function __construct ($url) {
$this->_url ($url);
@@ -37,6 +38,9 @@ class Feed extends Model {
public function description () {
return $this->description;
}
public function lastUpdate () {
return $this->lastUpdate;
}
public function nbEntries () {
$feedDAO = new FeedDAO ();
return $feedDAO->countEntries ($this->id ());
@@ -74,6 +78,9 @@ class Feed extends Model {
}
$this->description = $value;
}
public function _lastUpdate ($value) {
$this->lastUpdate = $value;
}
public function load () {
if (!is_null ($this->url)) {
@@ -130,7 +137,7 @@ class Feed extends Model {
class FeedDAO extends Model_pdo {
public function addFeed ($valuesTmp) {
$sql = 'INSERT INTO feed (id, url, category, name, website, description) VALUES(?, ?, ?, ?, ?, ?)';
$sql = 'INSERT INTO feed (id, url, category, name, website, description, lastUpdate) VALUES(?, ?, ?, ?, ?, ?, ?)';
$stm = $this->bd->prepare ($sql);
$values = array (
@@ -140,6 +147,7 @@ class FeedDAO extends Model_pdo {
$valuesTmp['name'],
$valuesTmp['website'],
$valuesTmp['description'],
$valuesTmp['lastUpdate'],
);
if ($stm && $stm->execute ($values)) {
@@ -171,6 +179,22 @@ class FeedDAO extends Model_pdo {
}
}
public function updateLastUpdate ($id) {
$sql = 'UPDATE feed SET lastUpdate=? WHERE id=?';
$stm = $this->bd->prepare ($sql);
$values = array (
time (),
$id
);
if ($stm && $stm->execute ($values)) {
return true;
} else {
return false;
}
}
public function deleteFeed ($id) {
$sql = 'DELETE FROM feed WHERE id=?';
$stm = $this->bd->prepare ($sql);
@@ -209,6 +233,14 @@ class FeedDAO extends Model_pdo {
return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
}
public function listFeedsOrderUpdate () {
$sql = 'SELECT * FROM feed ORDER BY lastUpdate';
$stm = $this->bd->prepare ($sql);
$stm->execute ();
return HelperFeed::daoToFeed ($stm->fetchAll (PDO::FETCH_ASSOC));
}
public function listByCategory ($cat) {
$sql = 'SELECT * FROM feed WHERE category=? ORDER BY name';
$stm = $this->bd->prepare ($sql);
@@ -254,6 +286,7 @@ class HelperFeed {
$list[$key]->_name ($dao['name']);
$list[$key]->_website ($dao['website']);
$list[$key]->_description ($dao['description']);
$list[$key]->_lastUpdate ($dao['lastUpdate']);
}
return $list;
+4 -4
View File
@@ -21,15 +21,15 @@ function slide (new_active, old_active) {
new_active.addClass ("active");
if (hide_posts) {
old_active.children (".content").slideUp (200);
new_active.children (".content").slideDown (200, function () {
old_active.children (".content").slideUp (500);
new_active.children (".content").slideDown (500, function () {
$.smoothScroll({
offset: new_active.position ().top
offset: new_active.position ().top - 50
});
});
} else {
$.smoothScroll({
offset: new_active.position ().top + 25
offset: new_active.position ().top - 50
});
}
}
+6 -2
View File
@@ -184,6 +184,7 @@ form {
}
#main_aside {
position: fixed;
z-index: 10;
}
#categories {
height: 69%;
@@ -200,11 +201,14 @@ form {
vertical-align: top;
}
#top {
width: 100%;
position: fixed;
top: 0;
width: 85%;
background: #eee;
border-bottom: 1px solid #aaa;
box-shadow: 0 1px 3px #aaa;
text-align: center;
z-index: 0;
}
#top a {
display: inline-block;
@@ -218,7 +222,7 @@ form {
text-decoration: none;
}
#stream {
padding: 0;
padding: 50px 0 0;
}
#main .table {
display: table;