From ec95d8699d11ae3ebd92317fb0ea185f2ef697bd Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Mon, 2 Mar 2015 22:31:20 -0500 Subject: [PATCH] Fix bug for atom items without date and add grabber rules --- vendor/autoload.php | 2 +- vendor/composer/autoload_real.php | 10 +- vendor/composer/installed.json | 8 +- .../picofeed/lib/PicoFeed/Parser/Atom.php | 14 ++- .../picofeed/lib/PicoFeed/Parser/Parser.php | 9 +- .../picofeed/lib/PicoFeed/Parser/Rss20.php | 7 +- .../lib/PicoFeed/Rules/dailyjs.com.php | 15 +++ .../lib/PicoFeed/Rules/putaindecode.fr.php | 12 ++ .../lib/PicoFeed/Rules/www.developpez.com.php | 10 +- .../picofeed/tests/Parser/AtomParserTest.php | 9 ++ .../picofeed/tests/Parser/DateParserTest.php | 1 + .../picofeed/tests/Parser/Rss20ParserTest.php | 4 +- .../tests/fixtures/duesseldorf_lokalzeit.rdf | 111 ++++++++++++++++++ 13 files changed, 187 insertions(+), 25 deletions(-) create mode 100755 vendor/fguillot/picofeed/lib/PicoFeed/Rules/dailyjs.com.php create mode 100755 vendor/fguillot/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php create mode 100644 vendor/fguillot/picofeed/tests/fixtures/duesseldorf_lokalzeit.rdf diff --git a/vendor/autoload.php b/vendor/autoload.php index 8543b27..2595659 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInit32c1e5caea1303c23c9e3aeeb4850b2e::getLoader(); +return ComposerAutoloaderInit093c65b5382fc7317d870fcd9f8036ba::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 98c801f..1f0d835 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit32c1e5caea1303c23c9e3aeeb4850b2e +class ComposerAutoloaderInit093c65b5382fc7317d870fcd9f8036ba { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit32c1e5caea1303c23c9e3aeeb4850b2e return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit32c1e5caea1303c23c9e3aeeb4850b2e', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit093c65b5382fc7317d870fcd9f8036ba', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit32c1e5caea1303c23c9e3aeeb4850b2e', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit093c65b5382fc7317d870fcd9f8036ba', 'loadClassLoader')); $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -42,14 +42,14 @@ class ComposerAutoloaderInit32c1e5caea1303c23c9e3aeeb4850b2e $includeFiles = require __DIR__ . '/autoload_files.php'; foreach ($includeFiles as $file) { - composerRequire32c1e5caea1303c23c9e3aeeb4850b2e($file); + composerRequire093c65b5382fc7317d870fcd9f8036ba($file); } return $loader; } } -function composerRequire32c1e5caea1303c23c9e3aeeb4850b2e($file) +function composerRequire093c65b5382fc7317d870fcd9f8036ba($file) { require $file; } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 568f115..767043c 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -162,12 +162,12 @@ "source": { "type": "git", "url": "https://github.com/fguillot/picoFeed.git", - "reference": "da9c8df79c76b00e2e7c16ae12f768117164a838" + "reference": "a006fc10642fbdc5414bebd6542aeabd35f8c98b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fguillot/picoFeed/zipball/da9c8df79c76b00e2e7c16ae12f768117164a838", - "reference": "da9c8df79c76b00e2e7c16ae12f768117164a838", + "url": "https://api.github.com/repos/fguillot/picoFeed/zipball/a006fc10642fbdc5414bebd6542aeabd35f8c98b", + "reference": "a006fc10642fbdc5414bebd6542aeabd35f8c98b", "shasum": "" }, "require": { @@ -178,7 +178,7 @@ "ext-xml": "*", "php": ">=5.3.0" }, - "time": "2015-03-01 23:58:00", + "time": "2015-03-03 03:14:01", "type": "library", "installation-source": "dist", "autoload": { diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php index 2156652..0e53d27 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Atom.php @@ -138,16 +138,20 @@ class Atom extends Parser * Find the item date * * @access public - * @param SimpleXMLElement $entry Feed item - * @param Item $item Item object + * @param SimpleXMLElement $entry Feed item + * @param Item $item Item object + * @param \PicoFeed\Parser\Feed $feed Feed object */ - public function findItemDate(SimpleXMLElement $entry, Item $item) + public function findItemDate(SimpleXMLElement $entry, Item $item, Feed $feed) { $published = isset($entry->published) ? $this->date->getDateTime((string) $entry->published) : null; $updated = isset($entry->updated) ? $this->date->getDateTime((string) $entry->updated) : null; - if ($published !== null && $updated !== null) { - $item->date = max($published, $updated); + if ($published === null && $updated === null) { + $item->date = $feed->getDate(); // We use the feed date if there is no date for the item + } + else if ($published !== null && $updated !== null) { + $item->date = max($published, $updated); // We use the most recent date between published and updated } else { $item->date = $updated ?: $published; diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php index 7ada6d1..4d45f53 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Parser.php @@ -164,7 +164,7 @@ abstract class Parser // Id generation can use the item url/title/content (order is important) $this->findItemId($entry, $item, $feed); - $this->findItemDate($entry, $item); + $this->findItemDate($entry, $item, $feed); $this->findItemEnclosure($entry, $item, $feed); $this->findItemLanguage($entry, $item, $feed); @@ -333,7 +333,7 @@ abstract class Parser if ($timezone) { $this->date->timezone = $timezone; } - + return $this; } @@ -532,9 +532,10 @@ abstract class Parser * * @access public * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object + * @param Item $item Item object + * @param \PicoFeed\Parser\Feed $feed Feed object */ - public abstract function findItemDate(SimpleXMLElement $entry, Item $item); + public abstract function findItemDate(SimpleXMLElement $entry, Item $item, Feed $feed); /** * Find the item content diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php index b26c752..2529b59 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Parser/Rss20.php @@ -142,9 +142,10 @@ class Rss20 extends Parser * * @access public * @param SimpleXMLElement $entry Feed item - * @param \PicoFeed\Parser\Item $item Item object + * @param Item $item Item object + * @param \PicoFeed\Parser\Feed $feed Feed object */ - public function findItemDate(SimpleXMLElement $entry, Item $item) + public function findItemDate(SimpleXMLElement $entry, Item $item, Feed $feed) { $date = XmlParser::getNamespaceValue($entry, $this->namespaces, 'date'); @@ -156,7 +157,7 @@ class Rss20 extends Parser $date = (string) $entry->pubDate; } - $item->date = $this->date->getDateTime($date); + $item->date = empty($date) ? $feed->getDate() : $this->date->getDateTime($date); } /** diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/dailyjs.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/dailyjs.com.php new file mode 100755 index 0000000..bde5895 --- /dev/null +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/dailyjs.com.php @@ -0,0 +1,15 @@ + 'http://dailyjs.com/2014/08/07/p5js/', + 'body' => array( + '//div[@id="post"]', + ), + 'strip' => array( + '//h2[@class="post"]', + '//div[@class="meta"]', + '//*[contains(@class, "addthis_toolbox")]', + '//*[contains(@class, "addthis_default_style")]', + '//*[@class="navigation small"]', + '//*[@id="related"]', + ) +); diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php new file mode 100755 index 0000000..6857c20 --- /dev/null +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/putaindecode.fr.php @@ -0,0 +1,12 @@ + 'http://putaindecode.fr/posts/js/etat-lieux-js-modulaire-front/', + 'body' => array( + '//*[@class="putainde-Post-md"]', + ), + 'strip' => array( + '//*[contains(@class, "inlineimg")]', + '//*[contains(@class, "comment-respond")]', + '//header' + ) +); diff --git a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.developpez.com.php b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.developpez.com.php index bb826b4..d56bcca 100644 --- a/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.developpez.com.php +++ b/vendor/fguillot/picofeed/lib/PicoFeed/Rules/www.developpez.com.php @@ -2,8 +2,16 @@ return array( 'test_url' => 'http://www.developpez.com/actu/81757/Mozilla-annonce-la-disponibilite-de-Firefox-36-qui-passe-au-HTTP-2-et-permet-la-synchronisation-de-son-ecran-d-accueil/', 'body' => array( - '//div[@itemprop="articleBody"]', + '//*[@itemprop="articleBody"]', ), 'strip' => array( + '//form', + '//div[@class="content"]/img', + '//a[last()]/following-sibling::*', + '//*[contains(@class,"actuTitle")]', + '//*[contains(@class,"date")]', + '//*[contains(@class,"inlineimg")]', + '//*[@id="signaler"]', + '//*[@id="signalerFrame"]', ) ); \ No newline at end of file diff --git a/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php b/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php index 9246948..9c2526c 100644 --- a/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php +++ b/vendor/fguillot/picofeed/tests/Parser/AtomParserTest.php @@ -124,6 +124,10 @@ class AtomParserTest extends PHPUnit_Framework_TestCase $parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml')); $feed = $parser->execute(); $this->assertEquals(1071340202, $feed->getDate()->getTimestamp(), '', 1); + + $parser = new Atom(file_get_contents('tests/fixtures/duesseldorf_lokalzeit.rdf')); + $feed = $parser->execute(); + $this->assertEquals('2015-01-05', $feed->getDate()->format('Y-m-d')); } public function testFeedLanguage() @@ -193,6 +197,11 @@ class AtomParserTest extends PHPUnit_Framework_TestCase public function testItemDate() { + $parser = new Atom(file_get_contents('tests/fixtures/duesseldorf_lokalzeit.rdf')); + $feed = $parser->execute(); + $this->assertNotEmpty($feed->items); + $this->assertEquals('2015-01-05', $feed->items[4]->getDate()->format('Y-m-d')); + $parser = new Atom(file_get_contents('tests/fixtures/atom.xml')); $feed = $parser->execute(); $this->assertNotEmpty($feed->items); diff --git a/vendor/fguillot/picofeed/tests/Parser/DateParserTest.php b/vendor/fguillot/picofeed/tests/Parser/DateParserTest.php index ab35d0b..6d96c4b 100644 --- a/vendor/fguillot/picofeed/tests/Parser/DateParserTest.php +++ b/vendor/fguillot/picofeed/tests/Parser/DateParserTest.php @@ -12,6 +12,7 @@ class DateParserTest extends PHPUnit_Framework_TestCase date_default_timezone_set('UTC'); + $this->assertEquals('2013-04-12', $parser->getDateTime('Fri, 12 Apr 2013 15:38:15 +0000')->format('Y-m-d')); $this->assertEquals(1359066183, $parser->getDateTime('Thu, 24 Jan 2013 22:23:03 +0000')->getTimestamp(), '', 1); $this->assertEquals(1362992761, $parser->getDateTime('2013-03-11T09:06:01+00:00')->getTimestamp(), '', 1); $this->assertEquals(1363752990, $parser->getDateTime('2013-03-20T04:16:30+00:00')->getTimestamp(), '', 1); diff --git a/vendor/fguillot/picofeed/tests/Parser/Rss20ParserTest.php b/vendor/fguillot/picofeed/tests/Parser/Rss20ParserTest.php index f417a40..0f8d736 100644 --- a/vendor/fguillot/picofeed/tests/Parser/Rss20ParserTest.php +++ b/vendor/fguillot/picofeed/tests/Parser/Rss20ParserTest.php @@ -172,12 +172,12 @@ class Rss20ParserTest extends PHPUnit_Framework_TestCase $parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml')); $feed = $parser->execute(); $this->assertNotEmpty($feed->items); - $this->assertEquals(1357006940, $feed->items[1]->getDate()->getTimestamp()); + $this->assertEquals('2013-01-01', $feed->items[1]->getDate()->format('Y-m-d')); $parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml')); $feed = $parser->execute(); $this->assertNotEmpty($feed->items); - $this->assertEquals(1365781095, $feed->items[0]->getDate()->getTimestamp()); + $this->assertEquals('2013-04-12', $feed->items[0]->getDate()->format('Y-m-d')); } public function testItemLanguage() diff --git a/vendor/fguillot/picofeed/tests/fixtures/duesseldorf_lokalzeit.rdf b/vendor/fguillot/picofeed/tests/fixtures/duesseldorf_lokalzeit.rdf new file mode 100644 index 0000000..2fc2138 --- /dev/null +++ b/vendor/fguillot/picofeed/tests/fixtures/duesseldorf_lokalzeit.rdf @@ -0,0 +1,111 @@ + + + Studio Düsseldorf - NRW-Studios WDR + + + 2015-01-05T08:18:00Z + 2015-01-05T08:18:00Z + + Lokalzeit aus Düsseldorf: Unsere Themen am Montag, 02.03.2015 + + + NRW-Studios + + http://www1.wdr.de/studio/duesseldorf/lokalzeit/studioduesseldorf-lokalzeit100.html + 2015-02-05T11:15:00Z + 2015-02-05T11:15:00Z + Umstrittene Dügida-Urteile<br/><br/>Ein preisgekröntes Fachwerkhaus + Umstrittene Dügida-UrteileEin preisgekröntes Fachwerkhaus + NRW-Studios + 2015-02-05T11:15:00Z + Nachricht + + + Neues Kennzeichen im Kreis Viersen: Großes Interesse an „KK“ + + + NRW-Studios + + http://www1.wdr.de/studio/duesseldorf/themadestages/kennzeichen-kreis-viersen100.html + 2015-03-02T09:01:00Z + 2015-03-02T09:01:00Z + Bürger im Kreis Viersen können ihre Autos ab sofort wieder mit dem früheren Kennzeichen KK zulassen. Rund 7.000 Mal sind bereits im Vorfeld Wunschkennzeichen reserviert worden. Am Morgen bildeten sich vor dem Straßenverkehrsamt in Kempen bereits längere Schlangen. + Bürger im Kreis Viersen können ihre Autos ab sofort wieder mit dem früheren Kennzeichen KK zulassen. Rund 7.000 Mal sind bereits im Vorfeld Wunschkennzeichen reserviert worden. Am Morgen bildeten sich vor dem Straßenverkehrsamt in Kempen bereits längere Schlangen. + NRW-Studios + 2015-03-02T09:01:00Z + Nachricht + + + Tarifstreit: Eine Woche voller Streiks + + + NRW-Studios + + http://www1.wdr.de/studio/essen/themadestages/streikwoche100.html + 2015-03-02T13:15:00Z + 2015-03-02T13:15:00Z + Geduld ist in dieser Woche an vielen Krankenhäusern, aber auch an Gerichten und bei Behörden im Ruhrgebiet gefragt. Die Gewerkschaft ver.di hat die Angestellten im öffentlichen Dienst zu Warnstreiks aufgerufen. Von morgen an legen auch angestellte Lehrer ihre Arbeit nieder. + Geduld ist in dieser Woche an vielen Krankenhäusern, aber auch an Gerichten und bei Behörden im Ruhrgebiet gefragt. Die Gewerkschaft ver.di hat die Angestellten im öffentlichen Dienst zu Warnstreiks aufgerufen. Von morgen an legen auch angestellte Lehrer ihre Arbeit nieder. + NRW-Studios + 2015-03-02T13:15:00Z + Nachricht + + + Die neue WDR-App macht vieles möglich: Filme gucken, Bilder schicken + + + NRW-Studios + + http://www1.wdr.de/studio/duesseldorf/themadestages/wdr-app100.html + 2015-02-13T15:06:00Z + 2015-02-13T15:06:00Z + Mit der neuen WDR-App können Sie Fotos, Videos, Texte und Audio-Aufnahmen direkt an den WDR schicken. Und: Holen Sie sich alle WDR Hörfunkprogramme und das WDR Fernsehen auf Ihr Smartphone oder Tablet! + Mit der neuen WDR-App können Sie Fotos, Videos, Texte und Audio-Aufnahmen direkt an den WDR schicken. Und: Holen Sie sich alle WDR Hörfunkprogramme und das WDR Fernsehen auf Ihr Smartphone oder Tablet! + NRW-Studios + 2015-02-13T15:06:00Z + Nachricht + + + Die Lokalzeit Düsseldorf bei Facebook: Bleiben Sie mit uns in Kontakt! + + + NRW-Studios + + https://www.facebook.com/wdrlokalzeitduesseldorf + Halb acht am Abend, von Montag bis Freitag - ihre Lokalzeit aus Düsseldorf. Alles Wichtige vom Tag gibt’s bei uns. Über die Themen aus Düsseldorf und der Region diskutieren wir mit Ihnen außerdem auf unserer Facebook-Seite. + Halb acht am Abend, von Montag bis Freitag - ihre Lokalzeit aus Düsseldorf. Alles Wichtige vom Tag gibt’s bei uns. Über die Themen aus Düsseldorf und der Region diskutieren wir mit Ihnen außerdem auf unserer Facebook-Seite. + NRW-Studios + Nachricht + + + Beiträge aus dem Studio Düsseldorf: Ihre Region im Überblick + + + NRW-Studios + + http://www1.wdr.de/studio/duesseldorf/themadestages/archiv/themadestages-duesseldorf104.html + 2015-01-19T08:58:00Z + 2015-01-19T08:58:00Z + Hier finden Sie die wichtigsten Themen, über die wir in den vergangenen Tagen und Wochen berichtet haben, nochmal zum Nachlesen, - hören und -schauen. + Hier finden Sie die wichtigsten Themen, über die wir in den vergangenen Tagen und Wochen berichtet haben, nochmal zum Nachlesen, - hören und -schauen. + NRW-Studios + 2015-01-19T08:58:00Z + Nachricht + + + Alles tanzt - rund um Düsseldorf: Die schönsten Bilder und Videos + + + NRW-Studios + + http://www1.wdr.de/studio/duesseldorf/lokalzeit/studioduesseldorf_tanzaktion100.html + 2013-11-22T15:55:00Z + 2013-11-22T15:55:00Z + In unserer Weihnachtsaktion wollten wir mit Ihnen gemeinsam tanzen. Sie haben mitgemacht und uns dabei wirklich beeindruckt! Eishockeyspieler, Gärtner, Rollkunstläufer oder Busfahrer - alle haben sie zusammen mit unserer Reporterin Regina Bremer getanzt. + In unserer Weihnachtsaktion wollten wir mit Ihnen gemeinsam tanzen. Sie haben mitgemacht und uns dabei wirklich beeindruckt! Eishockeyspieler, Gärtner, Rollkunstläufer oder Busfahrer - alle haben sie zusammen mit unserer Reporterin Regina Bremer getanzt. + NRW-Studios + 2013-11-22T15:55:00Z + Nachricht + + +