update picoFeed to f3ed9fe and use icon from atom feeds as favicon
This commit is contained in:
parent
1c68dd4727
commit
7c31b9fff0
@ -29,12 +29,12 @@ function store_favicon($feed_id, $link, $icon)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Download favicon
|
// Download favicon
|
||||||
function fetch_favicon($feed_id, $site_url)
|
function fetch_favicon($feed_id, $site_url, $icon_link)
|
||||||
{
|
{
|
||||||
if (Config\get('favicons') == 1 && ! has_favicon($feed_id)) {
|
if (Config\get('favicons') == 1 && ! has_favicon($feed_id)) {
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
|
|
||||||
$link = $favicon->find($site_url);
|
$link = $favicon->find($site_url, $icon_link);
|
||||||
$icon = $favicon->getDataUri();
|
$icon = $favicon->getDataUri();
|
||||||
|
|
||||||
if ($icon !== '') {
|
if ($icon !== '') {
|
||||||
@ -189,7 +189,7 @@ function create($url, $enable_grabber = false, $force_rtl = false)
|
|||||||
$feed_id = $db->getConnection()->getLastId();
|
$feed_id = $db->getConnection()->getLastId();
|
||||||
|
|
||||||
Item\update_all($feed_id, $feed->getItems());
|
Item\update_all($feed_id, $feed->getItems());
|
||||||
fetch_favicon($feed_id, $feed->getSiteUrl());
|
fetch_favicon($feed_id, $feed->getSiteUrl(), $feed->getIcon());
|
||||||
|
|
||||||
Config\write_debug();
|
Config\write_debug();
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ function refresh($feed_id)
|
|||||||
update_cache($feed_id, $resource->getLastModified(), $resource->getEtag());
|
update_cache($feed_id, $resource->getLastModified(), $resource->getEtag());
|
||||||
|
|
||||||
Item\update_all($feed_id, $feed->getItems());
|
Item\update_all($feed_id, $feed->getItems());
|
||||||
fetch_favicon($feed_id, $feed->getSiteUrl());
|
fetch_favicon($feed_id, $feed->getSiteUrl(), $feed->getIcon());
|
||||||
}
|
}
|
||||||
|
|
||||||
update_parsing_error($feed_id, 0);
|
update_parsing_error($feed_id, 0);
|
||||||
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
||||||
|
|
||||||
return ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca::getLoader();
|
return ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb::getLoader();
|
||||||
|
10
vendor/composer/autoload_real.php
vendored
10
vendor/composer/autoload_real.php
vendored
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
// autoload_real.php @generated by Composer
|
// autoload_real.php @generated by Composer
|
||||||
|
|
||||||
class ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca
|
class ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb
|
||||||
{
|
{
|
||||||
private static $loader;
|
private static $loader;
|
||||||
|
|
||||||
@ -19,9 +19,9 @@ class ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca
|
|||||||
return self::$loader;
|
return self::$loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
spl_autoload_register(array('ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca', 'loadClassLoader'), true, true);
|
spl_autoload_register(array('ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb', 'loadClassLoader'), true, true);
|
||||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||||
spl_autoload_unregister(array('ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca', 'loadClassLoader'));
|
spl_autoload_unregister(array('ComposerAutoloaderInitdd123afa0ab8d569c051c35ab70311cb', 'loadClassLoader'));
|
||||||
|
|
||||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||||
foreach ($map as $namespace => $path) {
|
foreach ($map as $namespace => $path) {
|
||||||
@ -42,14 +42,14 @@ class ComposerAutoloaderInit1aea6e0e97930d7617e83f53a5287aca
|
|||||||
|
|
||||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||||
foreach ($includeFiles as $file) {
|
foreach ($includeFiles as $file) {
|
||||||
composerRequire1aea6e0e97930d7617e83f53a5287aca($file);
|
composerRequiredd123afa0ab8d569c051c35ab70311cb($file);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $loader;
|
return $loader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function composerRequire1aea6e0e97930d7617e83f53a5287aca($file)
|
function composerRequiredd123afa0ab8d569c051c35ab70311cb($file)
|
||||||
{
|
{
|
||||||
require $file;
|
require $file;
|
||||||
}
|
}
|
||||||
|
4
vendor/composer/installed.json
vendored
4
vendor/composer/installed.json
vendored
@ -162,12 +162,12 @@
|
|||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/fguillot/picoFeed.git",
|
"url": "https://github.com/fguillot/picoFeed.git",
|
||||||
"reference": "d3785fc54d0bf9d521fd85e369cc5600f66099cc"
|
"reference": "f3ed9fef18b4cd0d25a1fd389c8a2e2370bcb51b"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/d3785fc54d0bf9d521fd85e369cc5600f66099cc",
|
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/d3785fc54d0bf9d521fd85e369cc5600f66099cc",
|
||||||
"reference": "d3785fc54d0bf9d521fd85e369cc5600f66099cc",
|
"reference": "f3ed9fef18b4cd0d25a1fd389c8a2e2370bcb51b",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
15
vendor/fguillot/picofeed/docs/favicon.markdown
vendored
15
vendor/fguillot/picofeed/docs/favicon.markdown
vendored
@ -21,6 +21,21 @@ PicoFeed will try first to find the favicon from the meta tags and fallback to t
|
|||||||
|
|
||||||
When the HTML page is parsed, relative links and protocol relative links are converted to absolute url.
|
When the HTML page is parsed, relative links and protocol relative links are converted to absolute url.
|
||||||
|
|
||||||
|
Download a know favicon
|
||||||
|
-----------------------
|
||||||
|
It's possible to download a known favicon using the second optional parameter of Favicon::find(). The link to the favicon can be a relative or protocol relative url as well, but it has to be relative to the specified website.
|
||||||
|
|
||||||
|
If the requested favicon could not be found, the HTML of the website is parsed instead, with the fallback to the `favicon.ico` located in the website's root.
|
||||||
|
|
||||||
|
```php
|
||||||
|
use PicoFeed\Reader\Favicon;
|
||||||
|
|
||||||
|
$favicon = new Favicon;
|
||||||
|
|
||||||
|
$icon_link = $favicon->find('https://en.wikipedia.org/','https://bits.wikimedia.org/favicon/wikipedia.ico');
|
||||||
|
$icon_content = $favicon->getContent();
|
||||||
|
```
|
||||||
|
|
||||||
Get Favicon file type
|
Get Favicon file type
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
@ -183,6 +183,7 @@ class Curl extends Client
|
|||||||
curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeaders'));
|
curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeaders'));
|
||||||
curl_setopt($ch, CURLOPT_COOKIEJAR, 'php://memory');
|
curl_setopt($ch, CURLOPT_COOKIEJAR, 'php://memory');
|
||||||
curl_setopt($ch, CURLOPT_COOKIEFILE, 'php://memory');
|
curl_setopt($ch, CURLOPT_COOKIEFILE, 'php://memory');
|
||||||
|
curl_setopt($ch, CURLOPT_SSLVERSION, 1); // Enforce TLS v1
|
||||||
|
|
||||||
$ch = $this->prepareProxyContext($ch);
|
$ch = $this->prepareProxyContext($ch);
|
||||||
$ch = $this->prepareAuthContext($ch);
|
$ch = $this->prepareAuthContext($ch);
|
||||||
|
@ -171,6 +171,35 @@ class Grabber
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get URL to download.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getUrl()
|
||||||
|
{
|
||||||
|
return $this->url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set URL to download and reset object to use for another grab.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param string $url URL
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function setUrl($url)
|
||||||
|
{
|
||||||
|
$this->url = $url;
|
||||||
|
$this->html = "";
|
||||||
|
$this->content = "";
|
||||||
|
$this->encoding = "";
|
||||||
|
|
||||||
|
$this->handleFiles();
|
||||||
|
$this->handleStreamingVideos();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get relevant content
|
* Get relevant content
|
||||||
*
|
*
|
||||||
@ -284,7 +313,7 @@ class Grabber
|
|||||||
*/
|
*/
|
||||||
public function download()
|
public function download()
|
||||||
{
|
{
|
||||||
if (! $this->skip_processing) {
|
if (! $this->skip_processing && $this->url != '') {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
@ -74,6 +74,18 @@ class Atom extends Parser
|
|||||||
$feed->logo = (string) $xml->logo;
|
$feed->logo = (string) $xml->logo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the feed icon
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param SimpleXMLElement $xml Feed xml
|
||||||
|
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||||
|
*/
|
||||||
|
public function findFeedIcon(SimpleXMLElement $xml, Feed $feed)
|
||||||
|
{
|
||||||
|
$feed->icon = (string) $xml->icon;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the feed title
|
* Find the feed title
|
||||||
*
|
*
|
||||||
|
@ -75,13 +75,21 @@ class Feed
|
|||||||
public $language = '';
|
public $language = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Feed logo URL (not the same as icon)
|
* Feed logo URL
|
||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
public $logo = '';
|
public $logo = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Feed icon URL
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $icon = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return feed information
|
* Return feed information
|
||||||
*
|
*
|
||||||
@ -140,6 +148,17 @@ class Feed
|
|||||||
return $this->logo;
|
return $this->logo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the icon url
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* $return string
|
||||||
|
*/
|
||||||
|
public function getIcon()
|
||||||
|
{
|
||||||
|
return $this->icon;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get feed url
|
* Get feed url
|
||||||
*
|
*
|
||||||
|
@ -149,6 +149,7 @@ abstract class Parser
|
|||||||
$this->findFeedId($xml, $feed);
|
$this->findFeedId($xml, $feed);
|
||||||
$this->findFeedDate($xml, $feed);
|
$this->findFeedDate($xml, $feed);
|
||||||
$this->findFeedLogo($xml, $feed);
|
$this->findFeedLogo($xml, $feed);
|
||||||
|
$this->findFeedIcon($xml, $feed);
|
||||||
|
|
||||||
foreach ($this->getItemsTree($xml) as $entry) {
|
foreach ($this->getItemsTree($xml) as $entry) {
|
||||||
|
|
||||||
@ -549,6 +550,15 @@ abstract class Parser
|
|||||||
*/
|
*/
|
||||||
public abstract function findFeedLogo(SimpleXMLElement $xml, Feed $feed);
|
public abstract function findFeedLogo(SimpleXMLElement $xml, Feed $feed);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the feed icon
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param SimpleXMLElement $xml Feed xml
|
||||||
|
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||||
|
*/
|
||||||
|
public abstract function findFeedIcon(SimpleXMLElement $xml, Feed $feed);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the path to the items XML tree
|
* Get the path to the items XML tree
|
||||||
*
|
*
|
||||||
|
@ -76,6 +76,18 @@ class Rss20 extends Parser
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the feed icon
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param SimpleXMLElement $xml Feed xml
|
||||||
|
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||||
|
*/
|
||||||
|
public function findFeedIcon(SimpleXMLElement $xml, Feed $feed)
|
||||||
|
{
|
||||||
|
$feed->icon = '';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the feed title
|
* Find the feed title
|
||||||
*
|
*
|
||||||
|
@ -157,17 +157,21 @@ class Favicon
|
|||||||
*
|
*
|
||||||
* @access public
|
* @access public
|
||||||
* @param string $website_link URL
|
* @param string $website_link URL
|
||||||
|
* @param string $favicon_link optional URL
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function find($website_link)
|
public function find($website_link, $favicon_link = '')
|
||||||
{
|
{
|
||||||
$website = new Url($website_link);
|
$website = new Url($website_link);
|
||||||
|
|
||||||
$icons = $this->extract($this->download($website->getBaseUrl('/'))->getContent());
|
if ($favicon_link !== '') {
|
||||||
$icons[] = $website->getBaseUrl('/favicon.ico');
|
$icons = array($favicon_link);
|
||||||
|
} else {
|
||||||
|
$icons = $this->extract($this->download($website->getBaseUrl('/'))->getContent());
|
||||||
|
$icons[] = $website->getBaseUrl('/favicon.ico');
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($icons as $icon_link) {
|
foreach ($icons as $icon_link) {
|
||||||
|
|
||||||
$icon_link = $this->convertLink($website, new Url($icon_link));
|
$icon_link = $this->convertLink($website, new Url($icon_link));
|
||||||
$resource = $this->download($icon_link);
|
$resource = $this->download($icon_link);
|
||||||
$this->content = $resource->getContent();
|
$this->content = $resource->getContent();
|
||||||
@ -175,6 +179,8 @@ class Favicon
|
|||||||
|
|
||||||
if ($this->content !== '') {
|
if ($this->content !== '') {
|
||||||
return $icon_link;
|
return $icon_link;
|
||||||
|
} elseif ($favicon_link !== '') {
|
||||||
|
return $this->find($website_link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'test_url' => 'http://www.allgemeine-zeitung.de/lokales/polizei/zweimal-totalschaden-nach-unfaellen-auf-eisglatten-fahrbahnen-bei-mainz-und-bei-bad-sobernheim-mit-baeumen-kollidiert_14904737.htm',
|
'test_url' => 'http://www.allgemeine-zeitung.de/lokales/polizei/mainz-gonsenheim-unbekannte-rauben-esso-tankstelle-in-kurt-schumacher-strasse-aus_14913147.htm',
|
||||||
'body' => array(
|
'body' => array(
|
||||||
'//div[contains(@class, "article")][1]',
|
'//div[contains(@class, "article")][1]',
|
||||||
),
|
),
|
||||||
'strip' => array(
|
'strip' => array(
|
||||||
'//read/h1',
|
'//read/h1',
|
||||||
|
'//*[@id="t-map"]',
|
||||||
|
'//*[contains(@class, "modules")]',
|
||||||
'//*[contains(@class, "adsense")]',
|
'//*[contains(@class, "adsense")]',
|
||||||
'//*[contains(@class, "linkbox")]',
|
'//*[contains(@class, "linkbox")]',
|
||||||
'//*[contains(@class, "info")]',
|
'//*[contains(@class, "info")]',
|
||||||
'//*[@class="skip"]',
|
'//*[@class="skip"]',
|
||||||
'//*[@class="funcs"]',
|
'//*[@class="funcs"]',
|
||||||
|
'//span[@class="nd address"]',
|
||||||
'//a[contains(@href, "abo-und-services")]'
|
'//a[contains(@href, "abo-und-services")]'
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -36,6 +36,14 @@ class GrabberTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertTrue(is_array($grabber->getRules()));
|
$this->assertTrue(is_array($grabber->getRules()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 01net.com - https://github.com/fguillot/miniflux/issues/267
|
||||||
|
public function testGetRules_afterRedirection()
|
||||||
|
{
|
||||||
|
$grabber = new Grabber('http://rss.feedsportal.com/c/629/f/502199/s/422f8c8a/sc/44/l/0L0S0A1net0N0Ceditorial0C640A3130Cces0E20A150Eimprimer0Eune0Epizza0Eet0Edes0Ebiscuits0Evideo0C0T0Dxtor0FRSS0E16/story01.htm');
|
||||||
|
$grabber->download();
|
||||||
|
$this->assertTrue(is_array($grabber->getRules()));
|
||||||
|
}
|
||||||
|
|
||||||
public function testGrabContent()
|
public function testGrabContent()
|
||||||
{
|
{
|
||||||
$grabber = new Grabber('http://www.egscomics.com/index.php?id=1690');
|
$grabber = new Grabber('http://www.egscomics.com/index.php?id=1690');
|
||||||
|
@ -14,6 +14,10 @@ class FilterTest extends PHPUnit_Framework_TestCase
|
|||||||
$expected = '<html><body><h1>boo</h1></body>';
|
$expected = '<html><body><h1>boo</h1></body>';
|
||||||
$this->assertEquals($expected, Filter::stripHeadTags($input));
|
$this->assertEquals($expected, Filter::stripHeadTags($input));
|
||||||
|
|
||||||
|
$input = file_get_contents('tests/fixtures/html4_page.html');
|
||||||
|
$expected = file_get_contents('tests/fixtures/html4_head_stripped_page.html');
|
||||||
|
$this->assertEquals($expected, Filter::stripHeadTags($input));
|
||||||
|
|
||||||
$input = file_get_contents('tests/fixtures/html_page.html');
|
$input = file_get_contents('tests/fixtures/html_page.html');
|
||||||
$expected = file_get_contents('tests/fixtures/html_head_stripped_page.html');
|
$expected = file_get_contents('tests/fixtures/html_head_stripped_page.html');
|
||||||
$this->assertEquals($expected, Filter::stripHeadTags($input));
|
$this->assertEquals($expected, Filter::stripHeadTags($input));
|
||||||
|
@ -47,6 +47,17 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('http://www.bbc.co.uk/urdu/images/gel/rss_logo.gif', $feed->getLogo());
|
$this->assertEquals('http://www.bbc.co.uk/urdu/images/gel/rss_logo.gif', $feed->getLogo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFeedIcon()
|
||||||
|
{
|
||||||
|
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||||
|
$feed = $parser->execute();
|
||||||
|
$this->assertEquals('', $feed->getIcon());
|
||||||
|
|
||||||
|
$parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml'));
|
||||||
|
$feed = $parser->execute();
|
||||||
|
$this->assertEquals('http://www.la-grange.net/favicon.png', $feed->getIcon());
|
||||||
|
}
|
||||||
|
|
||||||
public function testFeedUrl()
|
public function testFeedUrl()
|
||||||
{
|
{
|
||||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||||
|
@ -11,137 +11,218 @@ class FaviconTest extends PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
|
|
||||||
$html = '<!DOCTYPE html><html><head>
|
|
||||||
<link rel="shortcut icon" href="http://example.com/myicon.ico" />
|
|
||||||
</head><body><p>boo</p></body></html>';
|
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
|
|
||||||
|
|
||||||
$html = '<!DOCTYPE html><html><head>
|
$html = '<!DOCTYPE html><html><head>
|
||||||
<link rel="icon" href="http://example.com/myicon.ico" />
|
<link rel="icon" href="http://example.com/myicon.ico" />
|
||||||
</head><body><p>boo</p></body></html>';
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
|
$this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
|
||||||
|
|
||||||
|
// multiple values in rel attribute
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link rel="shortcut icon" href="http://example.com/myicon.ico" />
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
|
||||||
|
|
||||||
|
// icon part of another string
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link rel="fluid-icon" href="http://example.com/myicon.ico" />
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$this->assertEquals(array('http://example.com/myicon.ico'), $favicon->extract($html));
|
||||||
|
|
||||||
|
// with other attributes present
|
||||||
$html = '<!DOCTYPE html><html><head>
|
$html = '<!DOCTYPE html><html><head>
|
||||||
<link rel="icon" type="image/vnd.microsoft.icon" href="http://example.com/image.ico" />
|
<link rel="icon" type="image/vnd.microsoft.icon" href="http://example.com/image.ico" />
|
||||||
</head><body><p>boo</p></body></html>';
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html));
|
$this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html));
|
||||||
|
|
||||||
|
// ignore icon in other attribute
|
||||||
$html = '<!DOCTYPE html><html><head>
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link type="icon" href="http://example.com/image.ico" />
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
// ignores apple icon
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link rel="apple-touch-icon" href="assets/img/touch-icon-iphone.png">
|
||||||
<link rel="icon" type="image/png" href="http://example.com/image.png" />
|
<link rel="icon" type="image/png" href="http://example.com/image.png" />
|
||||||
</head><body><p>boo</p></body></html>';
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/image.png'), $favicon->extract($html));
|
$this->assertEquals(array('http://example.com/image.png'), $favicon->extract($html));
|
||||||
|
|
||||||
|
// allows multiple icons
|
||||||
$html = '<!DOCTYPE html><html><head>
|
$html = '<!DOCTYPE html><html><head>
|
||||||
<link rel="icon" type="image/gif" href="http://example.com/image.gif" />
|
|
||||||
</head><body><p>boo</p></body></html>';
|
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/image.gif'), $favicon->extract($html));
|
|
||||||
|
|
||||||
$html = '<!DOCTYPE html><html><head>
|
|
||||||
<link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/>
|
|
||||||
</head><body><p>boo</p></body></html>';
|
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/image.ico'), $favicon->extract($html));
|
|
||||||
|
|
||||||
$html = '<!DOCTYPE html><html><head>
|
|
||||||
<link rel="apple-touch-icon" href="assets/img/touch-icon-iphone.png">
|
|
||||||
<link rel="icon" type="image/png" href="http://example.com/image.png" />
|
<link rel="icon" type="image/png" href="http://example.com/image.png" />
|
||||||
<link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/>
|
<link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/>
|
||||||
</head><body><p>boo</p></body></html>';
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
$this->assertEquals(array('http://example.com/image.png', 'http://example.com/image.ico'), $favicon->extract($html));
|
$this->assertEquals(array('http://example.com/image.png', 'http://example.com/image.ico'), $favicon->extract($html));
|
||||||
|
|
||||||
|
// empty array with broken html
|
||||||
|
$html = '!DOCTYPE html html head
|
||||||
|
link rel="icon" type="image/png" href="http://example.com/image.png" /
|
||||||
|
link rel="icon" type="image/x-icon" href="http://example.com/image.ico"/
|
||||||
|
/head body /p boo /p body /html';
|
||||||
|
|
||||||
|
$this->assertEquals(array(), $favicon->extract($html));
|
||||||
|
|
||||||
|
// empty array on no input
|
||||||
|
$this->assertEquals(array(), $favicon->extract(''));
|
||||||
|
|
||||||
|
// empty array on no icon found
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$this->assertEquals(array(), $favicon->extract($html));
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
public function testHasFile()
|
public function testExists()
|
||||||
{
|
{
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
|
|
||||||
$this->assertTrue($favicon->exists('https://en.wikipedia.org/favicon.ico'));
|
$this->assertTrue($favicon->exists('https://en.wikipedia.org/favicon.ico'));
|
||||||
$this->assertFalse($favicon->exists('http://minicoders.com/favicon.ico'));
|
$this->assertFalse($favicon->exists('http://minicoders.com/favicon.ico'));
|
||||||
$this->assertFalse($favicon->exists('http://blabla'));
|
$this->assertFalse($favicon->exists('http://blabla'));
|
||||||
|
$this->assertFalse($favicon->exists(''));
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
public function testConvertLink()
|
public function testConvertLink()
|
||||||
{
|
{
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
|
|
||||||
|
// relative link
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'http://miniflux.net/assets/img/favicon.png',
|
'http://miniflux.net/assets/img/favicon.png',
|
||||||
$favicon->convertLink(new Url('http://miniflux.net'), new Url('assets/img/favicon.png'))
|
$favicon->convertLink(new Url('http://miniflux.net'), new Url('assets/img/favicon.png'))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// relative link + HTTPS
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'https://miniflux.net/assets/img/favicon.png',
|
'https://miniflux.net/assets/img/favicon.png',
|
||||||
$favicon->convertLink(new Url('https://miniflux.net'), new Url('assets/img/favicon.png'))
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url('assets/img/favicon.png'))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// absolute link
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://miniflux.net/assets/img/favicon.png',
|
||||||
|
$favicon->convertLink(new Url('http://miniflux.net'), new Url('/assets/img/favicon.png'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// absolute link + HTTPS
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://miniflux.net/assets/img/favicon.png',
|
||||||
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url('/assets/img/favicon.png'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// Protocol relative link
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'http://google.com/assets/img/favicon.png',
|
'http://google.com/assets/img/favicon.png',
|
||||||
$favicon->convertLink(new Url('http://miniflux.net'), new Url('//google.com/assets/img/favicon.png'))
|
$favicon->convertLink(new Url('http://miniflux.net'), new Url('//google.com/assets/img/favicon.png'))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Protocol relative link + HTTPS
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'https://google.com/assets/img/favicon.png',
|
'https://google.com/assets/img/favicon.png',
|
||||||
$favicon->convertLink(new Url('https://miniflux.net'), new Url('//google.com/assets/img/favicon.png'))
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url('//google.com/assets/img/favicon.png'))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// URL same fqdn
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://miniflux.net/assets/img/favicon.png',
|
||||||
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url('http://miniflux.net/assets/img/favicon.png'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// URL different fqdn
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://www.google.com/assets/img/favicon.png',
|
||||||
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url('https://www.google.com/assets/img/favicon.png'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// HTTPS URL
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://miniflux.net/assets/img/favicon.png',
|
||||||
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url('https://miniflux.net/assets/img/favicon.png'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// empty string on missing website parameter
|
||||||
|
$this->assertEquals(
|
||||||
|
'',
|
||||||
|
$favicon->convertLink(new Url(''), new Url('favicon.png'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// website only on missing icon parameter
|
||||||
|
$this->assertEquals(
|
||||||
|
'https://miniflux.net/',
|
||||||
|
$favicon->convertLink(new Url('https://miniflux.net'), new Url(''))
|
||||||
|
);
|
||||||
|
|
||||||
|
// empty string on missing website and icon parameter
|
||||||
|
$this->assertEquals(
|
||||||
|
'',
|
||||||
|
$favicon->convertLink(new Url(''), new Url(''))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFind()
|
public function testFind_inMeta()
|
||||||
{
|
{
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
|
|
||||||
// Relative favicon in html
|
// favicon in meta
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'http://miniflux.net/assets/img/favicon.png',
|
'http://miniflux.net/assets/img/favicon.png',
|
||||||
$favicon->find('http://miniflux.net')
|
$favicon->find('http://miniflux.net')
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertNotEmpty($favicon->getContent());
|
$this->assertNotEmpty($favicon->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
// Absolute html favicon
|
// public function testFind_inRootDir()
|
||||||
$this->assertEquals(
|
// {
|
||||||
'http://php.net/favicon.ico',
|
// // favicon not in meta, only in website root (need example page)
|
||||||
$favicon->find('http://php.net/parse_url')
|
// $favicon = new Favicon;
|
||||||
);
|
//
|
||||||
|
// $this->assertEquals(
|
||||||
|
// 'http://minicoders.com/favicon.ico',
|
||||||
|
// $favicon->find('http://minicoders.com')
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
$this->assertNotEmpty($favicon->getContent());
|
public function testFind_noIcons()
|
||||||
|
{
|
||||||
|
$favicon = new Favicon;
|
||||||
|
|
||||||
// Protocol relative favicon
|
|
||||||
$this->assertEquals(
|
|
||||||
'https://bits.wikimedia.org/favicon/wikipedia.ico',
|
|
||||||
$favicon->find('https://en.wikipedia.org/')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertNotEmpty($favicon->getContent());
|
|
||||||
|
|
||||||
// fluid-icon + https
|
|
||||||
$this->assertEquals(
|
|
||||||
'https://github.com/fluidicon.png',
|
|
||||||
$favicon->find('https://github.com')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertNotEmpty($favicon->getContent());
|
|
||||||
|
|
||||||
// favicon in meta
|
|
||||||
$this->assertEquals(
|
|
||||||
'http://www.microsoft.com/favicon.ico?v2',
|
|
||||||
$favicon->find('http://www.microsoft.com')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertNotEmpty($favicon->getContent());
|
|
||||||
|
|
||||||
// no icon
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'',
|
'',
|
||||||
$favicon->find('http://minicoders.com/favicon.ico')
|
$favicon->find('http://minicoders.com')
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEmpty($favicon->getContent());
|
$this->assertEmpty($favicon->getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFind_directLinkFirst()
|
||||||
|
{
|
||||||
|
$favicon = new Favicon;
|
||||||
|
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://miniflux.net/assets/img/touch-icon-ipad.png',
|
||||||
|
$favicon->find('http://miniflux.net', '/assets/img/touch-icon-ipad.png')
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertNotEmpty($favicon->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_fallsBackToExtract()
|
||||||
|
{
|
||||||
|
$favicon = new Favicon;
|
||||||
|
$this->assertEquals(
|
||||||
|
'http://miniflux.net/assets/img/favicon.png',
|
||||||
|
$favicon->find('http://miniflux.net','/nofavicon.ico')
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertNotEmpty($favicon->getContent());
|
||||||
|
}
|
||||||
|
|
||||||
public function testDataUri()
|
public function testDataUri()
|
||||||
{
|
{
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
@ -156,7 +237,7 @@ class FaviconTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals($expected, $favicon->getDataUri());
|
$this->assertEquals($expected, $favicon->getDataUri());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDataUriWithBadContentType()
|
public function testDataUri_withBadContentType()
|
||||||
{
|
{
|
||||||
$favicon = new Favicon;
|
$favicon = new Favicon;
|
||||||
$this->assertNotEmpty($favicon->find('http://www.lemonde.fr/'));
|
$this->assertNotEmpty($favicon->find('http://www.lemonde.fr/'));
|
||||||
|
148
vendor/fguillot/picofeed/tests/Reader/ReaderTest.php
vendored
148
vendor/fguillot/picofeed/tests/Reader/ReaderTest.php
vendored
@ -15,14 +15,21 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('https://google.com', $reader->prependScheme('https://google.com'));
|
$this->assertEquals('https://google.com', $reader->prependScheme('https://google.com'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDownload()
|
public function testDownload_withHTTP()
|
||||||
{
|
{
|
||||||
$reader = new Reader;
|
$reader = new Reader;
|
||||||
$feed = $reader->download('http://wordpress.org/news/feed/')->getContent();
|
$feed = $reader->download('http://wordpress.org/news/feed/')->getContent();
|
||||||
$this->assertNotEmpty($feed);
|
$this->assertNotEmpty($feed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDownloadWithCache()
|
public function testDownload_withHTTPS()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
$feed = $reader->download('https://wordpress.org/news/feed/')->getContent();
|
||||||
|
$this->assertNotEmpty($feed);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDownload_withCache()
|
||||||
{
|
{
|
||||||
$reader = new Reader;
|
$reader = new Reader;
|
||||||
$resource = $reader->download('http://linuxfr.org/robots.txt');
|
$resource = $reader->download('http://linuxfr.org/robots.txt');
|
||||||
@ -78,30 +85,129 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('Rss20', $reader->detectFormat($content));
|
$this->assertEquals('Rss20', $reader->detectFormat($content));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFind()
|
public function testFind_rssFeed()
|
||||||
{
|
{
|
||||||
$reader = new Reader;
|
$reader = new Reader;
|
||||||
$resource = $reader->download('http://miniflux.net/');
|
|
||||||
$feeds = $reader->find($resource->getUrl(), $resource->getContent());
|
|
||||||
$this->assertTrue(is_array($feeds));
|
|
||||||
$this->assertNotEmpty($feeds);
|
|
||||||
$this->assertEquals('http://miniflux.net/feed', $feeds[0]);
|
|
||||||
|
|
||||||
$reader = new Reader;
|
$html = '<!DOCTYPE html><html><head>
|
||||||
$resource = $reader->download('http://www.bbc.com/news/');
|
<link type="application/rss+xml" href="http://miniflux.net/feed">
|
||||||
$feeds = $reader->find($resource->getUrl(), $resource->getContent());
|
</head><body><p>boo</p></body></html>';
|
||||||
$this->assertTrue(is_array($feeds));
|
|
||||||
$this->assertNotEmpty($feeds);
|
|
||||||
$this->assertEquals('http://feeds.bbci.co.uk/news/rss.xml', $feeds[0]);
|
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
|
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_atomFeed()
|
||||||
|
{
|
||||||
$reader = new Reader;
|
$reader = new Reader;
|
||||||
$resource = $reader->download('http://www.cnn.com/services/rss/');
|
|
||||||
$feeds = $reader->find($resource->getUrl(), $resource->getContent());
|
$html = '<!DOCTYPE html><html><head>
|
||||||
$this->assertTrue(is_array($feeds));
|
<link type="application/atom+xml" href="http://miniflux.net/feed">
|
||||||
$this->assertNotEmpty($feeds);
|
</head><body><p>boo</p></body></html>';
|
||||||
$this->assertTrue(count($feeds) > 1);
|
|
||||||
$this->assertEquals('http://rss.cnn.com/rss/cnn_topstories.rss', $feeds[0]);
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
$this->assertEquals('http://rss.cnn.com/rss/cnn_world.rss', $feeds[1]);
|
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_feedNotInHead()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '<!DOCTYPE html><html><head></head>
|
||||||
|
<body>
|
||||||
|
<link type="application/atom+xml" href="http://miniflux.net/feed">
|
||||||
|
<p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
|
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_noFeedPresent()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
|
$this->assertEquals(array(), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_ignoreUnknownType()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link type="application/flux+xml" href="http://miniflux.net/feed">
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
|
$this->assertEquals(array(), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_ignoreTypeInOtherAttribute()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link rel="application/rss+xml" href="http://miniflux.net/feed">
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
|
$this->assertEquals(array(), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_withOtherAttributesPresent()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://miniflux.net/feed">
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', $html);
|
||||||
|
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_multipleFeeds()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '<!DOCTYPE html><html><head>
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="CNN International: Top Stories" href="http://rss.cnn.com/rss/edition.rss"/>
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="Connect The World" href="http://rss.cnn.com/rss/edition_connecttheworld.rss"/>
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="World Sport" href="http://rss.cnn.com/rss/edition_worldsportblog.rss"/>
|
||||||
|
</head><body><p>boo</p></body></html>';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://www.cnn.com/services/rss/', $html);
|
||||||
|
$this->assertEquals(
|
||||||
|
array(
|
||||||
|
'http://rss.cnn.com/rss/edition.rss',
|
||||||
|
'http://rss.cnn.com/rss/edition_connecttheworld.rss',
|
||||||
|
'http://rss.cnn.com/rss/edition_worldsportblog.rss'
|
||||||
|
),
|
||||||
|
$feeds
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_withInvalidHTML()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$html = '!DOCTYPE html html head
|
||||||
|
link type="application/rss+xml" href="http://miniflux.net/feed"
|
||||||
|
/head body /p boo /p body /html';
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', '');
|
||||||
|
$this->assertEquals(array(), $feeds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testFind_withHtmlParamEmptyString()
|
||||||
|
{
|
||||||
|
$reader = new Reader;
|
||||||
|
|
||||||
|
$feeds = $reader->find('http://miniflux.net/', '');
|
||||||
|
$this->assertEquals(array(), $feeds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDiscover()
|
public function testDiscover()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head profile="http://gmpg.org/xfn/11">
|
||||||
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
||||||
<title>Un bilan des plantes génétiquement modifiées aux USA - Résumé d'un rapport américain - Afis - Association française pour l'information scientifique</title>
|
<title>Un bilan des plantes génétiquement modifiées aux USA - Résumé d'un rapport américain - Afis - Association française pour l'information scientifique</title>
|
||||||
<meta name="Keywords" lang="fr" content="OGM, Afis, pseudo-sciences">
|
<meta name="Keywords" lang="fr" content="OGM, Afis, pseudo-sciences">
|
||||||
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
|
||||||
po.src = 'https://apis.google.com/js/plusone.js';
|
po.src = 'https://apis.google.com/js/plusone.js';
|
||||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
@ -64,121 +64,121 @@
|
|||||||
<a class="promo2" href="/boutique.html" style="background: url(squelettes/img/promo_abo.jpg) no-repeat;"></a>
|
<a class="promo2" href="/boutique.html" style="background: url(squelettes/img/promo_abo.jpg) no-repeat;"></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="menu_head">
|
<div id="menu_head">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="spip.php?rubrique11"><img src="squelettes/img/menu1.png" alt="Articles" ></a></li>
|
<li><a href="spip.php?rubrique11"><img src="squelettes/img/menu1.png" alt="Articles" ></a></li>
|
||||||
<li><a href="spip.php?rubrique14"><img src="squelettes/img/menu2.png" alt="Chroniques" ></a>
|
<li><a href="spip.php?rubrique14"><img src="squelettes/img/menu2.png" alt="Chroniques" ></a>
|
||||||
<div class="menu_raccord" style="width:120px;background:#E0AB27;"></div>
|
<div class="menu_raccord" style="width:120px;background:#E0AB27;"></div>
|
||||||
<ul class="menu2">
|
<ul class="menu2">
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique47">Un monde fou, fou, fou...</a></li>
|
<li><a href="spip.php?rubrique47">Un monde fou, fou, fou...</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique24">Du côté de la science</a></li>
|
<li><a href="spip.php?rubrique24">Du côté de la science</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique53">Du côté de la recherche</a></li>
|
<li><a href="spip.php?rubrique53">Du côté de la recherche</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique26">Entre l’espoir et le faux-mage</a></li>
|
<li><a href="spip.php?rubrique26">Entre l’espoir et le faux-mage</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique16">Dialogue avec nos lecteurs</a></li>
|
<li><a href="spip.php?rubrique16">Dialogue avec nos lecteurs</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique8"><img src="squelettes/img/menu3.png" alt="Dossiers" ></a>
|
<li><a href="spip.php?rubrique8"><img src="squelettes/img/menu3.png" alt="Dossiers" ></a>
|
||||||
<div class="menu_raccord" style="width:109px;background:#36ABE0;"></div>
|
<div class="menu_raccord" style="width:109px;background:#36ABE0;"></div>
|
||||||
<ul class="menu3">
|
<ul class="menu3">
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique60">Alimentation</a></li>
|
<li><a href="spip.php?rubrique60">Alimentation</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique30">Astrologie</a></li>
|
<li><a href="spip.php?rubrique30">Astrologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique39">Environnement</a></li>
|
<li><a href="spip.php?rubrique39">Environnement</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique49">Homéopathie</a></li>
|
<li><a href="spip.php?rubrique49">Homéopathie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique32">Le créationnisme à visage découvert</a></li>
|
<li><a href="spip.php?rubrique32">Le créationnisme à visage découvert</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique29">Le Livre noir de la psychanalyse</a></li>
|
<li><a href="spip.php?rubrique29">Le Livre noir de la psychanalyse</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique57">Médicaments : à la recherche de l’expert indépendant</a></li>
|
<li><a href="spip.php?rubrique57">Médicaments : à la recherche de l’expert indépendant</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique40">Nucléaire</a></li>
|
<li><a href="spip.php?rubrique40">Nucléaire</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique38">OGM</a></li>
|
<li><a href="spip.php?rubrique38">OGM</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique55">Ondes électromagnétiques</a></li>
|
<li><a href="spip.php?rubrique55">Ondes électromagnétiques</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique33">Paranormal</a></li>
|
<li><a href="spip.php?rubrique33">Paranormal</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique56">Psychanalyse</a></li>
|
<li><a href="spip.php?rubrique56">Psychanalyse</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique34">Science et croyances : débat</a></li>
|
<li><a href="spip.php?rubrique34">Science et croyances : débat</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique4"><img src="squelettes/img/menu4.png" alt="Livres et médias" ></a>
|
<li><a href="spip.php?rubrique4"><img src="squelettes/img/menu4.png" alt="Livres et médias" ></a>
|
||||||
<div class="menu_raccord" style="width:151px;background:#CA123E;"></div>
|
<div class="menu_raccord" style="width:151px;background:#CA123E;"></div>
|
||||||
<ul class="menu4">
|
<ul class="menu4">
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique13">Notes de lecture</a></li>
|
<li><a href="spip.php?rubrique13">Notes de lecture</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique2">Dans les médias</a></li>
|
<li><a href="spip.php?rubrique2">Dans les médias</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique25">Dans la presse sceptique</a></li>
|
<li><a href="spip.php?rubrique25">Dans la presse sceptique</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique48">Sornettes sur Internet</a></li>
|
<li><a href="spip.php?rubrique48">Sornettes sur Internet</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique42"><img src="squelettes/img/menu5.png" alt="Tribunes" ></a>
|
<li><a href="spip.php?rubrique42"><img src="squelettes/img/menu5.png" alt="Tribunes" ></a>
|
||||||
<div class="menu_raccord" style="width:101px;background:#92A5BA;"></div>
|
<div class="menu_raccord" style="width:101px;background:#92A5BA;"></div>
|
||||||
<ul class="menu5">
|
<ul class="menu5">
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique43">Science et croyances</a></li>
|
<li><a href="spip.php?rubrique43">Science et croyances</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique44">OGM</a></li>
|
<li><a href="spip.php?rubrique44">OGM</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique45">Psychanalyse</a></li>
|
<li><a href="spip.php?rubrique45">Psychanalyse</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique54">Nucléaire</a></li>
|
<li><a href="spip.php?rubrique54">Nucléaire</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique15"><img src="squelettes/img/menu6.png" alt="La revue" ></a>
|
<li><a href="spip.php?rubrique15"><img src="squelettes/img/menu6.png" alt="La revue" ></a>
|
||||||
<div class="menu_raccord" style="width:103px;background:#4B4BA9;"></div>
|
<div class="menu_raccord" style="width:103px;background:#4B4BA9;"></div>
|
||||||
<ul class="menu6">
|
<ul class="menu6">
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique19">Éditoriaux</a></li>
|
<li><a href="spip.php?rubrique19">Éditoriaux</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique18">Sommaires</a></li>
|
<li><a href="spip.php?rubrique18">Sommaires</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique59">Presse</a></li>
|
<li><a href="spip.php?rubrique59">Presse</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?article25">Abonnements, adhésions, commandes</a></li>
|
<li><a href="spip.php?article25">Abonnements, adhésions, commandes</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique17"><img src="squelettes/img/menu7.png" alt="L'AFIS" ></a>
|
<li><a href="spip.php?rubrique17"><img src="squelettes/img/menu7.png" alt="L'AFIS" ></a>
|
||||||
<div class="menu_raccord" style="width:103px;background:#09559A;"></div>
|
<div class="menu_raccord" style="width:103px;background:#09559A;"></div>
|
||||||
<ul class="menu7">
|
<ul class="menu7">
|
||||||
<li><a href="spip.php?article65">Qui sommes-nous ?</a></li>
|
<li><a href="spip.php?article65">Qui sommes-nous ?</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique35">Qu’est-ce que l’AFIS ?</a></li>
|
<li><a href="spip.php?rubrique35">Qu’est-ce que l’AFIS ?</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique3">Communiqués</a></li>
|
<li><a href="spip.php?rubrique3">Communiqués</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?rubrique23">Afis Infos</a></li>
|
<li><a href="spip.php?rubrique23">Afis Infos</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?article868">Gouvernance</a></li>
|
<li><a href="spip.php?article868">Gouvernance</a></li>
|
||||||
<li><a href="spip.php?article761">Comités locaux</a></li>
|
<li><a href="spip.php?article761">Comités locaux</a></li>
|
||||||
<li><a href="agenda.html">Agenda</a></li>
|
<li><a href="agenda.html">Agenda</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li><a href="spip.php?article25"><img src="squelettes/img/menu8_bis.png" alt="Nous rejoindre!" width=192 height=25 style="margin-right:0;"></a></li>
|
<li><a href="spip.php?article25"><img src="squelettes/img/menu8_bis.png" alt="Nous rejoindre!" width=192 height=25 style="margin-right:0;"></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -186,19 +186,19 @@
|
|||||||
<a href="http://www.pseudo-sciences.org"><img src="squelettes/img/home.png" style="padding-top:3px;" alt="Accueil" ></a>
|
<a href="http://www.pseudo-sciences.org"><img src="squelettes/img/home.png" style="padding-top:3px;" alt="Accueil" ></a>
|
||||||
<span class="navitxt">
|
<span class="navitxt">
|
||||||
<a href="http://www.pseudo-sciences.org">Accueil</a>
|
<a href="http://www.pseudo-sciences.org">Accueil</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
> <a href="spip.php?rubrique11" class="italic">Articles</a>
|
> <a href="spip.php?rubrique11" class="italic">Articles</a>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<form action="recherche.html" method="GET">
|
<form action="recherche.html" method="GET">
|
||||||
@ -206,7 +206,7 @@
|
|||||||
<input id="searchbox" name="recherche" type="text" value="Rechercher" onfocus="if(this.value == 'Rechercher'){this.value='';}" onblur="if(!this.value){this.value='Rechercher';}">
|
<input id="searchbox" name="recherche" type="text" value="Rechercher" onfocus="if(this.value == 'Rechercher'){this.value='';}" onblur="if(!this.value){this.value='Rechercher';}">
|
||||||
</form> </div>
|
</form> </div>
|
||||||
|
|
||||||
<!-- <p class="bold center" style="padding:5px;font-size:14px;"><span class="red">Dernière minute - </span><a class="blue" href="spip.php?article1762">Antennes
|
<!-- <p class="bold center" style="padding:5px;font-size:14px;"><span class="red">Dernière minute - </span><a class="blue" href="spip.php?article1762">Antennes
|
||||||
relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
||||||
|
|
||||||
|
|
||||||
@ -216,7 +216,7 @@ relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
|||||||
|
|
||||||
<div id="art_main">
|
<div id="art_main">
|
||||||
<div id="art_pretitre"></div>
|
<div id="art_pretitre"></div>
|
||||||
|
|
||||||
<div id="art_print">
|
<div id="art_print">
|
||||||
<a href="spip.php?page=imprimer&id_article=2280" rel="nofollow" target="_blank" style="margin-right:5px;">
|
<a href="spip.php?page=imprimer&id_article=2280" rel="nofollow" target="_blank" style="margin-right:5px;">
|
||||||
<img src="squelettes/img/print.gif" alt="Imprimer" title="Imprimer cet article"></a>
|
<img src="squelettes/img/print.gif" alt="Imprimer" title="Imprimer cet article"></a>
|
||||||
@ -224,13 +224,13 @@ relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
|||||||
<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-lang="fr">Tweeter</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
|
<a href="http://twitter.com/share" class="twitter-share-button" data-count="none" data-lang="fr">Tweeter</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="art_chapo" >
|
<div id="art_chapo" >
|
||||||
<h1>Un bilan des plantes génétiquement modifiées aux USA</h1>
|
<h1>Un bilan des plantes génétiquement modifiées aux USA</h1>
|
||||||
<h2>Résumé d’un rapport américain</h2>
|
<h2>Résumé d’un rapport américain</h2>
|
||||||
<p class="art_asd"></p>
|
<p class="art_asd"></p>
|
||||||
<div style="clear:both;"></div>
|
<div style="clear:both;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="texteencadre-spip spip">Nous publions ici, à titre d’information, <strong>un résumé du rapport du Service des études économiques </strong> (Economic Research Service)<strong> du ministère américain de l’agriculture </strong> (United States Department of Agriculture). Résumé rédigé par <strong>Louis-Marie Houdebine</strong>.
|
<div class="texteencadre-spip spip">Nous publions ici, à titre d’information, <strong>un résumé du rapport du Service des études économiques </strong> (Economic Research Service)<strong> du ministère américain de l’agriculture </strong> (United States Department of Agriculture). Résumé rédigé par <strong>Louis-Marie Houdebine</strong>.
|
||||||
<p>La culture des plantes génétiquement modifiées (PGM) a commencé aux USA en 1996. Et ce pays compte aujourd’hui, à lui seul, la moitié des PGM cultivées dans le monde. Un bilan économique de cette nouvelle technique de sélection génétique a été publié en février 2014. Il nous a semblé intéressant de porter à la connaissance ce document, afin d’aider nos lecteurs à se faire leur propre opinion sur un sujet controversé. En effet, si les OGM sont interdits à la culture en France (et dans plusieurs pays de l’Union Européenne), ils sont largement utilisés outre-Atlantique, et depuis près de deux décennies, ce qui permet une analyse <i>a posteriori</i>.</p>
|
<p>La culture des plantes génétiquement modifiées (PGM) a commencé aux USA en 1996. Et ce pays compte aujourd’hui, à lui seul, la moitié des PGM cultivées dans le monde. Un bilan économique de cette nouvelle technique de sélection génétique a été publié en février 2014. Il nous a semblé intéressant de porter à la connaissance ce document, afin d’aider nos lecteurs à se faire leur propre opinion sur un sujet controversé. En effet, si les OGM sont interdits à la culture en France (et dans plusieurs pays de l’Union Européenne), ils sont largement utilisés outre-Atlantique, et depuis près de deux décennies, ce qui permet une analyse <i>a posteriori</i>.</p>
|
||||||
|
|
||||||
@ -273,59 +273,59 @@ relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
|||||||
|
|
||||||
<p>Une troisième génération de PGM est déjà une réalité et elle devrait prendre progressivement de l’importance. Ces PGM ne sont pas destinées à l’alimentation. Elles sont et seront productrices de biocarburants, de molécules d’intérêt pharmaceutique, d’huiles industrielles, de fibres, de plastiques etc.</p>
|
<p>Une troisième génération de PGM est déjà une réalité et elle devrait prendre progressivement de l’importance. Ces PGM ne sont pas destinées à l’alimentation. Elles sont et seront productrices de biocarburants, de molécules d’intérêt pharmaceutique, d’huiles industrielles, de fibres, de plastiques etc.</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="art_menu"><div style="border:1px solid #CFCFCF;">
|
<div id="art_menu"><div style="border:1px solid #CFCFCF;">
|
||||||
|
|
||||||
|
|
||||||
<div id="art_stats">Mis en ligne le 8 avril 2014<br>1116 visites</div>
|
<div id="art_stats">Mis en ligne le 8 avril 2014<br>1116 visites</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="art_themes" class="menubox">
|
<div id="art_themes" class="menubox">
|
||||||
<div class="cadre_top bleuclair_bcg"><img src="squelettes/img/titres/themes.png" alt="L'Auteur"></div>
|
<div class="cadre_top bleuclair_bcg"><img src="squelettes/img/titres/themes.png" alt="L'Auteur"></div>
|
||||||
|
|
||||||
<p class="center"><a class="bold" href="spip.php?mot165">OGM</a></p>
|
<p class="center"><a class="bold" href="spip.php?mot165">OGM</a></p>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li><a href="spip.php?article2280" class="spip_in">Un bilan des plantes génétiquement modifiées aux USA</a></li>
|
<li><a href="spip.php?article2280" class="spip_in">Un bilan des plantes génétiquement modifiées aux USA</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?article991" class="spip_in">Les OGM : Menaces ou espoirs, données scientifiques</a></li>
|
<li><a href="spip.php?article991" class="spip_in">Les OGM : Menaces ou espoirs, données scientifiques</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?article2276" class="spip_in">Animal nutrition with transgenic plants</a></li>
|
<li><a href="spip.php?article2276" class="spip_in">Animal nutrition with transgenic plants</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?article784" class="spip_in">Que sont les OGM animaux ?</a></li>
|
<li><a href="spip.php?article784" class="spip_in">Que sont les OGM animaux ?</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?article2275" class="spip_in">OGM, la question politique</a></li>
|
<li><a href="spip.php?article2275" class="spip_in">OGM, la question politique</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div id="art_abo" class="menubox">
|
<div id="art_abo" class="menubox">
|
||||||
<div class="cadre_top bleu_bcg"><img src="squelettes/img/titres/abonnezvous.png" alt="Abonnez vous"></div>
|
<div class="cadre_top bleu_bcg"><img src="squelettes/img/titres/abonnezvous.png" alt="Abonnez vous"></div>
|
||||||
|
|
||||||
<p class="justify">Résultat de l'activité de bénévoles, l’AFIS ne trouve ses ressources que dans les cotisations de ses adhérents et la vente de sa revue.</p>
|
<p class="justify">Résultat de l'activité de bénévoles, l’AFIS ne trouve ses ressources que dans les cotisations de ses adhérents et la vente de sa revue.</p>
|
||||||
<p class="justify">En vous abonnant, vous nous soutenez dans notre action tout en étant assuré de recevoir en premier notre revue trimestrielle dans votre boite aux lettres.</p>
|
<p class="justify">En vous abonnant, vous nous soutenez dans notre action tout en étant assuré de recevoir en premier notre revue trimestrielle dans votre boite aux lettres.</p>
|
||||||
<p class="center" style="font-weight:bold;"><a href="boutique.html">S'ABONNER</a></p>
|
<p class="center" style="font-weight:bold;"><a href="boutique.html">S'ABONNER</a></p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div></div>
|
</div></div>
|
||||||
<div style="clear:both;" class="art_fin"></div>
|
<div style="clear:both;" class="art_fin"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -334,117 +334,117 @@ relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
|||||||
<div id="taglist" class="box" >
|
<div id="taglist" class="box" >
|
||||||
<p>Explorer par thème</p>
|
<p>Explorer par thème</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li><a href="spip.php?mot227">autisme</a></li>
|
<li><a href="spip.php?mot227">autisme</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot76">acupuncture</a></li>
|
<li><a href="spip.php?mot76">acupuncture</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot198">alimentation</a></li>
|
<li><a href="spip.php?mot198">alimentation</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot30">astrologie</a></li>
|
<li><a href="spip.php?mot30">astrologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot43">astronomie</a></li>
|
<li><a href="spip.php?mot43">astronomie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot197">biotechnologies</a></li>
|
<li><a href="spip.php?mot197">biotechnologies</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot187">climat</a></li>
|
<li><a href="spip.php?mot187">climat</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot48">cosmologie</a></li>
|
<li><a href="spip.php?mot48">cosmologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot75">créationnisme</a></li>
|
<li><a href="spip.php?mot75">créationnisme</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot145">croyance</a></li>
|
<li><a href="spip.php?mot145">croyance</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot23">désinformation</a></li>
|
<li><a href="spip.php?mot23">désinformation</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot22">écologie</a></li>
|
<li><a href="spip.php?mot22">écologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot34">économie</a></li>
|
<li><a href="spip.php?mot34">économie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot40">éducation</a></li>
|
<li><a href="spip.php?mot40">éducation</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot59">éthique</a></li>
|
<li><a href="spip.php?mot59">éthique</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot189">évolution</a></li>
|
<li><a href="spip.php?mot189">évolution</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot208">expertise</a></li>
|
<li><a href="spip.php?mot208">expertise</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot31">graphologie</a></li>
|
<li><a href="spip.php?mot31">graphologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot66">histoire</a></li>
|
<li><a href="spip.php?mot66">histoire</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot11">homéopathie</a></li>
|
<li><a href="spip.php?mot11">homéopathie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot141">laïcité</a></li>
|
<li><a href="spip.php?mot141">laïcité</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot52">littérature</a></li>
|
<li><a href="spip.php?mot52">littérature</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot69">mathématiques</a></li>
|
<li><a href="spip.php?mot69">mathématiques</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot9">médecine</a></li>
|
<li><a href="spip.php?mot9">médecine</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot27">mythes et légendes</a></li>
|
<li><a href="spip.php?mot27">mythes et légendes</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot33">neurologie</a></li>
|
<li><a href="spip.php?mot33">neurologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot64">nucléaire</a></li>
|
<li><a href="spip.php?mot64">nucléaire</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot61">numérologie</a></li>
|
<li><a href="spip.php?mot61">numérologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot165">OGM</a></li>
|
<li><a href="spip.php?mot165">OGM</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot201">ondes</a></li>
|
<li><a href="spip.php?mot201">ondes</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot13">ostéopathie</a></li>
|
<li><a href="spip.php?mot13">ostéopathie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot65">ovnis</a></li>
|
<li><a href="spip.php?mot65">ovnis</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot42">paranormal</a></li>
|
<li><a href="spip.php?mot42">paranormal</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot55">parapsychologie</a></li>
|
<li><a href="spip.php?mot55">parapsychologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot49">philosophie</a></li>
|
<li><a href="spip.php?mot49">philosophie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot16">placebo</a></li>
|
<li><a href="spip.php?mot16">placebo</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot45">pseudoscience</a></li>
|
<li><a href="spip.php?mot45">pseudoscience</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot7">psychanalyse</a></li>
|
<li><a href="spip.php?mot7">psychanalyse</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot32">psychiatrie</a></li>
|
<li><a href="spip.php?mot32">psychiatrie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot8">psychologie</a></li>
|
<li><a href="spip.php?mot8">psychologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot46">rationalisme</a></li>
|
<li><a href="spip.php?mot46">rationalisme</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot39">religion</a></li>
|
<li><a href="spip.php?mot39">religion</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot6">santé</a></li>
|
<li><a href="spip.php?mot6">santé</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot38">science</a></li>
|
<li><a href="spip.php?mot38">science</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot68">SVT</a></li>
|
<li><a href="spip.php?mot68">SVT</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot67">physique</a></li>
|
<li><a href="spip.php?mot67">physique</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot50">sectes</a></li>
|
<li><a href="spip.php?mot50">sectes</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot57">sociologie</a></li>
|
<li><a href="spip.php?mot57">sociologie</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot62">spiritisme</a></li>
|
<li><a href="spip.php?mot62">spiritisme</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot179">TCC</a></li>
|
<li><a href="spip.php?mot179">TCC</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot14">vaccination</a></li>
|
<li><a href="spip.php?mot14">vaccination</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot60">voyance</a></li>
|
<li><a href="spip.php?mot60">voyance</a></li>
|
||||||
|
|
||||||
<li><a href="spip.php?mot47">zététique</a></li>
|
<li><a href="spip.php?mot47">zététique</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<span class="float_left italic">Développé sous SPIP, logiciel libre </span>
|
<span class="float_left italic">Développé sous SPIP, logiciel libre </span>
|
||||||
<span class="float_right">
|
<span class="float_right">
|
||||||
@ -455,7 +455,7 @@ relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
|||||||
<a href="spip.php?article1096">Crédits</a>
|
<a href="spip.php?article1096">Crédits</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p id="w3c">
|
<p id="w3c">
|
||||||
@ -473,7 +473,7 @@ relais et santé: des scientifiques répondent à l'ASEF</a></p> -->
|
|||||||
_gaq.push(['_setAccount', 'UA-1826589-10']);
|
_gaq.push(['_setAccount', 'UA-1826589-10']);
|
||||||
_gaq.push(['_trackPageview']);
|
_gaq.push(['_trackPageview']);
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
|
ga.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'stats.g.doubleclick.net/dc.js';
|
||||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
1139
vendor/fguillot/picofeed/tests/fixtures/la-grange.xml
vendored
1139
vendor/fguillot/picofeed/tests/fixtures/la-grange.xml
vendored
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user