X-Git-Url: https://git.cweiske.de/stapibas.git/blobdiff_plain/2742e3e3e79d55295fafdb81a86eee9b366031d8..2a9a6c334ed1f091e9965f63392bc6733cae9b28:/src/stapibas/Feed/UpdateEntries.php?ds=sidebyside diff --git a/src/stapibas/Feed/UpdateEntries.php b/src/stapibas/Feed/UpdateEntries.php index b0daf6f..119b207 100644 --- a/src/stapibas/Feed/UpdateEntries.php +++ b/src/stapibas/Feed/UpdateEntries.php @@ -9,27 +9,60 @@ class Feed_UpdateEntries public $db; public $log; + public function __construct(Dependencies $deps) + { + $this->deps = $deps; + $this->db = $deps->db; + $this->log = $deps->log; + } + public function updateAll() { $this->log->info('Updating feed entries..'); $res = $this->db->query( 'SELECT * FROM feedentries' - . ' WHERE fe_needs_update = 1 OR fe_updated = "0000-00-00 00:00:00"' + . ' WHERE ' . $this->sqlNeedsUpdate() ); + $items = 0; while ($entryRow = $res->fetch(\PDO::FETCH_OBJ)) { - $this->log->info( - sprintf( - 'Updating feed entry #%d: %s', - $entryRow->fe_id, $entryRow->fe_url - ) - ); + ++$items; $this->updateEntry($entryRow); } - $this->log->info('Finished updating entries.'); + $this->log->info('Finished updating %d entries.', $items); + } + + public function updateSome($urlOrIds) + { + $options = array(); + foreach ($urlOrIds as $urlOrId) { + if (is_numeric($urlOrId)) { + $options[] = 'fe_id = ' . intval($urlOrId); + } else { + $options[] = 'fe_url = ' . $this->db->quote($urlOrId); + } + } + + $this->log->info('Updating %d feed entries..', count($options)); + $res = $this->db->query( + 'SELECT * FROM feedentries' + . ' WHERE ' . $this->sqlNeedsUpdate() + . ' AND (' . implode(' OR ', $options) . ')' + ); + + $items = 0; + while ($entryRow = $res->fetch(\PDO::FETCH_OBJ)) { + ++$items; + $this->updateEntry($entryRow); + } + $this->log->info('Finished updating %d entries.', $items); } protected function updateEntry($entryRow) { + $this->log->info( + 'Updating feed entry #%d: %s', $entryRow->fe_id, $entryRow->fe_url + ); + $req = new \HTTP_Request2($entryRow->fe_url); $req->setHeader('User-Agent', 'stapibas'); $req->setHeader( @@ -122,10 +155,8 @@ class Feed_UpdateEntries ); } $this->log->info( - sprintf( - 'Feed entry #%d: %d new, %d updated, %d deleted of %d URLs', - $entryRow->fe_id, $new, $updated, $deleted, $items - ) + 'Feed entry #%d: %d new, %d updated, %d deleted of %d URLs', + $entryRow->fe_id, $new, $updated, $deleted, $items ); } @@ -149,7 +180,7 @@ class Feed_UpdateEntries . '//*[' . $this->xpc('e-content') . ' or ' . $this->xpc('entry-content') . ']' . '//*[(self::a or self::h:a) and @href and not(starts-with(@href, "#"))]'; $links = $xpath->query($query); - $this->log->info(sprintf('%d links found', $links->length)); + $this->log->info('%d links found', $links->length); $entryUrl = new \Net_URL2($entryRow->fe_url); //FIXME: base URL in html code @@ -193,5 +224,12 @@ class Feed_UpdateEntries ); } + protected function sqlNeedsUpdate() + { + if ($this->deps->options['force']) { + return ' 1'; + } + return ' (fe_needs_update = 1 OR fe_updated = "0000-00-00 00:00:00")'; + } } ?>