Update PicoFeed
This commit is contained in:
parent
f745d70496
commit
28804ca541
51
Dockerfile
51
Dockerfile
@ -1,41 +1,20 @@
|
||||
FROM debian:jessie
|
||||
FROM ubuntu:14.04
|
||||
MAINTAINER Frederic Guillot <fred@miniflux.net>
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
RUN apt-get update && apt-get install -y apache2 php5 php5-sqlite git curl && apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
|
||||
RUN cd /var/www && git clone --depth 1 https://github.com/miniflux/miniflux.git
|
||||
RUN rm -rf /var/www/html && mv /var/www/kanboard /var/www/html
|
||||
RUN chown -R www-data:www-data /var/www/html/data
|
||||
|
||||
RUN \
|
||||
apt-get update && \
|
||||
apt-get -y upgrade && \
|
||||
apt-get -y install \
|
||||
lighttpd \
|
||||
php5-common \
|
||||
php5-cgi \
|
||||
php5-sqlite \
|
||||
php-xml-parser \
|
||||
php5 \
|
||||
unzip \
|
||||
wget
|
||||
|
||||
RUN \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN \
|
||||
cd /root && \
|
||||
wget https://github.com/miniflux/miniflux/archive/master.zip -O miniflux.zip && \
|
||||
unzip miniflux.zip -d /var/www && \
|
||||
mv /var/www/miniflux-master/* /var/www/ && \
|
||||
rm miniflux.zip && \
|
||||
rm -r /var/www/html && \
|
||||
rm -r /var/www/miniflux-master && \
|
||||
chmod +x /var/www/data
|
||||
|
||||
RUN \
|
||||
chown -R www-data:www-data /var/www && \
|
||||
rm /etc/lighttpd/lighttpd.conf
|
||||
|
||||
ADD \
|
||||
scripts/docker/lighttpd.conf /etc/lighttpd/lighttpd.conf
|
||||
VOLUME /var/www/html/data
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["/usr/sbin/lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]
|
||||
ENV APACHE_RUN_USER www-data
|
||||
ENV APACHE_RUN_GROUP www-data
|
||||
ENV APACHE_LOG_DIR /var/log/apache2
|
||||
ENV APACHE_LOCK_DIR /var/lock/apache2
|
||||
ENV APACHE_PID_FILE /var/run/apache2.pid
|
||||
|
||||
CMD /usr/sbin/apache2ctl -D FOREGROUND
|
||||
|
@ -6,7 +6,7 @@
|
||||
"fguillot/simple-validator": "v0.0.3",
|
||||
"fguillot/json-rpc": "v0.0.3",
|
||||
"fguillot/picodb": "v0.0.3",
|
||||
"fguillot/picofeed": "v0.1.5",
|
||||
"fguillot/picofeed": "v0.1.6",
|
||||
"fguillot/picofarad": "dev-master"
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -1,34 +0,0 @@
|
||||
server.modules = (
|
||||
"mod_access",
|
||||
"mod_fastcgi",
|
||||
"mod_alias",
|
||||
"mod_compress",
|
||||
"mod_redirect",
|
||||
# "mod_rewrite",
|
||||
)
|
||||
|
||||
server.document-root = "/var/www/"
|
||||
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
|
||||
server.errorlog = "/var/log/lighttpd/error.log"
|
||||
server.pid-file = "/var/run/lighttpd.pid"
|
||||
server.username = "www-data"
|
||||
server.groupname = "www-data"
|
||||
server.port = 80
|
||||
|
||||
|
||||
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
|
||||
url.access-deny = ( "~", ".inc" )
|
||||
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
|
||||
|
||||
compress.cache-dir = "/var/cache/lighttpd/compress/"
|
||||
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
|
||||
|
||||
# default listening port for IPv6 falls back to the IPv4 port
|
||||
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
|
||||
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
|
||||
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
|
||||
|
||||
fastcgi.server = ( ".php" => ((
|
||||
"bin-path" => "/usr/bin/php-cgi",
|
||||
"socket" => "/tmp/php.socket"
|
||||
)))
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -4,4 +4,4 @@
|
||||
|
||||
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit0c3a5cd890e1e4c1b0fe3e391a8e6c52::getLoader();
|
||||
return ComposerAutoloaderInitc059b513a8543dde562d574abce226dd::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
|
||||
|
||||
class ComposerAutoloaderInit0c3a5cd890e1e4c1b0fe3e391a8e6c52
|
||||
class ComposerAutoloaderInitc059b513a8543dde562d574abce226dd
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
@ -19,9 +19,9 @@ class ComposerAutoloaderInit0c3a5cd890e1e4c1b0fe3e391a8e6c52
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit0c3a5cd890e1e4c1b0fe3e391a8e6c52', 'loadClassLoader'), true, true);
|
||||
spl_autoload_register(array('ComposerAutoloaderInitc059b513a8543dde562d574abce226dd', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit0c3a5cd890e1e4c1b0fe3e391a8e6c52', 'loadClassLoader'));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInitc059b513a8543dde562d574abce226dd', 'loadClassLoader'));
|
||||
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
@ -42,14 +42,14 @@ class ComposerAutoloaderInit0c3a5cd890e1e4c1b0fe3e391a8e6c52
|
||||
|
||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||
foreach ($includeFiles as $file) {
|
||||
composerRequire0c3a5cd890e1e4c1b0fe3e391a8e6c52($file);
|
||||
composerRequirec059b513a8543dde562d574abce226dd($file);
|
||||
}
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
|
||||
function composerRequire0c3a5cd890e1e4c1b0fe3e391a8e6c52($file)
|
||||
function composerRequirec059b513a8543dde562d574abce226dd($file)
|
||||
{
|
||||
require $file;
|
||||
}
|
||||
|
12
vendor/composer/installed.json
vendored
12
vendor/composer/installed.json
vendored
@ -156,17 +156,17 @@
|
||||
},
|
||||
{
|
||||
"name": "fguillot/picofeed",
|
||||
"version": "v0.1.5",
|
||||
"version_normalized": "0.1.5.0",
|
||||
"version": "v0.1.6",
|
||||
"version_normalized": "0.1.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/fguillot/picoFeed.git",
|
||||
"reference": "40dfb81ff0d578d1c1fc800a389933da47aa3dd7"
|
||||
"reference": "1e89a3fd579cf3d83cc65c09047f92f81ce6a923"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/40dfb81ff0d578d1c1fc800a389933da47aa3dd7",
|
||||
"reference": "40dfb81ff0d578d1c1fc800a389933da47aa3dd7",
|
||||
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/1e89a3fd579cf3d83cc65c09047f92f81ce6a923",
|
||||
"reference": "1e89a3fd579cf3d83cc65c09047f92f81ce6a923",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -180,7 +180,7 @@
|
||||
"suggest": {
|
||||
"ext-curl": "PicoFeed will use cURL if present"
|
||||
},
|
||||
"time": "2015-07-03 00:57:06",
|
||||
"time": "2015-07-12 23:33:40",
|
||||
"bin": [
|
||||
"picofeed"
|
||||
],
|
||||
|
@ -266,29 +266,38 @@ $feed->items[0]->isRTL(); // Return true if the item langua
|
||||
|
||||
Get raw XML tags/attributes or non standard tags for items
|
||||
----------------------------------------------------------
|
||||
The getTag function returns an array with all values of matching tags. If nothing can be found, an empty array is returned. In case of errors, the return value is false.
|
||||
|
||||
Get the original `guid` tag for RSS 2.0 feeds:
|
||||
|
||||
```php
|
||||
echo $feed->items[0]->getTag('guid');
|
||||
$values = $feed->items[0]->getTag('guid');
|
||||
print_r ($values);
|
||||
```
|
||||
|
||||
Get a specific attribute value:
|
||||
|
||||
```php
|
||||
echo $feed->items[1]->getTag('category', 'term');
|
||||
$values = $feed->items[1]->getTag('category', 'term');
|
||||
print_r ($values);
|
||||
```
|
||||
|
||||
Get value of namespaced tag:
|
||||
|
||||
```php
|
||||
echo $feed->items[1]->getTag('wfw:commentRss');
|
||||
if (array_key_exists('wfw', $feed->items[0]->namespaces)) {
|
||||
$values = $feed->items[1]->getTag('wfw:commentRss');
|
||||
print_r ($values);
|
||||
}
|
||||
```
|
||||
|
||||
Get attribute value of a namespaced tag:
|
||||
|
||||
```php
|
||||
echo $feed->items[0]->getTag('media:content', 'url');
|
||||
if (array_key_exists('media', $feed->items[0]->namespaces)) {
|
||||
$values = $feed->items[0]->getTag('media:content', 'url');
|
||||
print_r ($values);
|
||||
}
|
||||
```
|
||||
|
||||
Get the xml of the item (returns a SimpleXMLElement instance):
|
||||
|
@ -14,6 +14,13 @@ use PicoFeed\Client\Url;
|
||||
*/
|
||||
class Atom extends Parser
|
||||
{
|
||||
/**
|
||||
* Supported namespaces
|
||||
*/
|
||||
protected $namespaces = array(
|
||||
'atom' => 'http://www.w3.org/2005/Atom',
|
||||
);
|
||||
|
||||
/**
|
||||
* Get the path to the items XML tree
|
||||
*
|
||||
@ -23,7 +30,8 @@ class Atom extends Parser
|
||||
*/
|
||||
public function getItemsTree(SimpleXMLElement $xml)
|
||||
{
|
||||
return $xml->entry;
|
||||
return XmlParser::getXPathResult($xml, 'atom:entry', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'entry');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -59,7 +67,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedDescription(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->description = (string) $xml->subtitle;
|
||||
$description = XmlParser::getXPathResult($xml, 'atom:subtitle', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'subtitle');
|
||||
|
||||
$feed->description = (string) current($description);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -71,7 +82,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedLogo(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->logo = (string) $xml->logo;
|
||||
$logo = XmlParser::getXPathResult($xml, 'atom:logo', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'logo');
|
||||
|
||||
$feed->logo = (string) current($logo);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -83,7 +97,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedIcon(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->icon = (string) $xml->icon;
|
||||
$icon = XmlParser::getXPathResult($xml, 'atom:icon', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'icon');
|
||||
|
||||
$feed->icon = (string) current($icon);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -95,7 +112,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedTitle(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->title = Filter::stripWhiteSpace((string) $xml->title) ?: $feed->getSiteUrl();
|
||||
$title = XmlParser::getXPathResult($xml, 'atom:title', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'title');
|
||||
|
||||
$feed->title = Filter::stripWhiteSpace((string) current($title)) ?: $feed->getSiteUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -107,7 +127,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->language = XmlParser::getXmlLang($this->content);
|
||||
$language = XmlParser::getXPathResult($xml, '*[not(self::atom:entry)]/@xml:lang', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, '@xml:lang');
|
||||
|
||||
$feed->language = (string) current($language);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -119,7 +142,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedId(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->id = (string) $xml->id;
|
||||
$id = XmlParser::getXPathResult($xml, 'atom:id', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'id');
|
||||
|
||||
$feed->id = (string) current($id);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,7 +157,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findFeedDate(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->date = $this->date->getDateTime((string) $xml->updated);
|
||||
$updated = XmlParser::getXPathResult($xml, 'atom:updated', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'updated');
|
||||
|
||||
$feed->date = $this->date->getDateTime((string) current($updated));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,8 +173,14 @@ class Atom extends Parser
|
||||
*/
|
||||
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;
|
||||
$published = XmlParser::getXPathResult($entry, 'atom:published', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'published');
|
||||
|
||||
$updated = XmlParser::getXPathResult($entry, 'atom:updated', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'updated');
|
||||
|
||||
$published = ! empty($published) ? $this->date->getDateTime((string) current($published)) : null;
|
||||
$updated = ! empty($updated) ? $this->date->getDateTime((string) current($updated)) : null;
|
||||
|
||||
if ($published === null && $updated === null) {
|
||||
$item->date = $feed->getDate(); // We use the feed date if there is no date for the item
|
||||
@ -167,11 +202,10 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findItemTitle(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$item->title = Filter::stripWhiteSpace((string) $entry->title);
|
||||
$title = XmlParser::getXPathResult($entry, 'atom:title', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'title');
|
||||
|
||||
if (empty($item->title)) {
|
||||
$item->title = $item->url;
|
||||
}
|
||||
$item->title = Filter::stripWhiteSpace((string) current($title)) ?: $item->url;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -184,12 +218,12 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
if (isset($entry->author->name)) {
|
||||
$item->author = (string) $entry->author->name;
|
||||
}
|
||||
else {
|
||||
$item->author = (string) $xml->author->name;
|
||||
}
|
||||
$author = XmlParser::getXPathResult($entry, 'atom:author/atom:name', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'author/name')
|
||||
?: XmlParser::getXPathResult($xml, 'atom:author/atom:name', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'author/name');
|
||||
|
||||
$item->author = (string) current($author);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -226,10 +260,11 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findItemId(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$id = (string) $entry->id;
|
||||
$id = XmlParser::getXPathResult($entry, 'atom:id', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'id');
|
||||
|
||||
if ($id) {
|
||||
$item->id = $this->generateId($id);
|
||||
if (! empty($id)) {
|
||||
$item->id = $this->generateId((string) current($id));
|
||||
}
|
||||
else {
|
||||
$item->id = $this->generateId(
|
||||
@ -266,13 +301,9 @@ class Atom extends Parser
|
||||
*/
|
||||
public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$language = (string) $entry->attributes('xml', true)->{'lang'};
|
||||
$language = XmlParser::getXPathResult($entry, './/@xml:lang');
|
||||
|
||||
if ($language === '') {
|
||||
$language = $feed->language;
|
||||
}
|
||||
|
||||
$item->language = $language;
|
||||
$item->language = (string) current($language) ?: $feed->language;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -309,7 +340,10 @@ class Atom extends Parser
|
||||
*/
|
||||
private function findLink(SimpleXMLElement $xml, $rel)
|
||||
{
|
||||
foreach ($xml->link as $link) {
|
||||
$links = XmlParser::getXPathResult($xml, 'atom:link', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'link');
|
||||
|
||||
foreach ($links as $link) {
|
||||
if ($rel === (string) $link['rel']) {
|
||||
return $link;
|
||||
}
|
||||
@ -327,19 +361,27 @@ class Atom extends Parser
|
||||
*/
|
||||
private function getContent(SimpleXMLElement $entry)
|
||||
{
|
||||
if (isset($entry->content) && ! empty($entry->content)) {
|
||||
$content = current(
|
||||
XmlParser::getXPathResult($entry, 'atom:content', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'content')
|
||||
);
|
||||
|
||||
if (count($entry->content->children())) {
|
||||
return (string) $entry->content->asXML();
|
||||
}
|
||||
else {
|
||||
return (string) $entry->content;
|
||||
}
|
||||
}
|
||||
else if (isset($entry->summary) && ! empty($entry->summary)) {
|
||||
return (string) $entry->summary;
|
||||
if (! empty($content) && count($content->children())) {
|
||||
$xml_string = '';
|
||||
|
||||
foreach($content->children() as $child) {
|
||||
$xml_string .= $child->asXML();
|
||||
}
|
||||
|
||||
return '';
|
||||
return $xml_string;
|
||||
}
|
||||
else if (trim((string) $content) !== '') {
|
||||
return (string) $content;
|
||||
}
|
||||
|
||||
$summary = XmlParser::getXPathResult($entry, 'atom:summary', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'summary');
|
||||
|
||||
return (string) current($summary);
|
||||
}
|
||||
}
|
||||
|
@ -121,23 +121,24 @@ class Item
|
||||
* @access public
|
||||
* @param string $tag Tag name (examples: guid, media:content)
|
||||
* @param string $attribute Tag attribute
|
||||
* @return string
|
||||
* @return array|false Tag values or error
|
||||
*/
|
||||
public function getTag($tag, $attribute = '')
|
||||
{
|
||||
// Get namespaced value
|
||||
if (strpos($tag, ':') !== false) {
|
||||
list(,$tag) = explode(':', $tag);
|
||||
return XmlParser::getNamespaceValue($this->xml, $this->namespaces, $tag, $attribute);
|
||||
// convert to xPath attribute query
|
||||
if ($attribute !== '') {
|
||||
$attribute = '/@'.$attribute;
|
||||
}
|
||||
|
||||
// Return attribute value
|
||||
if (! empty($attribute)) {
|
||||
return (string) $this->xml->{$tag}[$attribute];
|
||||
// construct query
|
||||
$query = './/'.$tag.$attribute;
|
||||
$elements = XmlParser::getXPathResult($this->xml, $query, $this->namespaces);
|
||||
|
||||
if ($elements === false) { // xPath error
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return tag content
|
||||
return (string) $this->xml->$tag;
|
||||
return array_map(function ($element) { return (string) $element;}, $elements);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -198,7 +199,7 @@ class Item
|
||||
* Get date
|
||||
*
|
||||
* @access public
|
||||
* $return integer
|
||||
* $return \DateTime
|
||||
*/
|
||||
public function getDate()
|
||||
{
|
||||
|
@ -58,13 +58,21 @@ abstract class Parser
|
||||
protected $fallback_url = '';
|
||||
|
||||
/**
|
||||
* XML namespaces
|
||||
* XML namespaces supported by parser
|
||||
*
|
||||
* @access protected
|
||||
* @var array
|
||||
*/
|
||||
protected $namespaces = array();
|
||||
|
||||
/**
|
||||
* XML namespaces used in document
|
||||
*
|
||||
* @access protected
|
||||
* @var array
|
||||
*/
|
||||
protected $used_namespaces = array();
|
||||
|
||||
/**
|
||||
* Enable the content filtering
|
||||
*
|
||||
@ -143,7 +151,8 @@ abstract class Parser
|
||||
}
|
||||
}
|
||||
|
||||
$this->namespaces = $xml->getNamespaces(true);
|
||||
$this->used_namespaces = $xml->getNamespaces(true);
|
||||
$xml = $this->registerSupportedNamespaces($xml);
|
||||
|
||||
$feed = new Feed;
|
||||
|
||||
@ -163,9 +172,11 @@ abstract class Parser
|
||||
|
||||
foreach ($this->getItemsTree($xml) as $entry) {
|
||||
|
||||
$entry = $this->registerSupportedNamespaces($entry);
|
||||
|
||||
$item = new Item;
|
||||
$item->xml = $entry;
|
||||
$item->namespaces = $this->namespaces;
|
||||
$item->namespaces = $this->used_namespaces;
|
||||
|
||||
$this->findItemAuthor($xml, $entry, $item);
|
||||
|
||||
@ -420,6 +431,22 @@ abstract class Parser
|
||||
$this->grabber_ignore_urls = $urls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register all supported namespaces to be used within an xpath query
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @return SimpleXMLElement
|
||||
*/
|
||||
public function registerSupportedNamespaces(SimpleXMLElement $xml)
|
||||
{
|
||||
foreach ($this->namespaces as $prefix => $ns) {
|
||||
$xml->registerXPathNamespace($prefix, $ns);
|
||||
}
|
||||
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed url
|
||||
*
|
||||
|
@ -3,6 +3,7 @@
|
||||
namespace PicoFeed\Parser;
|
||||
|
||||
use SimpleXMLElement;
|
||||
use PicoFeed\Filter\Filter;
|
||||
|
||||
/**
|
||||
* RSS 1.0 parser
|
||||
@ -10,8 +11,18 @@ use SimpleXMLElement;
|
||||
* @author Frederic Guillot
|
||||
* @package Parser
|
||||
*/
|
||||
class Rss10 extends Rss20
|
||||
class Rss10 extends Parser
|
||||
{
|
||||
/**
|
||||
* Supported namespaces
|
||||
*/
|
||||
protected $namespaces = array(
|
||||
'rss' => 'http://purl.org/rss/1.0/',
|
||||
'dc' => 'http://purl.org/dc/elements/1.1/',
|
||||
'content' => 'http://purl.org/rss/1.0/modules/content/',
|
||||
'feedburner' => 'http://rssnamespace.org/feedburner/ext/1.0',
|
||||
);
|
||||
|
||||
/**
|
||||
* Get the path to the items XML tree
|
||||
*
|
||||
@ -21,19 +32,92 @@ class Rss10 extends Rss20
|
||||
*/
|
||||
public function getItemsTree(SimpleXMLElement $xml)
|
||||
{
|
||||
return $xml->item;
|
||||
return XmlParser::getXPathResult($xml, 'rss:item', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'item');
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed date
|
||||
* Find the feed url
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findFeedDate(SimpleXMLElement $xml, Feed $feed)
|
||||
public function findFeedUrl(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->date = $this->date->getDateTime(XmlParser::getNamespaceValue($xml->channel, $this->namespaces, 'date'));
|
||||
$feed->feed_url = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the site url
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findSiteUrl(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$site_url = XmlParser::getXPathResult($xml, 'rss:channel/rss:link', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/link');
|
||||
|
||||
$feed->site_url = (string) current($site_url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed description
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findFeedDescription(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$description = XmlParser::getXPathResult($xml, 'rss:channel/rss:description', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/description');
|
||||
|
||||
$feed->description = (string) current($description);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed logo url
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findFeedLogo(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$logo = XmlParser::getXPathResult($xml, 'rss:image/rss:url', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'image/url');
|
||||
|
||||
$feed->logo = (string) current($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 = '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed title
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findFeedTitle(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$title = XmlParser::getXPathResult($xml, 'rss:channel/rss:title', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/title');
|
||||
|
||||
$feed->title = Filter::stripWhiteSpace((string) current($title)) ?: $feed->getSiteUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -45,7 +129,119 @@ class Rss10 extends Rss20
|
||||
*/
|
||||
public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->language = XmlParser::getNamespaceValue($xml->channel, $this->namespaces, 'language');
|
||||
$language = XmlParser::getXPathResult($xml, 'rss:channel/dc:language', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/dc:language', $this->namespaces);
|
||||
|
||||
$feed->language = (string) current($language);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed id
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findFeedId(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->id = $feed->getFeedUrl() ?: $feed->getSiteUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the feed date
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed xml
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findFeedDate(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$date = XmlParser::getXPathResult($xml, 'rss:channel/dc:date', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/dc:date', $this->namespaces);
|
||||
|
||||
$feed->date = $this->date->getDateTime((string) current($date));
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the item date
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $entry Feed item
|
||||
* @param Item $item Item object
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findItemDate(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$date = XmlParser::getXPathResult($entry, 'dc:date', $this->namespaces);
|
||||
|
||||
$item->date = empty($date) ? $feed->getDate() : $this->date->getDateTime((string) current($date));
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the item title
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $entry Feed item
|
||||
* @param \PicoFeed\Parser\Item $item Item object
|
||||
*/
|
||||
public function findItemTitle(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$title = XmlParser::getXPathResult($entry, 'rss:title', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'title');
|
||||
|
||||
$item->title = Filter::stripWhiteSpace((string) current($title)) ?: $item->url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the item author
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $xml Feed
|
||||
* @param SimpleXMLElement $entry Feed item
|
||||
* @param \PicoFeed\Parser\Item $item Item object
|
||||
*/
|
||||
public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$author = XmlParser::getXPathResult($entry, 'dc:creator', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'rss:channel/dc:creator', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/dc:creator', $this->namespaces);
|
||||
|
||||
$item->author = (string) current($author);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the item content
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $entry Feed item
|
||||
* @param \PicoFeed\Parser\Item $item Item object
|
||||
*/
|
||||
public function findItemContent(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$content = XmlParser::getXPathResult($entry, 'content:encoded', $this->namespaces);
|
||||
|
||||
if (trim((string) current($content)) === '') {
|
||||
$content = XmlParser::getXPathResult($entry, 'rss:description', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'description');
|
||||
}
|
||||
|
||||
$item->content = (string) current($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the item URL
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $entry Feed item
|
||||
* @param \PicoFeed\Parser\Item $item Item object
|
||||
*/
|
||||
public function findItemUrl(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$link = XmlParser::getXPathResult($entry, 'feedburner:origLink', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'rss:link', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'link');
|
||||
|
||||
$item->url = trim((string) current($link));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -74,4 +270,19 @@ class Rss10 extends Rss20
|
||||
public function findItemEnclosure(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the item language
|
||||
*
|
||||
* @access public
|
||||
* @param SimpleXMLElement $entry Feed item
|
||||
* @param \PicoFeed\Parser\Item $item Item object
|
||||
* @param \PicoFeed\Parser\Feed $feed Feed object
|
||||
*/
|
||||
public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$language = XmlParser::getXPathResult($entry, 'dc:language', $this->namespaces);
|
||||
|
||||
$item->language = (string) current($language) ?: $feed->language;
|
||||
}
|
||||
}
|
||||
|
@ -14,6 +14,16 @@ use PicoFeed\Client\Url;
|
||||
*/
|
||||
class Rss20 extends Parser
|
||||
{
|
||||
/**
|
||||
* Supported namespaces
|
||||
*/
|
||||
protected $namespaces = array(
|
||||
'dc' => 'http://purl.org/dc/elements/1.1/',
|
||||
'content' => 'http://purl.org/rss/1.0/modules/content/',
|
||||
'feedburner' => 'http://rssnamespace.org/feedburner/ext/1.0',
|
||||
'atom' => 'http://www.w3.org/2005/Atom'
|
||||
);
|
||||
|
||||
/**
|
||||
* Get the path to the items XML tree
|
||||
*
|
||||
@ -23,13 +33,7 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function getItemsTree(SimpleXMLElement $xml)
|
||||
{
|
||||
$items = array();
|
||||
|
||||
if (isset($xml->channel->item)) {
|
||||
$items = $xml->channel->item;
|
||||
}
|
||||
|
||||
return $items;
|
||||
return XmlParser::getXPathResult($xml, 'channel/item');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -53,7 +57,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findSiteUrl(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->site_url = (string) $xml->channel->link;
|
||||
$site_url = XmlParser::getXPathResult($xml, 'channel/link');
|
||||
$feed->site_url = (string) current($site_url);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -65,7 +70,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findFeedDescription(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->description = (string) $xml->channel->description;
|
||||
$description = XmlParser::getXPathResult($xml, 'channel/description');
|
||||
$feed->description = (string) current($description);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -77,9 +83,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findFeedLogo(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
if (isset($xml->channel->image->url)) {
|
||||
$feed->logo = (string) $xml->channel->image->url;
|
||||
}
|
||||
$logo = XmlParser::getXPathResult($xml, 'channel/image/url');
|
||||
$feed->logo = (string) current($logo);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,7 +108,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findFeedTitle(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->title = Filter::stripWhiteSpace((string) $xml->channel->title) ?: $feed->getSiteUrl();
|
||||
$title = XmlParser::getXPathResult($xml, 'channel/title');
|
||||
$feed->title = Filter::stripWhiteSpace((string) current($title)) ?: $feed->getSiteUrl();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -115,7 +121,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findFeedLanguage(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$feed->language = isset($xml->channel->language) ? (string) $xml->channel->language : '';
|
||||
$language = XmlParser::getXPathResult($xml, 'channel/language');
|
||||
$feed->language = (string) current($language);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -139,8 +146,21 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findFeedDate(SimpleXMLElement $xml, Feed $feed)
|
||||
{
|
||||
$date = isset($xml->channel->pubDate) ? $xml->channel->pubDate : $xml->channel->lastBuildDate;
|
||||
$feed->date = $this->date->getDateTime((string) $date);
|
||||
$publish_date = XmlParser::getXPathResult($xml, 'channel/pubDate');
|
||||
$update_date = XmlParser::getXPathResult($xml, 'channel/lastBuildDate');
|
||||
|
||||
$published = ! empty($publish_date) ? $this->date->getDateTime((string) current($publish_date)) : null;
|
||||
$updated = ! empty($update_date) ? $this->date->getDateTime((string) current($update_date)) : null;
|
||||
|
||||
if ($published === null && $updated === null) {
|
||||
$feed->date = $this->date->getCurrentDateTime(); // We use the current date if there is no date for the feed
|
||||
}
|
||||
else if ($published !== null && $updated !== null) {
|
||||
$feed->date = max($published, $updated); // We use the most recent date between published and updated
|
||||
}
|
||||
else {
|
||||
$feed->date = $updated ?: $published;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -153,17 +173,9 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemDate(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$date = XmlParser::getNamespaceValue($entry, $this->namespaces, 'date');
|
||||
$date = XmlParser::getXPathResult($entry, 'pubDate');
|
||||
|
||||
if (empty($date)) {
|
||||
$date = XmlParser::getNamespaceValue($entry, $this->namespaces, 'updated');
|
||||
}
|
||||
|
||||
if (empty($date)) {
|
||||
$date = (string) $entry->pubDate;
|
||||
}
|
||||
|
||||
$item->date = empty($date) ? $feed->getDate() : $this->date->getDateTime($date);
|
||||
$item->date = empty($date) ? $feed->getDate() : $this->date->getDateTime((string) current($date));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -175,11 +187,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemTitle(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$item->title = Filter::stripWhiteSpace((string) $entry->title);
|
||||
|
||||
if (empty($item->title)) {
|
||||
$item->title = $item->url;
|
||||
}
|
||||
$title = XmlParser::getXPathResult($entry, 'title');
|
||||
$item->title = Filter::stripWhiteSpace((string) current($title)) ?: $item->url;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -192,16 +201,12 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemAuthor(SimpleXMLElement $xml, SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$item->author = XmlParser::getNamespaceValue($entry, $this->namespaces, 'creator');
|
||||
$author = XmlParser::getXPathResult($entry, 'dc:creator', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'author')
|
||||
?: XmlParser::getXPathResult($xml, 'channel/dc:creator', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($xml, 'channel/managingEditor');
|
||||
|
||||
if (empty($item->author)) {
|
||||
if (isset($entry->author)) {
|
||||
$item->author = (string) $entry->author;
|
||||
}
|
||||
else if (isset($xml->channel->webMaster)) {
|
||||
$item->author = (string) $xml->channel->webMaster;
|
||||
}
|
||||
}
|
||||
$item->author = (string) current($author);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -213,13 +218,13 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemContent(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$content = XmlParser::getNamespaceValue($entry, $this->namespaces, 'encoded');
|
||||
$content = XmlParser::getXPathResult($entry, 'content:encoded', $this->namespaces);
|
||||
|
||||
if (trim($content) === '' && $entry->description->count() > 0) {
|
||||
$content = (string) $entry->description;
|
||||
if (trim((string) current($content)) === '') {
|
||||
$content = XmlParser::getXPathResult($entry, 'description');
|
||||
}
|
||||
|
||||
$item->content = $content;
|
||||
$item->content = (string) current($content);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -231,18 +236,19 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemUrl(SimpleXMLElement $entry, Item $item)
|
||||
{
|
||||
$links = array(
|
||||
XmlParser::getNamespaceValue($entry, $this->namespaces, 'origLink'),
|
||||
isset($entry->link) ? (string) $entry->link : '',
|
||||
XmlParser::getNamespaceValue($entry, $this->namespaces, 'link', 'href'),
|
||||
isset($entry->guid) ? (string) $entry->guid : '',
|
||||
);
|
||||
$link = XmlParser::getXPathResult($entry, 'feedburner:origLink', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'link')
|
||||
?: XmlParser::getXPathResult($entry, 'atom:link/@href', $this->namespaces);
|
||||
|
||||
foreach ($links as $link) {
|
||||
$link = trim($link);
|
||||
if (! empty($link) && filter_var($link, FILTER_VALIDATE_URL) !== false) {
|
||||
if (! empty($link)) {
|
||||
$item->url = trim((string) current($link));
|
||||
}
|
||||
else {
|
||||
$link = XmlParser::getXPathResult($entry, 'guid');
|
||||
$link = trim((string) current($link));
|
||||
|
||||
if (filter_var($link, FILTER_VALIDATE_URL) !== false) {
|
||||
$item->url = $link;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -257,7 +263,7 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemId(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$id = (string) $entry->guid;
|
||||
$id = (string) current(XmlParser::getXPathResult($entry, 'guid'));
|
||||
|
||||
if ($id) {
|
||||
$item->id = $this->generateId($id);
|
||||
@ -280,15 +286,14 @@ class Rss20 extends Parser
|
||||
public function findItemEnclosure(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
if (isset($entry->enclosure)) {
|
||||
$enclosure_url = XmlParser::getXPathResult($entry, 'feedburner:origEnclosureLink', $this->namespaces)
|
||||
?: XmlParser::getXPathResult($entry, 'enclosure/@url');
|
||||
|
||||
$item->enclosure_url = XmlParser::getNamespaceValue($entry->enclosure, $this->namespaces, 'origEnclosureLink');
|
||||
$enclosure_type = XmlParser::getXPathResult($entry, 'enclosure/@type');
|
||||
|
||||
if (empty($item->enclosure_url)) {
|
||||
$item->enclosure_url = isset($entry->enclosure['url']) ? (string) $entry->enclosure['url'] : '';
|
||||
}
|
||||
|
||||
$item->enclosure_type = isset($entry->enclosure['type']) ? (string) $entry->enclosure['type'] : '';
|
||||
$item->enclosure_url = Url::resolve($item->enclosure_url, $feed->getSiteUrl());
|
||||
$item->enclosure_url = Url::resolve((string) current($enclosure_url), $feed->getSiteUrl());
|
||||
$item->enclosure_type = (string) current($enclosure_type);
|
||||
}
|
||||
}
|
||||
|
||||
@ -302,6 +307,8 @@ class Rss20 extends Parser
|
||||
*/
|
||||
public function findItemLanguage(SimpleXMLElement $entry, Item $item, Feed $feed)
|
||||
{
|
||||
$item->language = $feed->language;
|
||||
$language = XmlParser::getXPathResult($entry, 'dc:language', $this->namespaces);
|
||||
|
||||
$item->language = (string) current($language) ?: $feed->language;
|
||||
}
|
||||
}
|
||||
|
@ -236,56 +236,38 @@ class XmlParser
|
||||
}
|
||||
|
||||
/**
|
||||
* Get xml:lang value
|
||||
* Rewrite XPath query to use namespace-uri and local-name derived from prefix
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param string $xml XML string
|
||||
* @return string Language
|
||||
* @param string $query XPath query
|
||||
* @param array $ns Prefix to namespace URI mapping
|
||||
* @return string
|
||||
*/
|
||||
public static function getXmlLang($xml)
|
||||
{
|
||||
$dom = self::getDomDocument($xml);
|
||||
|
||||
if ($dom === false) {
|
||||
return '';
|
||||
public static function replaceXPathPrefixWithNamespaceURI($query, array $ns) {
|
||||
return preg_replace_callback('/([A-Z0-9]+):([A-Z0-9]+)/iu', function($matches) use($ns) {
|
||||
// don't try to map the special prefix XML
|
||||
if (strtolower($matches[1]) === 'xml') {
|
||||
return $matches[0];
|
||||
}
|
||||
|
||||
$xpath = new DOMXPath($dom);
|
||||
return $xpath->evaluate('string(//@xml:lang[1])') ?: '';
|
||||
return '*[namespace-uri()="'.$ns[$matches[1]].'" and local-name()="'.$matches[2].'"]';
|
||||
},
|
||||
$query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a value from a XML namespace
|
||||
* Get the result elements of a XPath query
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @param \SimpleXMLElement $xml XML element
|
||||
* @param array $namespaces XML namespaces
|
||||
* @param string $property XML tag name
|
||||
* @param string $attribute XML attribute name
|
||||
* @return string
|
||||
* @param string $query XPath query
|
||||
* @param array $ns Prefix to namespace URI mapping
|
||||
* @return \SimpleXMLElement
|
||||
*/
|
||||
public static function getNamespaceValue(SimpleXMLElement $xml, array $namespaces, $property, $attribute = '')
|
||||
public static function getXPathResult(SimpleXMLElement $xml, $query, array $ns = array())
|
||||
{
|
||||
foreach ($namespaces as $name => $url) {
|
||||
$namespace = $xml->children($namespaces[$name]);
|
||||
|
||||
if (isset($namespace->$property) && $namespace->$property->count() > 0) {
|
||||
|
||||
if ($attribute) {
|
||||
|
||||
foreach ($namespace->$property->attributes() as $xml_attribute => $xml_value) {
|
||||
if ($xml_attribute === $attribute && $xml_value) {
|
||||
return (string) $xml_value;
|
||||
}
|
||||
}
|
||||
if (! empty($ns)) {
|
||||
$query = static::replaceXPathPrefixWithNamespaceURI($query, $ns);
|
||||
}
|
||||
|
||||
return (string) $namespace->$property;
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
return $xml->xpath($query);
|
||||
}
|
||||
}
|
||||
|
@ -37,9 +37,6 @@ class FilterTest extends PHPUnit_Framework_TestCase
|
||||
$data = file_get_contents('tests/fixtures/sametmax.xml');
|
||||
$this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4));
|
||||
|
||||
$data = file_get_contents('tests/fixtures/grotte_barbu.xml');
|
||||
$this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4));
|
||||
|
||||
$data = file_get_contents('tests/fixtures/ibash.ru.xml');
|
||||
$this->assertEquals('<rss', substr(Filter::stripXmlTag($data), 0, 4));
|
||||
|
||||
@ -58,7 +55,7 @@ class FilterTest extends PHPUnit_Framework_TestCase
|
||||
$data = file_get_contents('tests/fixtures/lagrange.xml');
|
||||
$this->assertEquals('<feed', substr(Filter::stripXmlTag($data), 0, 5));
|
||||
|
||||
$data = file_get_contents('tests/fixtures/atom.xml');
|
||||
$data = file_get_contents('tests/fixtures/googleblog.xml');
|
||||
$this->assertEquals('<feed', substr(trim(Filter::stripXmlTag($data)), 0, 5));
|
||||
|
||||
$data = file_get_contents('tests/fixtures/atomsample.xml');
|
||||
|
@ -14,249 +14,450 @@ class AtomParserTest extends PHPUnit_Framework_TestCase
|
||||
$parser->execute();
|
||||
}
|
||||
|
||||
public function testFeedTitle()
|
||||
public function testGetItemsTree()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('The Official Google Blog', $feed->getTitle());
|
||||
$this->assertCount(4, $feed->items);
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Example Feed', $feed->getTitle());
|
||||
$this->assertCount(4, $feed->items);
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertCount(4, $feed->items);
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(array(), $feed->items);
|
||||
}
|
||||
|
||||
public function testFeedDescription()
|
||||
public function testFindFeedTitle()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Insights from Googlers into our products, technology, and the Google culture.', $feed->getDescription());
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_fallback_on_invalid_feed_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
}
|
||||
|
||||
public function testFindFeedDescription()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getDescription());
|
||||
}
|
||||
|
||||
public function testFeedLogo()
|
||||
public function testFindFeedLogo()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getLogo());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/bbc_urdu.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://www.bbc.co.uk/urdu/images/gel/rss_logo.gif', $feed->getLogo());
|
||||
}
|
||||
|
||||
public function testFeedIcon()
|
||||
public function testFindFeedIcon()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/favicon/wikipedia.ico', $feed->getIcon());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/favicon/wikipedia.ico', $feed->getIcon());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/favicon/wikipedia.ico', $feed->getIcon());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.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 testFindFeedUrl()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/category/Russian-language_literature.xml', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml'); // relative url
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/category/Russian-language_literature.xml', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/category/Russian-language_literature.xml', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/category/Russian-language_literature.xml', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'), '', 'http://example.org/');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://example.org/', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://www.la-grange.net/feed.atom', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/groovehq.xml'), '', 'http://groovehq.com/');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://groovehq.com/articles.xml', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://planet.hamakor.org.il/atom.xml', $feed->getFeedUrl());
|
||||
}
|
||||
|
||||
public function testSiteUrl()
|
||||
public function testFindSiteUrl()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml')); // rel="alternate"
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://googleblog.blogspot.com/', $feed->getSiteUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml'); // no rel + relative url
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://example.org/', $feed->getSiteUrl());
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://www.la-grange.net/', $feed->getSiteUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/groovehq.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://planet.hamakor.org.il/', $feed->getSiteUrl());
|
||||
}
|
||||
|
||||
public function testFeedId()
|
||||
public function testFindFeedId()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('tag:blogger.com,1999:blog-10861780', $feed->getId());
|
||||
$this->assertEquals('urn:uuid:bd0b2c90-35a3-44e9-a491-4e15508f6d83', $feed->getId());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6', $feed->getId());
|
||||
$this->assertEquals('urn:uuid:bd0b2c90-35a3-44e9-a491-4e15508f6d83', $feed->getId());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('urn:uuid:bd0b2c90-35a3-44e9-a491-4e15508f6d83', $feed->getId());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getId());
|
||||
}
|
||||
|
||||
public function testFeedDate()
|
||||
public function testFindFeedDate()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1360148333, $feed->getDate()->getTimestamp(), '', 1);
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1071340202, $feed->getDate()->getTimestamp(), '', 1);
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/duesseldorf_lokalzeit.rdf'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('2015-01-05', $feed->getDate()->format('Y-m-d'));
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->getDate()->getTimestamp(), 1);
|
||||
}
|
||||
|
||||
public function testFeedLanguage()
|
||||
public function testFindFeedLanguage()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_extra.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
// do not use lang from entry or descendant of entry
|
||||
$parser = new Atom('<feed xmlns="http://www.w3.org/2005/Atom"><entry xml:lang="ru"><title xml:lang="ru"/></entry></feed>');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getLanguage());
|
||||
$this->assertEquals('', $feed->items[0]->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/bbc_urdu.xml'));
|
||||
// do not use lang from entry or descendant of entry (prefixed)
|
||||
$parser = new Atom('<feed xmlns:atom="http://www.w3.org/2005/Atom"><atom:entry xml:lang="ru"><atom:title xml:lang="ru"/></atom:entry></feed>');
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('ur', $feed->getLanguage());
|
||||
$this->assertEquals('ur', $feed->items[0]->getLanguage());
|
||||
$this->assertEquals('', $feed->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/lagrange.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('fr', $feed->getLanguage());
|
||||
$this->assertEquals('fr', $feed->items[0]->getLanguage());
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('he', $feed->getLanguage());
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getLanguage());
|
||||
}
|
||||
|
||||
public function testItemId()
|
||||
public function testFindItemId()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('3841e5cf232f5111fc5841e9eba5f4b26d95e7d7124902e0f7272729d65601a6', $feed->items[0]->getId());
|
||||
}
|
||||
|
||||
public function testItemUrl()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://idkn.wordpress.com/2014/12/20/modular-sinatra/', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('http://www.guyrutenberg.com/2014/12/20/kindle-paperwhite-unable-to-open-item/', $feed->items[1]->getUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://example.org/2003/12/13/atom03', $feed->items[0]->getUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/bbc_urdu.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://www.bbc.co.uk/urdu/world/2014/03/140316_missing_malaysia_plane_pilot_mb.shtml', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('http://www.bbc.co.uk/urdu/pakistan/2014/03/140316_taliban_talks_pro_ibrahim_zs.shtml', $feed->items[1]->getUrl());
|
||||
|
||||
// items[0] === alternate generation
|
||||
// items[1] === id element
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://feedproxy.google.com/~r/blogspot/MKuf/~3/S_hccisqTW8/a-chrome-experiment-made-with-some.html', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('eb6f2d388a77e1f7d067a924970622d630031365fd444abe776d974d95b21990', $feed->items[0]->getId());
|
||||
$this->assertEquals('b64b5e0ce422566fa768e8c66da61ab5759c00b2289adbe8fe2f35ecfe211184', $feed->items[1]->getId());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('eb6f2d388a77e1f7d067a924970622d630031365fd444abe776d974d95b21990', $feed->items[0]->getId());
|
||||
$this->assertEquals('b64b5e0ce422566fa768e8c66da61ab5759c00b2289adbe8fe2f35ecfe211184', $feed->items[1]->getId());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('eb6f2d388a77e1f7d067a924970622d630031365fd444abe776d974d95b21990', $feed->items[0]->getId());
|
||||
$this->assertEquals('b64b5e0ce422566fa768e8c66da61ab5759c00b2289adbe8fe2f35ecfe211184', $feed->items[1]->getId());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', $feed->items[0]->getId());
|
||||
}
|
||||
|
||||
public function testItemTitle()
|
||||
public function testFindItemUrl()
|
||||
{
|
||||
// items[0] === rel="alternate"
|
||||
// items[1] === no rel
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl());
|
||||
|
||||
// relative url
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getUrl());
|
||||
}
|
||||
|
||||
public function testFindItemTitle()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('Safer Internet Day: How we help you stay secure online', $feed->items[1]->getTitle());
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_fallback_on_invalid_item_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)', $feed->items[2]->getTitle());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getTitle());
|
||||
}
|
||||
|
||||
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'));
|
||||
|
||||
// items[0] === updated element
|
||||
// items[1] === published element
|
||||
// items[2] === fallback to feed date
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(1360011661, $feed->items[1]->getDate()->getTimestamp(), '', 1);
|
||||
$this->assertEquals(1433451720, $feed->items[0]->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451720, $feed->items[1]->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451900, $feed->items[2]->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(1071340202, $feed->items[0]->getDate()->getTimestamp(), '', 1);
|
||||
$this->assertEquals(1433451720, $feed->items[0]->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451720, $feed->items[1]->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451900, $feed->items[2]->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/youtube.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(1336825342, $feed->items[1]->getDate()->getTimestamp(), '', 1); // Should return the published date
|
||||
$this->assertEquals(1433451720, $feed->items[0]->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451720, $feed->items[1]->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451900, $feed->items[2]->getDate()->getTimestamp());
|
||||
|
||||
// prefer most recent date and not a particular date element
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_element_preference.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1433455500, $feed->items[0]->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->getDate()->getTimestamp(), '', 1);
|
||||
}
|
||||
|
||||
public function testItemLanguage()
|
||||
{
|
||||
// items[0] === language tag on Language-Sensitive element (title)
|
||||
// items[1] === language tag on root node
|
||||
// items[2] === fallback to feed language
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('', $feed->items[1]->getLanguage());
|
||||
$this->assertEquals('bg', $feed->items[0]->getLanguage());
|
||||
$this->assertEquals('bg', $feed->items[1]->getLanguage());
|
||||
$this->assertEquals('ru', $feed->items[2]->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/hamakor.xml'), '', 'http://planet.hamakor.org.il');
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('he', $feed->items[0]->getLanguage());
|
||||
$this->assertTrue($feed->items[0]->isRTL());
|
||||
$this->assertEquals('en-US', $feed->items[1]->getLanguage());
|
||||
$this->assertFalse($feed->items[1]->isRTL());
|
||||
$this->assertEquals('bg', $feed->items[0]->getLanguage());
|
||||
$this->assertEquals('bg', $feed->items[1]->getLanguage());
|
||||
$this->assertEquals('ru', $feed->items[2]->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('bg', $feed->items[0]->getLanguage());
|
||||
$this->assertEquals('bg', $feed->items[1]->getLanguage());
|
||||
$this->assertEquals('ru', $feed->items[2]->getLanguage());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getLanguage());
|
||||
}
|
||||
|
||||
public function testItemAuthor()
|
||||
{
|
||||
// items[0] === item author
|
||||
// items[1] === feed author via empty fallback
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('Emily Wood', $feed->items[1]->getAuthor());
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Вики педии - свободной энциклопедии', $feed->items[1]->getAuthor());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('John Doe', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Вики педии - свободной энциклопедии', $feed->items[1]->getAuthor());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Вики педии - свободной энциклопедии', $feed->items[1]->getAuthor());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getAuthor());
|
||||
}
|
||||
|
||||
public function testItemContent()
|
||||
{
|
||||
// items[0] === <summary>
|
||||
// items[1] === <content> CDATA raw html
|
||||
// items[2] === <content> escaped html
|
||||
// items[3] === <content> raw html
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
$this->assertTrue(strpos($feed->items[2]->getContent(), "<h1>\nДоктор Живаго\n</h1>\n<p>\n<b>«До́ктор Жива́го»</b> ") === 0);
|
||||
$this->assertTrue(strpos($feed->items[3]->getContent(), "<h1>\nГерой нашего времени\n</h1><p>\n<b>«Геро́й на́шего вре́мени»</b> \n(написан в 1838—1840) — знаменитый роман \n<a href=\"/wiki/%D0%9B") === 0);
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
$this->assertTrue(strpos($feed->items[2]->getContent(), "<h1>\nДоктор Живаго\n</h1>\n<p>\n<b>«До́ктор Жива́го»</b> ") === 0);
|
||||
$this->assertTrue(strpos($feed->items[3]->getContent(), "<h1>\nГерой нашего времени\n</h1><p>\n<b>«Геро́й на́шего вре́мени»</b> \n(написан в 1838—1840) — знаменитый роман \n<a href=\"/wiki/%D0%9B") === 0);
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
$this->assertTrue(strpos($feed->items[2]->getContent(), "<h1>\nДоктор Живаго\n</h1>\n<p>\n<b>«До́ктор Жива́го»</b> ") === 0);
|
||||
$this->assertTrue(strpos($feed->items[3]->getContent(), "<h1>\nГерой нашего времени\n</h1><p>\n<b>«Геро́й на́шего вре́мени»</b> \n(написан в 1838—1840) — знаменитый роман \n<a href=\"/wiki/%D0%9B") === 0);
|
||||
|
||||
// <content> is preferred over <summary>
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_element_preference.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_fallback_on_invalid_item_values.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "Осенью 1865 года, потеряв все свои\nденьги в казино") === 0); // <content> => <summary>
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getContent());
|
||||
}
|
||||
|
||||
public function testFindItemEnclosure()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), '<p>Technology can') === 0);
|
||||
$this->assertEquals('https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('image/gif', $feed->items[0]->getEnclosureType());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atomsample.xml'));
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), '<p>Some text.') === 0);
|
||||
$this->assertEquals('https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('image/gif', $feed->items[0]->getEnclosureType());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('image/gif', $feed->items[0]->getEnclosureType());
|
||||
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('', $feed->items[0]->getEnclosureType());
|
||||
}
|
||||
}
|
@ -21,4 +21,16 @@ class ItemTest extends PHPUnit_Framework_TestCase
|
||||
$item->language = 'ru';
|
||||
$this->assertFalse($item->isRTL());
|
||||
}
|
||||
|
||||
public function testGetTag()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/podbean.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(array('http://aroundthebloc.podbean.com/e/s03e11-finding-nemo-rocco/'), $feed->items[0]->getTag('guid'));
|
||||
$this->assertEquals(array('false'), $feed->items[0]->getTag('guid', 'isPermaLink'));
|
||||
$this->assertEquals(array('http://aroundthebloc.podbean.com/mf/web/28bcnk/ATBLogo-BlackBackground.png'), $feed->items[0]->getTag('media:content', 'url'));
|
||||
$this->assertEquals(array('http://aroundthebloc.podbean.com/e/s03e11-finding-nemo-rocco/feed/'), $feed->items[0]->getTag('wfw:commentRss'));
|
||||
$this->assertEquals(array(), $feed->items[0]->getTag('wfw:notExistent'));
|
||||
$this->assertCount(7, $feed->items[0]->getTag('itunes:*'));
|
||||
}
|
||||
}
|
||||
|
@ -23,17 +23,6 @@ class ParserTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertFalse(Parser::isLanguageRTL('ru'));
|
||||
}
|
||||
|
||||
public function testNamespaceValue()
|
||||
{
|
||||
$xml = XmlParser::getSimpleXml(file_get_contents('tests/fixtures/rue89.xml'));
|
||||
$this->assertNotFalse($xml);
|
||||
$namespaces = $xml->getNamespaces(true);
|
||||
|
||||
$parser = new Rss20('');
|
||||
$this->assertEquals('Blandine Grosjean', XmlParser::getNamespaceValue($xml->channel->item[0], $namespaces, 'creator'));
|
||||
$this->assertEquals('Pierre-Carl Langlais', XmlParser::getNamespaceValue($xml->channel->item[1], $namespaces, 'creator'));
|
||||
}
|
||||
|
||||
public function testFeedsWithInvalidCharacters()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/lincoln_loop.xml'));
|
||||
@ -44,4 +33,39 @@ class ParserTest extends PHPUnit_Framework_TestCase
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
}
|
||||
|
||||
public function testFeedEncodingsAreSupported()
|
||||
{
|
||||
// windows-1251
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/ibash.ru.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('<p>Хабр, обсуждение фейлов на работе: reaferon: Интернет-магазин с оборотом более 1 млн. в месяц. При округлении цены до двух знаков после запятой: $price = round($price,2); была допущена досадная опечатка $price = rand($price,2);</p>', $feed->items[0]->getContent());
|
||||
|
||||
// CP1251
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/xakep.ru.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Bug Bounty — другая сторона медали', $feed->items[23]->title);
|
||||
$this->assertEquals('<p>Бывший директор АНБ, генерал Майкл Хэйден снова показал себя во всей красе.</p>', $feed->items[0]->getContent());
|
||||
}
|
||||
|
||||
public function testXMLTagStrippingIsUsed()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/jeux-linux.fr.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
}
|
||||
|
||||
public function testHTTPEncodingFallbackIsUsed()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/cercle.psy.xml'), 'iso-8859-1');
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
}
|
||||
|
||||
public function testFeedURLFallbackIsUsed()
|
||||
{
|
||||
$parser = new Atom(file_get_contents('tests/fixtures/atom_empty_feed.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/category/Russian-language_literature.xml', $feed->getFeedUrl());
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace PicoFeed\Parser;
|
||||
|
||||
use PHPUnit_Framework_TestCase;
|
||||
@ -15,105 +16,337 @@ class Rss10ParserTest extends PHPUnit_Framework_TestCase
|
||||
$parser->execute();
|
||||
}
|
||||
|
||||
public function testFeedTitle()
|
||||
public function testGetItemsTree()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Planète jQuery : l'actualité jQuery, plugins jQuery et tutoriels jQuery en français", $feed->getTitle());
|
||||
$this->assertCount(2, $feed->items);
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertCount(3, $feed->items);
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertCount(1, $feed->items);
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(array(), $feed->items);
|
||||
}
|
||||
|
||||
public function testFeedUrl()
|
||||
public function testFindFeedTitle()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_fallback_on_invalid_feed_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
}
|
||||
|
||||
public function testFindFeedDescription()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getDescription());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getDescription());
|
||||
}
|
||||
|
||||
public function testFindFeedLogo()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getLogo());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getLogo());
|
||||
}
|
||||
|
||||
public function testFindFeedIcon()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getIcon());
|
||||
}
|
||||
|
||||
public function testFindFeedUrl()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getFeedUrl());
|
||||
}
|
||||
|
||||
public function testSiteUrl()
|
||||
public function testFindSiteUrl()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://planete-jquery.fr/', $feed->getSiteUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml'); // relative url
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getSiteUrl());
|
||||
}
|
||||
|
||||
public function testFeedId()
|
||||
public function testFindFeedId()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://planete-jquery.fr/', $feed->getId());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getId());
|
||||
}
|
||||
|
||||
public function testFeedDate()
|
||||
public function testFindFeedDate()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1363752990, $feed->getDate()->getTimestamp(), '', 1);
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->getDate()->getTimestamp(), '', 1);
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->getDate()->getTimestamp(), '', 1);
|
||||
}
|
||||
|
||||
public function testFeedLanguage()
|
||||
public function testFindFeedLanguage()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('fr', $feed->getLanguage());
|
||||
$this->assertEquals('fr', $feed->items[0]->getLanguage());
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
}
|
||||
|
||||
public function testItemId()
|
||||
public function testFindItemId()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('eb6f2d388a77e1f7d067a924970622d630031365fd444abe776d974d95b21990', $feed->items[0]->getId());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', $feed->items[0]->getId());
|
||||
}
|
||||
|
||||
public function testFindItemUrl()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <rss:link>
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl()); // <feedburner:origLink>
|
||||
|
||||
// relative urls
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <rss:link>
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl()); // <feedburner:origLink>
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <rss:link>
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <rss:link>
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_element_preference.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <feedburner:origLink> is preferred over <rss:link>
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getUrl());
|
||||
}
|
||||
|
||||
public function testFindItemTitle()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_fallback_on_invalid_item_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)', $feed->items[2]->getTitle());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getTitle());
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: Add test of feed date fallback
|
||||
*/
|
||||
public function testFindItemDate()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1433451720, $feed->items[0]->getDate()->getTimestamp()); // item date
|
||||
$this->assertEquals(1433451900, $feed->items[1]->getDate()->getTimestamp()); // fallback to feed date
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->items[0]->getDate()->getTimestamp(), 1);
|
||||
}
|
||||
|
||||
public function testFindItemLanguage()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('bg', $feed->items[0]->getLanguage()); // item language
|
||||
$this->assertEquals('ru', $feed->items[1]->getLanguage()); // fallback to feed language
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getAuthor());
|
||||
}
|
||||
|
||||
public function testFindItemAuthor()
|
||||
{
|
||||
// items[0] === item author
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getAuthor());
|
||||
}
|
||||
|
||||
public function testFindItemContent()
|
||||
{
|
||||
// items[0] === <description>
|
||||
// items[1] === <content:encoded>
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
|
||||
$item = $feed->items[0];
|
||||
$this->assertEquals($parser->generateId($item->getTitle(), $item->getUrl(), $item->getContent()), $item->getId());
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_no_default_namespace.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_prefixed.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
|
||||
// <content:encoding> is preferred over <description>
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_element_preference.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_fallback_on_invalid_item_values.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "Осенью 1865 года, потеряв все свои\nденьги в казино") === 0); // <content:encoded> => <description>
|
||||
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10_empty_item.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getContent());
|
||||
}
|
||||
|
||||
public function testItemUrl()
|
||||
public function testFindItemEnclosure()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/rss_10.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://www.mathieurobin.com/2013/03/chroniques-jquery-episode-108/', $feed->items[0]->getUrl());
|
||||
}
|
||||
|
||||
public function testItemTitle()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('LaFermeDuWeb : PowerTip - Des tooltips aux fonctionnalités avancées', $feed->items[1]->getTitle());
|
||||
}
|
||||
|
||||
public function testItemDate()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(1362647700, $feed->items[1]->getDate()->getTimestamp(), '', 1);
|
||||
}
|
||||
|
||||
public function testItemLanguage()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('fr', $feed->items[1]->getLanguage());
|
||||
}
|
||||
|
||||
public function testItemAuthor()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('LaFermeDuWeb', $feed->items[1]->getAuthor());
|
||||
}
|
||||
|
||||
public function testItemContent()
|
||||
{
|
||||
$parser = new Rss10(file_get_contents('tests/fixtures/planete-jquery.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), '<a href="http://www.lafermeduweb.net') === 0);
|
||||
$this->assertEquals('', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('', $feed->items[0]->getEnclosureType());
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
namespace PicoFeed\Parser;
|
||||
|
||||
use PHPUnit_Framework_TestCase;
|
||||
use DateTime;
|
||||
|
||||
|
||||
class Rss20ParserTest extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
@ -16,254 +16,296 @@ class Rss20ParserTest extends PHPUnit_Framework_TestCase
|
||||
$parser->execute();
|
||||
}
|
||||
|
||||
public function testFeedTitle()
|
||||
public function testGetItemsTree()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('WordPress News', $feed->getTitle());
|
||||
$this->assertCount(4, $feed->items);
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('PC INpact', $feed->getTitle());
|
||||
$this->assertEquals(array(), $feed->items);
|
||||
}
|
||||
|
||||
public function testFeedDescription()
|
||||
public function testFindFeedTitle()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('WordPress News', $feed->getDescription());
|
||||
$this->assertEquals('литература на русском языке, либо написанная русскими авторами', $feed->getTitle());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_fallback_on_invalid_feed_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Actualités Informatique', $feed->getDescription());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getTitle());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/sametmax.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Deux développeurs en vadrouille qui se sortent les doigts du code', $feed->getDescription());
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
}
|
||||
|
||||
public function testFeedLogo()
|
||||
public function testFindFeedDescription()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals("Зародилась во второй половине X века, однако до XIX века,\nкогда начался её «золотой век», была практически неизвестна\nв мире.", $feed->getDescription());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getDescription());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getDescription());
|
||||
}
|
||||
|
||||
public function testFindFeedLogo()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('https://ru.wikipedia.org/static/images/project-logos/ruwiki.png', $feed->getLogo());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getLogo());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/radio-france.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://media.radiofrance-podcast.net/podcast09/RF_OMM_0000006330_ITE.jpg', $feed->getLogo());
|
||||
$this->assertEquals('', $feed->getLogo());
|
||||
}
|
||||
|
||||
public function testFeedUrl()
|
||||
public function testFindFeedIcon()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getFeedUrl());
|
||||
$this->assertEquals('', $feed->getIcon());
|
||||
}
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'), '', 'http://example.com/feed');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://example.com/feed', $feed->getFeedUrl());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
|
||||
public function testFindFeedUrl()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getFeedUrl());
|
||||
}
|
||||
|
||||
public function testSiteUrl()
|
||||
public function testFindSiteUrl()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://wordpress.org/news', $feed->getSiteUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml'); // relative url
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://www.pcinpact.com/', $feed->getSiteUrl());
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getSiteUrl());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getSiteUrl());
|
||||
}
|
||||
|
||||
public function testFeedId()
|
||||
public function testFindFeedId()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://wordpress.org/news', $feed->getId());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Category:Russian-language_literature', $feed->getId());
|
||||
}
|
||||
|
||||
public function testFeedDate()
|
||||
public function testFindFeedDate()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
// pubDate
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1359066183, $feed->getDate()->getTimestamp());
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml'));
|
||||
// lastBuildDate
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_extra.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1433451900, $feed->getDate()->getTimestamp());
|
||||
|
||||
// prefer most recent date and not a particular date element
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_element_preference.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(1433455500, $feed->getDate()->getTimestamp());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->getDate()->getTimestamp(), '', 1);
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals(time(), $feed->getDate()->getTimestamp(), '', 1);
|
||||
}
|
||||
|
||||
public function testFeedLanguage()
|
||||
public function testFindFeedLanguage()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('en-US', $feed->getLanguage());
|
||||
$this->assertEquals('en-US', $feed->items[0]->getLanguage());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/zoot_egkty.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('ur', $feed->getLanguage());
|
||||
$this->assertEquals('ur', $feed->items[0]->getLanguage());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/ibash.ru.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('ru', $feed->getLanguage());
|
||||
$this->assertEquals('ru', $feed->items[0]->getLanguage());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_channel.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_feed.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->getTitle());
|
||||
}
|
||||
|
||||
public function testItemId()
|
||||
public function testFindItemId()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml')); // <guid>
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('de679f14fc4774f0d6dfe73c3f8c8368ab85da18addf101a2af8c32ac6320f9f', $feed->items[0]->getId());
|
||||
$this->assertEquals('06e53052cd17cdfb264d9c37d495cc3746ac43f79488c7ce67894e718f674bd5', $feed->items[1]->getId());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml')); // alternate generation
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(hash('sha256', '78872'), $feed->items[0]->getId());
|
||||
$this->assertEquals('eb6f2d388a77e1f7d067a924970622d630031365fd444abe776d974d95b21990', $feed->items[0]->getId());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(hash('sha256', 'http://www.numerama.com/magazine/25669-brevets-un-juge-doute-de-la-bonne-volonte-de-google-et-apple.html'), $feed->items[0]->getId());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/debug_show.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(hash('sha256', '38DC2FF1-4207-4C04-93F3-2DAFB0E559D9'), $feed->items[1]->getId());
|
||||
$this->assertEquals(hash('sha256', '3FA03A63-BEA2-4199-A1E4-D2963845F3F6'), $feed->items[2]->getId());
|
||||
$this->assertEquals($feed->items[1]->getUrl(), $feed->items[2]->getUrl());
|
||||
$this->assertNotEquals($feed->items[1]->getId(), $feed->items[2]->getId());
|
||||
$this->assertEquals('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', $feed->items[0]->getId());
|
||||
}
|
||||
|
||||
public function testItemUrl()
|
||||
public function testFindItemUrl()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://wordpress.org/news/2013/01/wordpress-3-5-1/', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <rss:link>
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl()); // <atom:link>
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)', $feed->items[2]->getUrl()); // <feedburner:origLink>
|
||||
$this->assertEquals('https://guid.wikipedia.org/wiki/A_Hero_of_Our_Time', $feed->items[3]->getUrl()); // <guid>
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/pcinpact.xml'));
|
||||
// relative urls
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_extra.xml'), '', 'https://feeds.wikipedia.org/category/Russian-language_literature.xml');
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://www.pcinpact.com/breve/78872-la-dcri-purge-wikipedia-par-menace-bel-effet-streisand-a-cle.htm?utm_source=PCi_RSS_Feed&utm_medium=news&utm_campaign=pcinpact', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <rss:link>
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl()); // <atom:link>
|
||||
$this->assertEquals('https://feeds.wikipedia.org/wiki/Doctor_Zhivago_(novel)', $feed->items[2]->getUrl()); // <feedburner:origLink>
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/dailymail.co.uk.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_element_preference.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://www.dailymail.co.uk/sport/sportsnews/article-3146732/Heartbreak-tears-England-Lionesses-crash-Women-s-World-Cup-defender-Laura-Bassett-scores-freak-goal-injury-time-Japan-final.html?ITO=1490&ns_mchannel=rss&ns_campaign=1490', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/War_and_Peace', $feed->items[0]->getUrl()); // <feedburner:origLink> is preferred over <rss:link>, <atom:link>, <guid>
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Crime_and_Punishment', $feed->items[1]->getUrl()); // <rss:link> is preferred over <atom:link>, <guid>
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)', $feed->items[2]->getUrl()); // <atom:link> is preferred over <guid>
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_fallback_on_invalid_item_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getUrl()); // <guid> is invalid URI
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getUrl());
|
||||
}
|
||||
|
||||
public function testItemTitle()
|
||||
public function testFindItemTitle()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('2012: A Look Back', $feed->items[1]->getTitle());
|
||||
$this->assertEquals('Война и мир', $feed->items[0]->getTitle());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/womensweardaily.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_fallback_on_invalid_item_values.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('They Are Wearing: Frieze London Photo by Marcus Dawes', $feed->items[3]->getTitle());
|
||||
$this->assertEquals('https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)', $feed->items[2]->getTitle());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getTitle());
|
||||
}
|
||||
|
||||
public function testItemDate()
|
||||
public function testFindItemDate()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('2013-01-01', $feed->items[1]->getDate()->format('Y-m-d'));
|
||||
$this->assertEquals(1433451720, $feed->items[0]->getDate()->getTimestamp()); // item date
|
||||
$this->assertEquals(1433451900, $feed->items[1]->getDate()->getTimestamp()); // fallback to feed date
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/fulltextrss.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('2013-04-12', $feed->items[0]->getDate()->format('Y-m-d'));
|
||||
$this->assertEquals(time(), $feed->items[0]->getDate()->getTimestamp(), 1);
|
||||
}
|
||||
|
||||
public function testItemLanguage()
|
||||
public function testFindItemLanguage()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('en-US', $feed->items[1]->getLanguage());
|
||||
$this->assertEquals('bg', $feed->items[0]->getLanguage()); // item language
|
||||
$this->assertEquals('ru', $feed->items[1]->getLanguage()); // fallback to feed language
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getLanguage());
|
||||
}
|
||||
|
||||
public function testItemAuthor()
|
||||
public function testFindItemAuthor()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
// items[0] === item author
|
||||
// items[1] === feed author via empty fallback (channel/managingEditor)
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('Jen Mylo', $feed->items[1]->getAuthor());
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Вики педии - свободной энциклопедии', $feed->items[1]->getAuthor());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss2sample.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_dc.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('webmaster@example.com', $feed->items[2]->getAuthor());
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Вики педии - свободной энциклопедии', $feed->items[1]->getAuthor());
|
||||
|
||||
// <dc:creator> is preferred over <author>
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_element_preference.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('Лев Николаевич Толсто́й', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('Вики педии - свободной энциклопедии', $feed->items[1]->getAuthor());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('', $feed->items[0]->getAuthor());
|
||||
}
|
||||
|
||||
public function testItemContent()
|
||||
public function testFindItemContent()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/allgemeine-zeitung.xml'));
|
||||
// items[0] === <description>
|
||||
// items[1] === <content:encoded>
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(
|
||||
'<p>OBER-FLÖRSHEIM - (red). Sein erheblich beschädigtes Fahrzeug hat ein Fahrer in der Nacht von Donnerstag auf Freitag mitten auf der Ober-Flörsheimer Hauptstraße stehen lassen. Beim Verlassen des Autos in Richtung ...</p>',
|
||||
$feed->items[2]->getContent()
|
||||
);
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), "В наброске предисловия к «Войне и миру» Толстой\nписал, что в 1856 г.") === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss20.xml'));
|
||||
// <content:encoding> is preferred over <description>
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_element_preference.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), '<p>Another year is coming') === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "<h1>\nИстория создания\n</h1>\n<p>\nОсенью \n<a href=\"/wiki/1865_%D0%B3%D0%BE%D0%B4\"") === 0);
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss2sample.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_fallback_on_invalid_item_values.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), '<p>Sky watchers in Europe') === 0);
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), "Осенью 1865 года, потеряв все свои\nденьги в казино") === 0); // <content:encoded> => <description>
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/ibash.ru.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$parser->disableContentFiltering();
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertTrue(strpos($feed->items[0]->getContent(), '<p>Хабр, обсуждение фейлов на работе: reaferon: Интернет') === 0);
|
||||
$this->assertEquals('', $feed->items[0]->getContent());
|
||||
}
|
||||
|
||||
public function testItemEnclosure()
|
||||
public function testFindItemEnclosure()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rue89.xml'));
|
||||
// Test tests covers the preference of <feedburner:origEnclosureLink> over <enclosure> as well
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://rue89.feedsportal.com/c/33822/f/608948/e/1/s/2a687021/l/0L0Srue890N0Csites0Cnews0Cfiles0Cstyles0Cmosaic0Cpublic0Czapnet0Cthumbnail0Isquare0C20A130C0A40Ccahuzac0I10Bpng/cahuzac_1.png', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('image/png', $feed->items[0]->getEnclosureType());
|
||||
}
|
||||
$this->assertEquals('https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif', $feed->items[0]->getEnclosureUrl()); // <enclosure>
|
||||
$this->assertEquals('image/gif', $feed->items[0]->getEnclosureType());
|
||||
$this->assertEquals('https://upload.wikimedia.org/wikipedia/commons/7/7b/Crime_and_Punishment-1.png', $feed->items[1]->getEnclosureUrl()); // <feedburner:origEnclosureLink>
|
||||
|
||||
public function testFeedsReportedAsNotWorking()
|
||||
{
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/biertaucher.xml'));
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/rss_20_empty_item.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(177, count($feed->items));
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/radio-france.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals(52, count($feed->items));
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/fanboys.fm_episodes.all.mp3.rss'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/geekstammtisch.de_episodes.mp3.rss'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('http://geekstammtisch.de/#GST001', $feed->items[1]->getUrl());
|
||||
|
||||
$parser = new Rss20(file_get_contents('tests/fixtures/jeux-linux.fr.xml'));
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
$this->assertEquals('', $feed->items[0]->getEnclosureUrl());
|
||||
$this->assertEquals('', $feed->items[0]->getEnclosureType());
|
||||
}
|
||||
}
|
@ -25,7 +25,7 @@ class Rss91ParserTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('http://writetheweb.com/read.php?item=24', $feed->items[0]->getUrl());
|
||||
$this->assertEquals('085a9133a75542f878fa73ee2afbb6a2350b6c4fb125e6d8ca09478c47702111', $feed->items[0]->getId());
|
||||
$this->assertEquals(time(), $feed->items[0]->getDate()->getTimestamp(), '', 1);
|
||||
$this->assertEquals('webmaster@writetheweb.com', $feed->items[0]->getAuthor());
|
||||
$this->assertEquals('editor@writetheweb.com', $feed->items[0]->getAuthor());
|
||||
$this->assertTrue(strpos($feed->items[1]->getContent(), '<p>After a period of dormancy') === 0);
|
||||
}
|
||||
}
|
@ -176,4 +176,22 @@ XML;
|
||||
$this->assertTrue($result instanceof DOMDocument);
|
||||
$this->assertTrue($result->validate());
|
||||
}
|
||||
|
||||
public function testReplaceXPathPrefixWithNamespaceURI()
|
||||
{
|
||||
$ns = array('lorem' => 'https://en.wikipedia.org/wiki/Lorem');
|
||||
$query = '//lorem:title';
|
||||
$expected = '//*[namespace-uri()="https://en.wikipedia.org/wiki/Lorem" and local-name()="title"]';
|
||||
$this->assertEquals($expected, XmlParser::replaceXPathPrefixWithNamespaceURI($query, $ns));
|
||||
|
||||
$ns = array('lorem' => 'https://en.wikipedia.org/wiki/Lorem', 'ipsum' => 'https://en.wikipedia.org/wiki/Ipsum');
|
||||
$query = '//lorem:title/ipsum:name';
|
||||
$expected = '//*[namespace-uri()="https://en.wikipedia.org/wiki/Lorem" and local-name()="title"]/*[namespace-uri()="https://en.wikipedia.org/wiki/Ipsum" and local-name()="name"]';
|
||||
$this->assertEquals($expected, XmlParser::replaceXPathPrefixWithNamespaceURI($query, $ns));
|
||||
|
||||
$ns = array('lorem' => 'https://en.wikipedia.org/wiki/Lorem', 'ipsum' => 'https://en.wikipedia.org/wiki/Ipsum');
|
||||
$query = '//lorem:title/ipsum:name/@xml:lang';
|
||||
$expected = '//*[namespace-uri()="https://en.wikipedia.org/wiki/Lorem" and local-name()="title"]/*[namespace-uri()="https://en.wikipedia.org/wiki/Ipsum" and local-name()="name"]/@xml:lang';
|
||||
$this->assertEquals($expected, XmlParser::replaceXPathPrefixWithNamespaceURI($query, $ns));
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
/**
|
||||
* @group online
|
||||
*/
|
||||
public function testDownload_withHTTP()
|
||||
public function testDownloadHTTP()
|
||||
{
|
||||
$reader = new Reader;
|
||||
$feed = $reader->download('http://wordpress.org/news/feed/')->getContent();
|
||||
@ -28,7 +28,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
/**
|
||||
* @group online
|
||||
*/
|
||||
public function testDownload_withHTTPS()
|
||||
public function testDownloadHTTPS()
|
||||
{
|
||||
$reader = new Reader;
|
||||
$feed = $reader->download('https://wordpress.org/news/feed/')->getContent();
|
||||
@ -38,7 +38,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
/**
|
||||
* @group online
|
||||
*/
|
||||
public function testDownload_withCache()
|
||||
public function testDownloadCache()
|
||||
{
|
||||
$reader = new Reader;
|
||||
$resource = $reader->download('http://linuxfr.org/robots.txt');
|
||||
@ -84,9 +84,6 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$reader = new Reader;
|
||||
$this->assertEquals('Rss20', $reader->detectFormat(file_get_contents('tests/fixtures/ezrss.it')));
|
||||
|
||||
$reader = new Reader;
|
||||
$this->assertEquals('Rss20', $reader->detectFormat(file_get_contents('tests/fixtures/grotte_barbu.xml')));
|
||||
|
||||
$content = '<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2titles.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemtitles.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">';
|
||||
|
||||
@ -94,7 +91,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('Rss20', $reader->detectFormat($content));
|
||||
}
|
||||
|
||||
public function testFind_rssFeed()
|
||||
public function testFindRssFeed()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -106,7 +103,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_atomFeed()
|
||||
public function testFindAtomFeed()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -118,7 +115,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_feedNotInHead()
|
||||
public function testFindFeedNotInHead()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -131,7 +128,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_noFeedPresent()
|
||||
public function testFindNoFeedPresent()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -142,7 +139,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array(), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_ignoreUnknownType()
|
||||
public function testFindIgnoreUnknownType()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -154,7 +151,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array(), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_ignoreTypeInOtherAttribute()
|
||||
public function testFindIgnoreTypeInOtherAttribute()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -166,7 +163,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array(), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_withOtherAttributesPresent()
|
||||
public function testFindWithOtherAttributesPresent()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -178,7 +175,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array('http://miniflux.net/feed'), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_multipleFeeds()
|
||||
public function testFindMultipleFeeds()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -199,7 +196,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
);
|
||||
}
|
||||
|
||||
public function testFind_withInvalidHTML()
|
||||
public function testFindWithInvalidHTML()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -211,7 +208,7 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array(), $feeds);
|
||||
}
|
||||
|
||||
public function testFind_withHtmlParamEmptyString()
|
||||
public function testFindWithHtmlParamEmptyString()
|
||||
{
|
||||
$reader = new Reader;
|
||||
|
||||
@ -244,15 +241,29 @@ class ReaderTest extends PHPUnit_Framework_TestCase
|
||||
$this->assertInstanceOf('PicoFeed\Parser\Atom', $reader->getParser($client->getUrl(), $client->getContent(), $client->getEncoding()));
|
||||
}
|
||||
|
||||
public function testGetParserUsesHTTPEncoding()
|
||||
{
|
||||
$reader = new Reader;
|
||||
$parser = $reader->getParser('http://blah', file_get_contents('tests/fixtures/cercle.psy.xml'), 'iso-8859-1');
|
||||
$feed = $parser->execute();
|
||||
$this->assertInstanceOf('PicoFeed\Parser\Rss20', $parser);
|
||||
$this->assertNotEmpty($feed->items);
|
||||
|
||||
}
|
||||
|
||||
public function testGetParserUsesSiteURL()
|
||||
{
|
||||
$reader = new Reader;
|
||||
$parser = $reader->getParser('http://groovehq.com/', file_get_contents('tests/fixtures/groovehq.xml'), '');
|
||||
$feed = $parser->execute();
|
||||
$this->assertEquals('http://groovehq.com/articles.xml', $feed->getFeedUrl());
|
||||
}
|
||||
|
||||
public function testFeedsReportedAsNotWorking()
|
||||
{
|
||||
$reader = new Reader;
|
||||
$this->assertInstanceOf('PicoFeed\Parser\Rss20', $reader->getParser('http://blah', file_get_contents('tests/fixtures/cercle.psy.xml'), 'utf-8'));
|
||||
|
||||
$reader = new Reader;
|
||||
$this->assertInstanceOf('PicoFeed\Parser\Rss20', $reader->getParser('http://blah', file_get_contents('tests/fixtures/ezrss.it'), 'utf-8'));
|
||||
|
||||
$reader = new Reader;
|
||||
$this->assertInstanceOf('PicoFeed\Parser\Rss20', $reader->getParser('http://blah', file_get_contents('tests/fixtures/grotte_barbu.xml'), 'utf-8'));
|
||||
$parser = $reader->getParser('http://blah', file_get_contents('tests/fixtures/ezrss.it'), '');
|
||||
$feed = $parser->execute();
|
||||
$this->assertNotEmpty($feed->items);
|
||||
}
|
||||
}
|
||||
|
@ -1,122 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
|
||||
|
||||
|
||||
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
|
||||
<channel>
|
||||
<title>Allgemeine Zeitung - Aktuelle Polizei-Meldungen aus der Region</title>
|
||||
<description>Allgemeine Zeitung RSS-Feed für die Rubrik Aktuelle Polizei-Meldungen aus der Region</description>
|
||||
<link>http://www.allgemeine-zeitung.de</link>
|
||||
<language>de</language>
|
||||
<pubDate>Sun, 01 Mar 2015 19:18:57 +0100</pubDate>
|
||||
<image>
|
||||
<title>Allgemeine Zeitung</title>
|
||||
<link>http://www.allgemeine-zeitung.de</link>
|
||||
<url>http://www.allgemeine-zeitung.de/pics/edition/az/rss.png</url>
|
||||
</image>
|
||||
|
||||
<item>
|
||||
<title>Bad Kreuznach: Ursache für Brand in der ehemaligen Rose-Barracks-Kantine geklärt</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/bad-kreuznach-ursache-fuer-brand-in-der-ehemaligen-rose-barracks-kantine-geklaert_15063090.htm</link>
|
||||
<description>BAD KREUZNACH - Die Ursache für den Brand im Gebäude der ehemaligen Rose Barracks ist geklärt. Die Vermutungen zu den Tätern von Freitag haben sich bestätigt.</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sun, 01 Mar 2015 16:15:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/bad-kreuznach-ursache-fuer-brand-in-der-ehemaligen-rose-barracks-kantine-geklaert_15063090.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
<img src="http://www.allgemeine-zeitung.de/fm/819/thumbnails/1425035953_feuerSturm.jpg.24232019.jpg" align="left" hspace="5" border="0" alt="Die Feuerwehr im Einsatz am Gebäude in den ehemaligen Rose-Barracks. Foto: Heidi Sturm" title="Die Feuerwehr im Einsatz am Gebäude in den ehemaligen Rose-Barracks. Foto: Heidi Sturm" />
|
||||
]]></content:encoded>
|
||||
<enclosure type="image/jpeg" url="http://www.allgemeine-zeitung.de/fm/819/thumbnails/1425035953_feuerSturm.jpg.24232020.jpg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>Vier Verletzte bei Verkehrsunfall auf der A61 am Autobahndreieck Nahetal</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/vier-verletzte-bei-verkehrsunfall-auf-der-a61-am-autobahndreieck-nahetal_15061411.htm</link>
|
||||
<description>GENSINGEN - Bei einem Verkehrsunfall auf der A61 am Autobahndreieck Nahetal in Fahrtrichtung Koblenz sind vier Personen verletzt worden.</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 18:28:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/vier-verletzte-bei-verkehrsunfall-auf-der-a61-am-autobahndreieck-nahetal_15061411.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
<img src="http://www.allgemeine-zeitung.de/fm/819/thumbnails/1425145619_DSC_0300.jpg.24240870.jpg" align="left" hspace="5" border="0" alt="Unfall auf der A61 am Dreieck Nahetal. Foto: kreuznach112.de" title="Unfall auf der A61 am Dreieck Nahetal. Foto: kreuznach112.de" />
|
||||
]]></content:encoded>
|
||||
<enclosure type="image/jpeg" url="http://www.allgemeine-zeitung.de/fm/819/thumbnails/1425145619_DSC_0300.jpg.24240871.jpg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>Unfallauto auf Ober-Flörsheimer Hauptstraße stehen gelassen</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/unfallauto-auf-ober-floersheimer-hauptstrasse-stehen-gelassen_15058634.htm</link>
|
||||
<description>OBER-FLÖRSHEIM - (red). Sein erheblich beschädigtes Fahrzeug hat ein Fahrer in der Nacht von Donnerstag auf Freitag mitten auf der Ober-Flörsheimer Hauptstraße stehen lassen. Beim Verlassen des Autos in Richtung ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/unfallauto-auf-ober-floersheimer-hauptstrasse-stehen-gelassen_15058634.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Bischofsheim: Nach Einbruch verdächtiges Pärchen beobachtet</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/bischofsheim-nach-einbruch-verdaechtiges-paerchen-beobachtet_15058635.htm</link>
|
||||
<description>BISCHOFSHEIM - (red). Im Zusammenhang mit einem Einbruch in der Königsberger Straße sind Zeugen aus der Nachbarschaft auf ein unbekanntes Pärchen aufmerksam geworden. Die Kriminalpolizei in Rüsselsheim ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/bischofsheim-nach-einbruch-verdaechtiges-paerchen-beobachtet_15058635.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Einbrecher erbeuten Schmuck in Niedernhausen</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/einbrecher-erbeuten-schmuck-in-niedernhausen_15058636.htm</link>
|
||||
<description>NIEDERNHAUSEN - (red). Beim Einbruch in ein Einfamilienhaus in der Breslauer Straße in Niedernhausen erbeuteten unbekannte Täter am Donnerstagvormittag einige Schmuckstücke. Die Einbrecher waren durch ein ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/einbrecher-erbeuten-schmuck-in-niedernhausen_15058636.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Zu weit links auf der B 41</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/zu-weit-links-auf-der-b-41_15058637.htm</link>
|
||||
<description>RÜDESHEIM - (red). Bereits am Mittwochmorgen stieß eine 21-jährige Pkw-Fahrerin auf der Landessstraße 236 in Richtung Bundesstraße 41 mit einem zu weit links fahrenden, entgegenkommenden weißen Audi, ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/zu-weit-links-auf-der-b-41_15058637.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Mann droht in Wiesbaden mit Pistole</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/mann-droht-in-wiesbaden-mit-pistole_15058638.htm</link>
|
||||
<description>WIESBADEN - (red). Die Polizei sucht nach einem Unbekannten, der am Donnerstagmittag in der Holzstraße eine Frau mit einer Pistole bedroht haben soll und dadurch einen größeren Einsatz von Polizei und ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/mann-droht-in-wiesbaden-mit-pistole_15058638.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Geparktes Auto beschädigt</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/geparktes-auto-beschaedigt_15058641.htm</link>
|
||||
<description>RÜSSELSHEIM - (red). Im Hasengrund in Höhe des Hauses Nummer 72 ist am Donnerstag zwischen 14 und 15.30 Uhr ein Auto beschädigt worden. Der schwarze Mercedes Benz, C-Klasse, war vor dem Haus abgestellt und ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/geparktes-auto-beschaedigt_15058641.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Diebe stehlen 85 Liter Diesel</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/diebe-stehlen-85-liter-diesel_15058642.htm</link>
|
||||
<description>RÜSSELSHEIM - (red). Dieselkraftstoff im Wert von rund 110 Euro haben unbekannte Diebe am Donnerstagabend mitgehen lassen. DieTäter hatten es in der Zeit von 20.40 Uhr bis 21.25 Uhr auf einen Lastwagen in ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/diebe-stehlen-85-liter-diesel_15058642.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<title>Bad Kreuznach: Betrunkene Frauen am Steuer</title>
|
||||
<link>http://www.allgemeine-zeitung.de/lokales/polizei/bad-kreuznach-betrunkene-frauen-am-steuer_15058643.htm</link>
|
||||
<description>BAD KREUZNACH - (red). Gleich zwei Fälle von Trunkenheit am Steuer registrierte die Polizei am späten Donnerstagabend. Im Rahmen einer Verkehrskontrolle wurde am Europaplatz bei einer 41-jährigen Autofahrerin ...</description>
|
||||
<category>Kirn</category>
|
||||
<pubDate>Sat, 28 Feb 2015 01:00:00 +0100</pubDate>
|
||||
<guid>http://www.allgemeine-zeitung.de/lokales/polizei/bad-kreuznach-betrunkene-frauen-am-steuer_15058643.htm</guid>
|
||||
<content:encoded><![CDATA[
|
||||
]]></content:encoded>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
570
vendor/fguillot/picofeed/tests/fixtures/atom.xml
vendored
570
vendor/fguillot/picofeed/tests/fixtures/atom.xml
vendored
File diff suppressed because one or more lines are too long
38
vendor/fguillot/picofeed/tests/fixtures/atom_element_preference.xml
vendored
Normal file
38
vendor/fguillot/picofeed/tests/fixtures/atom_element_preference.xml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns="http://www.w3.org/2005/Atom"
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo."">
|
||||
|
||||
<entry>
|
||||
<updated>2015-06-05T00:05:00+03:00</updated>
|
||||
<published>2015-06-05T01:05:00+03:00</published>
|
||||
</entry>
|
||||
<entry>
|
||||
<summary>summary pre</summary>
|
||||
<content type="html"><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content>
|
||||
<summary>summary post</summary>
|
||||
</entry>
|
||||
</feed>
|
9
vendor/fguillot/picofeed/tests/fixtures/atom_empty_feed.xml
vendored
Normal file
9
vendor/fguillot/picofeed/tests/fixtures/atom_empty_feed.xml
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns="http://www.w3.org/2005/Atom"
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo.""/>
|
4
vendor/fguillot/picofeed/tests/fixtures/atom_empty_item.xml
vendored
Normal file
4
vendor/fguillot/picofeed/tests/fixtures/atom_empty_item.xml
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
<entry/>
|
||||
</feed>
|
19
vendor/fguillot/picofeed/tests/fixtures/atom_extra.xml
vendored
Normal file
19
vendor/fguillot/picofeed/tests/fixtures/atom_extra.xml
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns="http://www.w3.org/2005/Atom"
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo."" xml:lang="ru">
|
||||
|
||||
<link href="/wiki/Category:Russian-language_literature"/>
|
||||
<link rel="self" href="/category/Russian-language_literature.xml"/>
|
||||
<entry>
|
||||
<link rel="alternate" href="/wiki/War_and_Peace"/>
|
||||
</entry>
|
||||
<entry xml:lang="bg">
|
||||
<link href="/wiki/Crime_and_Punishment"/>
|
||||
</entry>
|
||||
</feed>
|
15
vendor/fguillot/picofeed/tests/fixtures/atom_fallback_on_invalid_feed_values.xml
vendored
Normal file
15
vendor/fguillot/picofeed/tests/fixtures/atom_fallback_on_invalid_feed_values.xml
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns="http://www.w3.org/2005/Atom"
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo."">
|
||||
|
||||
<title>
|
||||
|
||||
</title>
|
||||
<link rel="alternate" href="https://en.wikipedia.org/wiki/Category:Russian-language_literature"/>
|
||||
</feed>
|
28
vendor/fguillot/picofeed/tests/fixtures/atom_fallback_on_invalid_item_values.xml
vendored
Normal file
28
vendor/fguillot/picofeed/tests/fixtures/atom_fallback_on_invalid_item_values.xml
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns="http://www.w3.org/2005/Atom"
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo."">
|
||||
|
||||
<entry/>
|
||||
<entry>
|
||||
<content type="html"><![CDATA[
|
||||
]]>
|
||||
</content>
|
||||
<summary>Осенью 1865 года, потеряв все свои
|
||||
деньги в казино, не в состоянии оплатить долги кредиторам,
|
||||
и стараясь помочь семье своего брата Михаила, который умер в
|
||||
июле 1864 года, Достоевский планирует создание романа с
|
||||
центральным образом семьи Мармеладовых под названием «Пьяненькая».</summary>
|
||||
</entry>
|
||||
<entry>
|
||||
<link rel="alternate" href="https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)"/>
|
||||
<title>
|
||||
|
||||
</title>
|
||||
</entry>
|
||||
</feed>
|
92
vendor/fguillot/picofeed/tests/fixtures/atom_no_default_namespace.xml
vendored
Normal file
92
vendor/fguillot/picofeed/tests/fixtures/atom_no_default_namespace.xml
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo."">
|
||||
|
||||
<title xml:lang="ru">
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</title>
|
||||
<subtitle type="html">Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</subtitle>
|
||||
<logo>https://ru.wikipedia.org/static/images/project-logos/ruwiki.png</logo>
|
||||
<icon>https://ru.wikipedia.org/static/favicon/wikipedia.ico</icon>
|
||||
<link rel="alternate" href="https://en.wikipedia.org/wiki/Category:Russian-language_literature"/>
|
||||
<link rel="self" href="https://feeds.wikipedia.org/category/Russian-language_literature.xml"/>
|
||||
<id>urn:uuid:bd0b2c90-35a3-44e9-a491-4e15508f6d83</id>
|
||||
<updated>2015-06-05T00:05:00+03:00</updated>
|
||||
<author>
|
||||
<name>Вики педии - свободной энциклопедии</name>
|
||||
</author>
|
||||
<entry>
|
||||
<title>
|
||||
Война и
|
||||
мир
|
||||
</title>
|
||||
<author>
|
||||
<name>Лев Николаевич Толсто́й</name>
|
||||
</author>
|
||||
<link rel="alternate" href="https://en.wikipedia.org/wiki/War_and_Peace"/>
|
||||
<updated>2015-06-05T00:02:00+03:00</updated>
|
||||
<summary xml:lang="bg">В наброске предисловия к «Войне и миру» Толстой
|
||||
писал, что в 1856 г. начал писать повесть, «герой
|
||||
которой должен был быть декабрист, возвращающийся
|
||||
с семейством в Россию.</summary>
|
||||
<link rel="enclosure" href="https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif" type="image/gif" length="10889"/>
|
||||
</entry>
|
||||
<entry xml:lang="bg">
|
||||
<id>urn:uuid:32117a95-0962-4826-8aee-1ea7ddd94bec</id>
|
||||
<link href="https://en.wikipedia.org/wiki/Crime_and_Punishment"/>
|
||||
<published>2015-06-05T00:02:00+03:00</published>
|
||||
<content><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<content><h1>
|
||||
Доктор Живаго
|
||||
</h1>
|
||||
<p>
|
||||
<b>«До́ктор Жива́го»</b>
|
||||
— роман Бориса Пастернака. «Доктор Живаго» создавался в течение десяти лет, с
|
||||
<a href="/wiki/1945" title="1945" class="mw-redirect">1945</a> по
|
||||
<a href="/wiki/1955_%D0%B3%D0%BE%D0%B4" title="1955 год">1955 год</a>, и
|
||||
является вершиной его творчества как прозаика. Роман сопровождён стихами
|
||||
главного героя — Юрия Андреевича Живаго.
|
||||
</p></content>
|
||||
</entry>
|
||||
<entry>
|
||||
<content><h1>
|
||||
Герой нашего времени
|
||||
</h1>
|
||||
<p>
|
||||
<b>«Геро́й на́шего вре́мени»</b>
|
||||
(написан в 1838—1840) — знаменитый роман
|
||||
<a href="/wiki/%D0%9B%D0%B5%D1%80%D0%BC%D0%BE%D0%BD%D1%82%D0%BE%D0%B2,_%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%AE%D1%80%D1%8C%D0%B5%D0%B2%D0%B8%D1%87" title="Лермонтов, Михаил Юрьевич">Михаила Юрьевича Лермонтова</a>, классика русской литературы. Впервые роман был издан в
|
||||
<a href="/wiki/%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3" title="Санкт-Петербург">Санкт-Петербурге</a>,
|
||||
в типографии Ильи Глазунова и Кº, в <a href="/wiki/1840_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B5" title="1840 год в литературе">1840</a> г., в 2 книгах. Тираж 1000 экземпляров
|
||||
<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup>.
|
||||
</p></content>
|
||||
</entry>
|
||||
</feed>
|
93
vendor/fguillot/picofeed/tests/fixtures/atom_prefixed.xml
vendored
Normal file
93
vendor/fguillot/picofeed/tests/fixtures/atom_prefixed.xml
vendored
Normal file
@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<feed
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
|
||||
xmlns:blogger="http://schemas.google.com/blogger/2008"
|
||||
xmlns:georss="http://www.georss.org/georss"
|
||||
xmlns:gd="http://schemas.google.com/g/2005"
|
||||
xmlns:thr="http://purl.org/syndication/thread/1.0"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/"DUYHQns6cCp7ImA9WhBTEUo."">
|
||||
|
||||
<atom:title xml:lang="ru">
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</atom:title>
|
||||
<atom:subtitle type="html">Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</atom:subtitle>
|
||||
<atom:logo>https://ru.wikipedia.org/static/images/project-logos/ruwiki.png</atom:logo>
|
||||
<atom:icon>https://ru.wikipedia.org/static/favicon/wikipedia.ico</atom:icon>
|
||||
<atom:link rel="alternate" href="https://en.wikipedia.org/wiki/Category:Russian-language_literature"/>
|
||||
<atom:link rel="self" href="https://feeds.wikipedia.org/category/Russian-language_literature.xml"/>
|
||||
<atom:id>urn:uuid:bd0b2c90-35a3-44e9-a491-4e15508f6d83</atom:id>
|
||||
<atom:updated>2015-06-05T00:05:00+03:00</atom:updated>
|
||||
<atom:author>
|
||||
<atom:name>Вики педии - свободной энциклопедии</atom:name>
|
||||
</atom:author>
|
||||
<atom:entry>
|
||||
<atom:title>
|
||||
Война и
|
||||
мир
|
||||
</atom:title>
|
||||
<atom:author>
|
||||
<atom:name>Лев Николаевич Толсто́й</atom:name>
|
||||
</atom:author>
|
||||
<atom:link rel="alternate" href="https://en.wikipedia.org/wiki/War_and_Peace"/>
|
||||
<atom:updated>2015-06-05T00:02:00+03:00</atom:updated>
|
||||
<atom:summary xml:lang="bg">В наброске предисловия к «Войне и миру» Толстой
|
||||
писал, что в 1856 г. начал писать повесть, «герой
|
||||
которой должен был быть декабрист, возвращающийся
|
||||
с семейством в Россию.</atom:summary>
|
||||
<atom:link rel="enclosure" href="https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif" type="image/gif" length="10889"/>
|
||||
</atom:entry>
|
||||
<atom:entry xml:lang="bg">
|
||||
<atom:id>urn:uuid:32117a95-0962-4826-8aee-1ea7ddd94bec</atom:id>
|
||||
<atom:link href="https://en.wikipedia.org/wiki/Crime_and_Punishment"/>
|
||||
<atom:published>2015-06-05T00:02:00+03:00</atom:published>
|
||||
<atom:content type="html"><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></atom:content>
|
||||
</atom:entry>
|
||||
<atom:entry>
|
||||
<atom:content type="html"><h1>
|
||||
Доктор Живаго
|
||||
</h1>
|
||||
<p>
|
||||
<b>«До́ктор Жива́го»</b>
|
||||
— роман Бориса Пастернака. «Доктор Живаго» создавался в течение десяти лет, с
|
||||
<a href="/wiki/1945" title="1945" class="mw-redirect">1945</a> по
|
||||
<a href="/wiki/1955_%D0%B3%D0%BE%D0%B4" title="1955 год">1955 год</a>, и
|
||||
является вершиной его творчества как прозаика. Роман сопровождён стихами
|
||||
главного героя — Юрия Андреевича Живаго.
|
||||
</p></atom:content>
|
||||
</atom:entry>
|
||||
<atom:entry>
|
||||
<atom:content><h1>
|
||||
Герой нашего времени
|
||||
</h1>
|
||||
<p>
|
||||
<b>«Геро́й на́шего вре́мени»</b>
|
||||
(написан в 1838—1840) — знаменитый роман
|
||||
<a href="/wiki/%D0%9B%D0%B5%D1%80%D0%BC%D0%BE%D0%BD%D1%82%D0%BE%D0%B2,_%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB_%D0%AE%D1%80%D1%8C%D0%B5%D0%B2%D0%B8%D1%87" title="Лермонтов, Михаил Юрьевич">Михаила Юрьевича Лермонтова</a>, классика русской литературы. Впервые роман был издан в
|
||||
<a href="/wiki/%D0%A1%D0%B0%D0%BD%D0%BA%D1%82-%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D0%B1%D1%83%D1%80%D0%B3" title="Санкт-Петербург">Санкт-Петербурге</a>,
|
||||
в типографии Ильи Глазунова и Кº, в <a href="/wiki/1840_%D0%B3%D0%BE%D0%B4_%D0%B2_%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B5" title="1840 год в литературе">1840</a> г., в 2 книгах. Тираж 1000 экземпляров
|
||||
<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[1]</a></sup>.
|
||||
</p></atom:content>
|
||||
</atom:entry>
|
||||
</feed>
|
2087
vendor/fguillot/picofeed/tests/fixtures/bbc_urdu.xml
vendored
2087
vendor/fguillot/picofeed/tests/fixtures/bbc_urdu.xml
vendored
File diff suppressed because it is too large
Load Diff
7198
vendor/fguillot/picofeed/tests/fixtures/biertaucher.xml
vendored
7198
vendor/fguillot/picofeed/tests/fixtures/biertaucher.xml
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1073
vendor/fguillot/picofeed/tests/fixtures/debug_show.xml
vendored
1073
vendor/fguillot/picofeed/tests/fixtures/debug_show.xml
vendored
File diff suppressed because it is too large
Load Diff
@ -1,111 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<title>Studio Düsseldorf - NRW-Studios WDR</title>
|
||||
<link rel="alternate" type="text/html" href="http://www1.wdr.de/studio/duesseldorf/studioduesseldorf-homepage100.html" />
|
||||
<link rel="self" href="http://www1.wdr.de/studio/duesseldorf/studioduesseldorf-homepage100.feed" />
|
||||
<updated>2015-01-05T08:18:00Z</updated>
|
||||
<dc:date>2015-01-05T08:18:00Z</dc:date>
|
||||
<entry>
|
||||
<title>Lokalzeit aus Düsseldorf: Unsere Themen am Montag, 02.03.2015</title>
|
||||
<link rel="alternate" href="http://www1.wdr.de/studio/duesseldorf/lokalzeit/studioduesseldorf-lokalzeit100.html" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>http://www1.wdr.de/studio/duesseldorf/lokalzeit/studioduesseldorf-lokalzeit100.html</id>
|
||||
<updated>2015-02-05T11:15:00Z</updated>
|
||||
<published>2015-02-05T11:15:00Z</published>
|
||||
<content type="html">Umstrittene Dügida-Urteile<br/><br/>Ein preisgekröntes Fachwerkhaus</content>
|
||||
<summary>Umstrittene Dügida-UrteileEin preisgekröntes Fachwerkhaus</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:date>2015-02-05T11:15:00Z</dc:date>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Neues Kennzeichen im Kreis Viersen: Großes Interesse an „KK“</title>
|
||||
<link rel="alternate" href="http://www1.wdr.de/studio/duesseldorf/themadestages/kennzeichen-kreis-viersen100.html" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>http://www1.wdr.de/studio/duesseldorf/themadestages/kennzeichen-kreis-viersen100.html</id>
|
||||
<updated>2015-03-02T09:01:00Z</updated>
|
||||
<published>2015-03-02T09:01:00Z</published>
|
||||
<content type="html">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.</content>
|
||||
<summary>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.</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:date>2015-03-02T09:01:00Z</dc:date>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Tarifstreit: Eine Woche voller Streiks</title>
|
||||
<link rel="alternate" href="http://www1.wdr.de/studio/essen/themadestages/streikwoche100.html" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>http://www1.wdr.de/studio/essen/themadestages/streikwoche100.html</id>
|
||||
<updated>2015-03-02T13:15:00Z</updated>
|
||||
<published>2015-03-02T13:15:00Z</published>
|
||||
<content type="html">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.</content>
|
||||
<summary>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.</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:date>2015-03-02T13:15:00Z</dc:date>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Die neue WDR-App macht vieles möglich: Filme gucken, Bilder schicken</title>
|
||||
<link rel="alternate" href="http://www1.wdr.de/studio/duesseldorf/themadestages/wdr-app100.html" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>http://www1.wdr.de/studio/duesseldorf/themadestages/wdr-app100.html</id>
|
||||
<updated>2015-02-13T15:06:00Z</updated>
|
||||
<published>2015-02-13T15:06:00Z</published>
|
||||
<content type="html">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!</content>
|
||||
<summary>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!</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:date>2015-02-13T15:06:00Z</dc:date>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Die Lokalzeit Düsseldorf bei Facebook: Bleiben Sie mit uns in Kontakt!</title>
|
||||
<link rel="alternate" href="https://www.facebook.com/wdrlokalzeitduesseldorf" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>https://www.facebook.com/wdrlokalzeitduesseldorf</id>
|
||||
<content type="html">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.</content>
|
||||
<summary>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.</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Beiträge aus dem Studio Düsseldorf: Ihre Region im Überblick</title>
|
||||
<link rel="alternate" href="http://www1.wdr.de/studio/duesseldorf/themadestages/archiv/themadestages-duesseldorf104.html" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>http://www1.wdr.de/studio/duesseldorf/themadestages/archiv/themadestages-duesseldorf104.html</id>
|
||||
<updated>2015-01-19T08:58:00Z</updated>
|
||||
<published>2015-01-19T08:58:00Z</published>
|
||||
<content type="html">Hier finden Sie die wichtigsten Themen, über die wir in den vergangenen Tagen und Wochen berichtet haben, nochmal zum Nachlesen, - hören und -schauen.</content>
|
||||
<summary>Hier finden Sie die wichtigsten Themen, über die wir in den vergangenen Tagen und Wochen berichtet haben, nochmal zum Nachlesen, - hören und -schauen.</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:date>2015-01-19T08:58:00Z</dc:date>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
<entry>
|
||||
<title>Alles tanzt - rund um Düsseldorf: Die schönsten Bilder und Videos</title>
|
||||
<link rel="alternate" href="http://www1.wdr.de/studio/duesseldorf/lokalzeit/studioduesseldorf_tanzaktion100.html" />
|
||||
<author>
|
||||
<name>NRW-Studios</name>
|
||||
</author>
|
||||
<id>http://www1.wdr.de/studio/duesseldorf/lokalzeit/studioduesseldorf_tanzaktion100.html</id>
|
||||
<updated>2013-11-22T15:55:00Z</updated>
|
||||
<published>2013-11-22T15:55:00Z</published>
|
||||
<content type="html">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.</content>
|
||||
<summary>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.</summary>
|
||||
<dc:creator>NRW-Studios</dc:creator>
|
||||
<dc:date>2013-11-22T15:55:00Z</dc:date>
|
||||
<dc:type>Nachricht</dc:type>
|
||||
</entry>
|
||||
</feed>
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
477
vendor/fguillot/picofeed/tests/fixtures/googleblog.xml
vendored
Normal file
477
vendor/fguillot/picofeed/tests/fixtures/googleblog.xml
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1,396 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
>
|
||||
|
||||
<channel>
|
||||
<title>La Grotte Du Barbu</title>
|
||||
<atom:link href="http://www.lagrottedubarbu.com/feed/" rel="self" type="application/rss+xml" />
|
||||
<link>http://www.lagrottedubarbu.com</link>
|
||||
<description>Entrez dans le monde mystérieux des barbus...</description>
|
||||
<lastBuildDate>Tue, 02 Apr 2013 13:20:24 +0000</lastBuildDate>
|
||||
<language>en</language>
|
||||
<sy:updatePeriod>hourly</sy:updatePeriod>
|
||||
<sy:updateFrequency>1</sy:updateFrequency>
|
||||
<generator>http://wordpress.org/?v=3.0.1</generator>
|
||||
<item>
|
||||
<title>LaGrotteDuBarbu – Episode 105 – ReliureToiMeme</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/04/01/lagrottedubarbu-episode-105-reliuretoimeme/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/04/01/lagrottedubarbu-episode-105-reliuretoimeme/#comments</comments>
|
||||
<pubDate>Mon, 01 Apr 2013 09:01:50 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[2013]]></category>
|
||||
<category><![CDATA[Podcast]]></category>
|
||||
<category><![CDATA[Video]]></category>
|
||||
<category><![CDATA[barbu]]></category>
|
||||
<category><![CDATA[ciseaux]]></category>
|
||||
<category><![CDATA[colle]]></category>
|
||||
<category><![CDATA[diy]]></category>
|
||||
<category><![CDATA[grotte]]></category>
|
||||
<category><![CDATA[papier]]></category>
|
||||
<category><![CDATA[reliure]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1195</guid>
|
||||
<description><![CDATA[Cette semaine, on tente de relier des feuilles pour en [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Cette semaine, on tente de relier des feuilles pour en faire des carnets, avec de la colle vinyle, un pinceau… et surtout avec l’ami PYM eu supra guest barbu!</p>
|
||||
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/2QZyXlWsCo4" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p>Ce dont vous avez besoin pour cet épisode:<br />
|
||||
- des feuilles, du papier, des trucs que vous allez coller… perso j’ai pris du papier complètement standard A4 / 80g<br />
|
||||
- deux morceaux de bois de taille plus ou moins identique<br />
|
||||
- deux vis, écrous à ailettes, deux washers (me souviens jamais du nom de ces trucs en FR)<br />
|
||||
- une perceuse<br />
|
||||
- un foret à bois du bon diamètre (pour faire passer les vis)<br />
|
||||
- du tissu pour reliure (c’est pas super cher et vous en utilisez très peu)<br />
|
||||
- de la colle vinyl<br />
|
||||
- un pinceau pourri / jetable<br />
|
||||
- éventuellement du carton pour faire le dos du carnet<br />
|
||||
- des ciseaux, cutter ou scalpel pour découper votre papier (et une règle et un tapis de découpe ça vous évitera de ruiner la table qui est en dessous)</p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_8.jpg" alt="Ep105 8" title="ep105_8.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_7.jpg" alt="Ep105 7" title="ep105_7.jpg" border="0" /></p>
|
||||
<p>Le fichier de mes super todolist est disponible ici… au format <a href="http://www.lagrottedubarbu.com/fichiers/ep105/todo.ai">illustrator</a> ou <a href="http://www.lagrottedubarbu.com/fichiers/ep105/todo.pdf">pdf</a> vous pouvez les imprimer, modifier comme vous voulez.</p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_9.jpg" alt="Ep105 9" title="ep105_9.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_10.jpg" alt="Ep105 10" title="ep105_10.jpg" border="0" /></p>
|
||||
<p>Quelques remarques<br />
|
||||
- d’abord je n’ai pas pour l’instant trouvé de solution pour microter correctement mes invités, donc les prochains devront parler plus fort, je réfléchis au problème et essayes de trouver une solution sous peu<br />
|
||||
- Moi j’adore me fabriquer des carnets rigolos et pas communs. Celui pour les courses est juste ultra pratique, je vais je penses rajouter un aimant dans le dos pour pouvoir le coller au frigo et l’avoir tout le temps sous la main<br />
|
||||
- c’est un projet qui demande pas beaucoup de matériel et qui est pas cher… le plus chiant à trouver reste le tissu pour la reliure (et encore <a href="https://www.google.fr/search?q=tissu+reliure&aq=f&oq=tissu+reliure&aqs=chrome.0.57j60j65j59j60j61.2236j0&sourceid=chrome&ie=UTF-8">en cherchant un peu on trouve…</a> apparemment ils appellent ça mousseline un morceau de 65×100 cm coute 1 euro)<br />
|
||||
- je vous conseille d’acheter la colle vinyle en grand pot d’un litre, ça coute trois euros environ et ça peut servir à pleins de projets différents<br />
|
||||
- je ne suis clairement pas un spécialiste (mais je penses que ça se voit), mon but est de noyer la zone sous la colle pour que ça tienne, ça marche (bon pas à chaque fois, hein PYM?) mais ça a tendance à faire gondoler le papier qui a été noyé sous l’encre. Perso je m’en tapes, mais je préfère prévenir.<br />
|
||||
- Alors, j’adore les scalpels et pour plusieurs raisons, la première c’est que c’est un outil qui ne demande pas de maintenance, pas de lame à casser, pas de truc à aiguiser, dès que la lame coupe moins bien, on la change direct. Ensuite les pro l’utilisent donc il doit y avoir une raison. Enfin le prix, 2,70€ pour un manche standard… et suivant les packagings entre 8 et 15 euros pour 50 ou 100 lames de bistouri. Perso je prends du N°11 (la lame est droite sur toute la longueur) mais là aussi suivant les travaux que vous avez à réaliser vous pouvez choisir une autre forme. Les lames et les manches sont trouvables aussi bien en ligne, qu’en les commandant chez votre pharmacien (bon après je vous garanti pas une réputation sans tâche, mais…)</p>
|
||||
<p>Quelques photos du résultat:</p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_12.jpg" alt="Ep105 12" title="ep105_12.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_1.jpg" alt="Ep105 1" title="ep105_1.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_2.jpg" alt="Ep105 2" title="ep105_2.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_3.jpg" alt="Ep105 3" title="ep105_3.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_4.jpg" alt="Ep105 4" title="ep105_4.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_5.jpg" alt="Ep105 5" title="ep105_5.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/04/ep105_6.jpg" alt="Ep105 6" title="ep105_6.jpg" border="0" /></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/04/01/lagrottedubarbu-episode-105-reliuretoimeme/feed/</wfw:commentRss>
|
||||
<slash:comments>9</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>LaGrotteDuBarbu / OpenSource Hardware / Hackers – une ouverture qui ne se limite pas aux machines…</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/03/19/lagrottedubarbu-opensource-hardware-hackers-une-ouverture-qui-ne-se-limite-pas-aux-machines%e2%80%a6/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/03/19/lagrottedubarbu-opensource-hardware-hackers-une-ouverture-qui-ne-se-limite-pas-aux-machines%e2%80%a6/#comments</comments>
|
||||
<pubDate>Tue, 19 Mar 2013 08:51:34 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Divers]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1182</guid>
|
||||
<description><![CDATA[Hier j'ai été interpelé par Atg qui me demande "@lag [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Hier j’ai été interpelé par <a href="http://twitter.com/13Atg">Atg</a> qui me demande “@lagrottedubarbu Le Barbu, il soutient “MariagePourTous” ? C’est juste pour savoir…”<br />
|
||||
Machinalement je lui répond “@13Atg évidemment… si les gens veulent se marier peu importe leur orientation sexuelle (et je vois toujours pas pourquoi on interdis ça)”<br />
|
||||
<em>Et puis cette nuit j’y ai réfléchi (oui je fais ça des fois la nuit) et je penses que ça mérite explication et approfondissement</em></p>
|
||||
<p><strong>Un mec normal, ou presque…</strong><br />
|
||||
Avant de parler de tous ces sujets qui fâchent, il est bon de rappeler en quelques lignes, qui je suis… je suis un homme, blanc, hétérosexuel, séparé, père d’une gamine de 7 ans, de nationalité française, ça paraît bête de dire ça comme ça, mais globalement personne ne m’a vraiment haït pour qui je suis (pour ce que j’ai fais ou mes choix c’est un autre problème, mais la discussion n’est pas là ). Si j’avais été une femme, noire, lesbienne, éthiopienne le trip aurait été je penses beaucoup plus violent… rien que pour rentrer sur le territoire français, chercher du boulot, louer un appartement, etc.<br />
|
||||
J’ai toujours été bizarre, à la marge… j’ai toujours été le plus grand de ma classe, le plus balèze, celui qu’on met au fond de la classe pour pas gêner les plus petits (sinon ils voient pas le tableau les pauvres choux) j’aurais dû faire du foot avec les autres, mais je préférais jouer aux jeux de rôles avec mes autres potes zarbis, j’aurais dû devenir chef de projet technique à Paris bien payé, au lieu de ça, je finis à démonter des fours dans ma grotte à la campagne (et franchement je kiffe ça) … mais ce n’est ni mon sexe, ni ma couleur de peau qui me l’a imposé, cela a été un choix ou une envie, rien d’imposé.<br />
|
||||
J’ai passé une bonne dizaine d’année à trouver ma place par rapport au reste de la société aux pratiques et goûts auxquels je n’adhérait pas (le foot ou la télé qui sont de bons exemples pour moi), j’ai admis et assumé ma bizarrerie et j’en suis aujourd’hui heureux.</p>
|
||||
<p><strong>L’ouverture une philosophie à appliquer partout</strong><br />
|
||||
Je prône à tout va l’ouverture et le partage… que ce soit sous forme numérique ou physique, j’adore partager, découvrir de nouvelles choses, rencontre les gens, discuter, découvrir des nouveaux outils, matériaux, techniques, etc… dès tout petit j’aimais démonter des trucs pour savoir comment ils étaient fait, ce qui il y avait dedans et ça n’a pas changé.<br />
|
||||
Cette philosophie j’essayes de la pratiquer partout et avec tous, j’essayes de privilégier les rapports humains, ce que 15 ans de développement web m’a appris, c’est que ce sont les gens qui font le succès d’un projet, pas le budget ou la technologie employée… et de prêcher la bonne parole là où je peux.<br />
|
||||
J’avoues “j’essayes” d’être ouvert d’esprit… ça ne marche pas tout le temps, je dois combattre en permanence mon éducation, qu’elle ait été mise en place par la société (école, université, taloche, journaux) par les parents, ou via la pression sociale (les voisins, les amis, les connaissances, etc). Il y a des choses sur lesquelles je suis très réceptif et d’autres trucs beaucoup moins… j’ai encore un temps de latence suivant la façon dont la personne est habillée ou se comporte (par exemple j’aurais du mal au premier abord à aller taper la discut avec un punk à chien, pour toutes les raisons que j’ai cités plus haut).</p>
|
||||
<p><strong>La liberté au dessus de tout</strong><br />
|
||||
J’ai choisi de me raser le crâne (bon mon manque de cheveux m’y a un peu aidé), de me laisser pousser la barbe, de balancer toutes mes âneries sur le web, de partager avec vous mes bizarreries, et je ne supportes pas l’idée que quelqu’un puisse ne serais ce qu’envisager de penser à m’interdire de le faire.<br />
|
||||
Du moment que vous n’imposez pas votre choix aux autres, que vous ne les forcez pas d’une façon ou d’une autre à faire quelque chose dont ils n’ont pas envie, pour moi vous avez toute liberté.<br />
|
||||
Peu importe la couleur de votre peau, vos préférences ou déviances sexuelles (et on pourrait revenir sur la définition traditionnelle de déviance qui suivant les époques et pays est a géométrie variable), c’est votre vie et rien ne me donne le droit (même pas celui d’être un homme blanc hétéro français au contraire de l’opinion publique) de vous dire ce que vous devez faire.<br />
|
||||
Ce sujet est particulièrement personnel pour moi, puisque mon frère est gay, marié depuis plus d’une décennie avec son mari, installé à Amsterdam et jusqu’à preuve du contraire heureux.</p>
|
||||
<p><strong>Prendre conscience et corriger</strong><br />
|
||||
Ce qui m’a fait me retourner dans mon lit cette nuit, ce n’est pas cette question d’orientation sexuelle, ou d’ouverture d’esprit que je prône, mais toutes les petites choses, ces expressions, qui sont profondément ancrées dans notre culture, dans le langage et que je continue à employer:<br />
|
||||
“un truc de meuf” pour dire que c’est un truc pourri<br />
|
||||
“un truc de mec” pour dire que c’est un truc viril et solide<br />
|
||||
et toutes les autres conneries que je balance régulièrement (je suis sûr que y’a pleins d’autres exemples, mais là c’est les deux seuls qui me viennent à l’esprit).<br />
|
||||
Le but ici n’est pas non plus de m’auto-censuré pour éviter le courroux de tel ou tel groupe (parceque en fait je m’en tapes de ce que les autres pensent) mais c’est plus de prendre conscience de ces paroles et d’essayer de les déminer, de savoir pourquoi on les dit, qu’est ce que ça implique, etc… et de tenter de corriger le tir.</p>
|
||||
<p><strong>Ma fille comme “constant reminder”</strong><br />
|
||||
L’autre chose qui m’a empêché de dormir je dois l’avouer c’est ma fille, qui a 7 ans, qui est en ce2… et qui grandit. Elle a un âge merveilleux où tout l’intéresse. Le dessin, les livres, les dessins animés, les animaux, les plantes, le papier, comment sont fabriqués les fringues et j’estime qu’un de mes rôles en tant que Papa Barbu est justement de pouvoir lui montrer et expliquer tout et n’importe quoi (et si je peux pas de lui montrer comment trouver les bonnes informations). Mais elle va grandir, apprendre, et devoir un jour choisir ce qu’elle va devoir devenir et faire… et je trouve cela insupportable l’idée qu’on puisse lui refuser un domaine parcequ’elle est une fille. Si elle veut devenir soudeuse professionnelle, électricienne, ingénieurE aéronautique, danseuse ou chanteuse de comédie musicale (ouais faut pas pousser non plus hein, je veux bien être ouvert mais peut être pas à ce point là ) et si c’est sa passion, je VEUX qu’elle puisse le faire, et non parceque les stéréotypes ou les décisionnaires pensent que c’est pas bien. Donc je me dois d’abord de lui montrer qu’aucune activité ou métier n’est réservé à un sexe (je peux faire de la couture et elle peut faire de la soudure à l’arc) et que c’est quelque chose que tous les barbus devraient promouvoir… Apprendre aux filles à changer une roue de voiture, aux garçons à recoudre leur pantalon, etc…</p>
|
||||
<p><em>La conclusion c’est que l’ouverture ne peut être que totale, “no middle ground” comme ils disent, donc ami(e)s femmes, hommes, noirs, blancs, asiatiques, hétéros, homos, bi, trans, français, étrangers, peut importe tous ces critères, pour moi vous êtes tous des gentils barbus avant tout (que vos poils soient visibles ou non).</em></p>
|
||||
<p><strong>Voilà , soyez barbus, soyez ouverts, cultivez votre différence…</strong></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/03/19/lagrottedubarbu-opensource-hardware-hackers-une-ouverture-qui-ne-se-limite-pas-aux-machines%e2%80%a6/feed/</wfw:commentRss>
|
||||
<slash:comments>15</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>Bricolo et Mulot (EP00 – 01 et 02) par Picaboubx</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/03/19/bricolo-et-mulot-ep00-01-et-02-par-picaboubx/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/03/19/bricolo-et-mulot-ep00-01-et-02-par-picaboubx/#comments</comments>
|
||||
<pubDate>Tue, 19 Mar 2013 06:41:00 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Communauté]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1180</guid>
|
||||
<description><![CDATA[Découvert hier via la communauté LaGrotteDuBarbu sur [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Découvert hier via <a href="https://plus.google.com/communities/105904177334534332708">la communauté LaGrotteDuBarbu sur Google Plus</a> (comme quoi ça aura servi au moins à ça) les premières vidéos de l’ami <a href="https://twitter.com/Picaboubx"><strong>Picaboubx</strong></a> appelés <strong>“Bricolo et Mulot”</strong></p>
|
||||
<p><strong>Bricolo et Mulot – Ep00 Pilote</strong><br />
|
||||
<iframe width="640" height="360" src="http://www.youtube.com/embed/f1wMtDJCawI" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p><strong>Bricolo et Mulot – Ep01 Plieuse de tôles</strong><br />
|
||||
<iframe width="640" height="360" src="http://www.youtube.com/embed/j_liVKxyLCo" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p><strong>Bricolo et Mulot – Ep02 BOouuuu la rumeur</strong><br />
|
||||
<iframe width="640" height="360" src="http://www.youtube.com/embed/OGdtog-tso0" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p>Alors déjà , (on le voit dans le pilote) le support pour iPhone avec miroir intégré, franchement c’est super malin… ça m’a aussi donné vachement envie de me fabriquer ma propre plieuse de tôle (même si j’en plie rarement je trouve l’outil barbare et cool). Ensuite partager ses expériences, sa grotte, etc… ben moi évidemment j’adore et je ne peux que vous encourager à faire de même.<br />
|
||||
Pas encore eut le temps de regarder l’épisode 02 (c’est prévu pour ma pause de ce midi) mais j’ai passé un bon moment en découvrant l’univers de Picaboubx et je vous invite donc à en faire de même.</p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/03/19/bricolo-et-mulot-ep00-01-et-02-par-picaboubx/feed/</wfw:commentRss>
|
||||
<slash:comments>3</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>partagez vos projets sur la Communauté LaGrotteDuBarbu sur Google Plus</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/03/19/partagez-vos-projets-sur-la-communaute-lagrottedubarbu-sur-google-plus/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/03/19/partagez-vos-projets-sur-la-communaute-lagrottedubarbu-sur-google-plus/#comments</comments>
|
||||
<pubDate>Tue, 19 Mar 2013 06:22:55 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Divers]]></category>
|
||||
<category><![CDATA[barbu]]></category>
|
||||
<category><![CDATA[communauté]]></category>
|
||||
<category><![CDATA[google]]></category>
|
||||
<category><![CDATA[grotte]]></category>
|
||||
<category><![CDATA[partage]]></category>
|
||||
<category><![CDATA[plus]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1178</guid>
|
||||
<description><![CDATA[Depuis hier j'ai créé une communauté sur GooglePlus [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Depuis hier j’ai créé <a href="https://plus.google.com/communities/105904177334534332708">une communauté sur GooglePlus qui est dispo ici</a><br />
|
||||
Le principe est simple, tester ce nouveau truc pour voir si c’est plus adapté pour le partage d’infos entre barbus que le forum, wiki et autre trucs.</p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/03/communaute_google_plus_LaGrotteDuBarbu.jpg" alt="Communaute google plus LaGrotteDuBarbu" title="communaute_google_plus_LaGrotteDuBarbu.jpg" border="0" /></p>
|
||||
<p>J’en profiterais aussi pour poster de temps en temps des photos, des liens rigolos, et pleins de conneries.<br />
|
||||
Bon alors pour y accéder vous devez avoir un compte Google, malheureusement… et en ce moment avec la fermeture prévue de Reader en Juillet j’avoues que je filerais bien un grand coup de pied dans les couilles de Google, mais si ça peut aider la communauté à partager différentes choses, ça vaut le coup de tester ça.</p>
|
||||
<p><strong>Donc viendez et balancez photos, liens, vidéos, évènements, cet espace il est pour vous les barbus</strong><br />
|
||||
<em>Comme d’hab si vous avez des commentaires sur la communauté ou Google, hésitez pas à dropper un commentaire</em></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/03/19/partagez-vos-projets-sur-la-communaute-lagrottedubarbu-sur-google-plus/feed/</wfw:commentRss>
|
||||
<slash:comments>0</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>miniGrotte – Episode3 – Démontage d’un four traditionnel</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/03/12/minigrotte-episode3-demontage-dun-four-traditionnel/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/03/12/minigrotte-episode3-demontage-dun-four-traditionnel/#comments</comments>
|
||||
<pubDate>Tue, 12 Mar 2013 15:27:37 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Video]]></category>
|
||||
<category><![CDATA[miniGrotte]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1175</guid>
|
||||
<description><![CDATA[Une petite miniGrotte pour vous faire patienter jusqu'a [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Une petite miniGrotte pour vous faire patienter jusqu’au prochain épisode de LaGrotteDuBarbu qui arrive la semaine prochaine.</p>
|
||||
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/mWRfDnn54Pw" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p>Déjà un grand merci à mon voisin Claude pour m’avoir refilé ce four plus en état de marche (cuire un poulet en mode pyrolyse apparemment ça marche moyennement bien)<br />
|
||||
Pleins d’éléments à récupérer dans un four traditionnel:<br />
|
||||
- d’abord le corps du four, qui va me servir à me faire un espace à peinture à bombe / pistolet (pour éviter de mettre de la peinture dans toute la grotte)<br />
|
||||
- des résistances électriques (c’est ça qui fait que votre four chauffe)<br />
|
||||
- de l’insolation thermique (bien pratique pour isoler un truc qui crame, comme une résistance électrique)<br />
|
||||
- des moteurs (un lent pour la broche et l’autre super speed pour la ventilation), je vais devoir les tester pour voir si ils marchent…<br />
|
||||
- une sonde de température<br />
|
||||
et quelques autres éléments qui pourront s’avérer intéressant (de la visserie, des ressorts, etc…)</p>
|
||||
<p>Des éléments qu’on va réutiliser pour le prochain épisode 106 de LaGrotteDuBarbu<br />
|
||||
comme d’hab remarques et insultes sont toujours les bienvenus dans les commentaires</p>
|
||||
<p>[petite remarques: je suis en train de régler de façon définitive et bonne l'orientation de la caméra au dessus de mon crâne chauve… là c'est pas top mais ça sera mieux pour l'épisode 105, promis]</p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/03/12/minigrotte-episode3-demontage-dun-four-traditionnel/feed/</wfw:commentRss>
|
||||
<slash:comments>3</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>LaGrotteDuBarbu Episode 104 – CaisseNawak</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/02/25/lagrottedubarbu-episode-104-caissenawak/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/02/25/lagrottedubarbu-episode-104-caissenawak/#comments</comments>
|
||||
<pubDate>Mon, 25 Feb 2013 18:41:23 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[2013]]></category>
|
||||
<category><![CDATA[Podcast]]></category>
|
||||
<category><![CDATA[Video]]></category>
|
||||
<category><![CDATA[bois]]></category>
|
||||
<category><![CDATA[caisse]]></category>
|
||||
<category><![CDATA[LaGrotteDuBarbu]]></category>
|
||||
<category><![CDATA[pneumatique]]></category>
|
||||
<category><![CDATA[podcast]]></category>
|
||||
<category><![CDATA[rangement]]></category>
|
||||
<category><![CDATA[vidéo]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1173</guid>
|
||||
<description><![CDATA[Cette semaine, premier épisode de 2013 après l'opéra [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Cette semaine, premier épisode de 2013 après l’opération #barbitude2013… et on s’attaque justement au rangement en se fabriquant des “CaissesNawak”</p>
|
||||
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/Ssy4T0myLTE" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p>Pour vous aussi vous fabriquer des CaisseNawak vous avez besoin de:<br />
|
||||
- du bois, des trucs récupérés à droite à gauche font très bien l’affaire, si vous voulez faire des caisses plus propres et plus funky, vous pouvez en acheter… d’ailleurs bon plan souvent les magasins de bricolage revendent pas cher des caddies entiers de chutes de bois qui sont invendables. On y trouve souvent pas grand chose d’intéressant mais suffisamment pour se faire pleins de CaisseNawak<br />
|
||||
- une scie… moi j’utilise ma scie à onglet, mais vous pouvez utiliser une scie à main, une scie sauteuse, une scie circulaire du moment que ça coupe.<br />
|
||||
- une clouteuse / agrafeuse pneumatique<br />
|
||||
- une lamelleuse ou biscuiteuse (et c’est @blublugrublu qui a gagné le concours et donc un cadeau pour avoir trouvé le nom de l’outils le premier)<br />
|
||||
- une perceuse et des vis en bois</p>
|
||||
<p>Quelques remarques:<br />
|
||||
- la méthode pour couper toujours vos morceaux de bois à la même dimension marche très bien, je l’utilise super souvent… en général quand vous tentez de couper plusieurs morceaux aux même dimensions, entre la mesure, votre trait de crayon et votre trait de scie, en cumulant les demi millimètres, vous pouvez avoir des différences notables entre les pièces. Cette méthode vous permet de toujours couper votre morceau de bois à la taille choisie.<br />
|
||||
- ma méthode préférée pour me faire des CadreNawak reste la clouteuse, c’est rapide, pas compliqué, mais par contre c’est TRES dangereux… donc un outil à utiliser avec respect.<br />
|
||||
- la biscuiteuse (ou lamelleuse) n’est clairement pas une méthode adaptée pour ce genre de travail… je l’ai utilisé par exemple pour créer une table à partir de morceaux de bois divers pour mes parents et ça marche très bien, ici c’est juste pas adapté.<br />
|
||||
- la troisième méthode, je ferais un épisode spécifique, parceque ça peut être mortel mais là c’était pas adapté, c’était long et chiant…</p>
|
||||
<p>Quelques photos de mes nouvelles CaisseNawak</p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/02/ep104_1.jpg" alt="Ep104 1" title="ep104_1.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/02/ep104_2.jpg" alt="Ep104 2" title="ep104_2.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/02/ep104_3.jpg" alt="Ep104 3" title="ep104_3.jpg" border="0" /></p>
|
||||
<p><img src="http://www.lagrottedubarbu.com/wp-content/uploads/2013/02/ep104_4.jpg" alt="Ep104 4" title="ep104_4.jpg" border="0" /></p>
|
||||
<p><em>Bien sûr toutes les remarques et insultes sont les bienvenues… sur l’épisode, le nouveau setup, le son, etc… lâchez vous les barbus ^^</em></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/02/25/lagrottedubarbu-episode-104-caissenawak/feed/</wfw:commentRss>
|
||||
<slash:comments>22</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>BarbuCast – Episode 8</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/02/21/barbucast-episode-8/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/02/21/barbucast-episode-8/#comments</comments>
|
||||
<pubDate>Thu, 21 Feb 2013 18:35:49 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Audio]]></category>
|
||||
<category><![CDATA[BarbuCast]]></category>
|
||||
<category><![CDATA[Podcast]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1167</guid>
|
||||
<description><![CDATA[Un épisode enregistré le 20 janvier et que je peux EN [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Un épisode enregistré le 20 janvier et que je peux ENFIN mettre en ligne</p>
|
||||
<audio id="wp_mep_1" controls="controls" src="http://www.lagrottedubarbu.com/podcast/audio/hdb_ep08.mp3" preload="none" class="mejs-player " data-mejsoptions='{"features":["playpause","current","progress","duration","volume","tracks","fullscreen"],"audioWidth":400,"audioHeight":30}'>
|
||||
|
||||
<object width="400" height="30" type="application/x-shockwave-flash" data="http://www.lagrottedubarbu.com/wp-content/plugins/media-element-html5-video-and-audio-player/mediaelement/flashmediaelement.swf">
|
||||
<param name="movie" value="http://www.lagrottedubarbu.com/wp-content/plugins/media-element-html5-video-and-audio-player/mediaelement/flashmediaelement.swf" />
|
||||
<param name="flashvars" value="controls=true&file=http://www.lagrottedubarbu.com/podcast/audio/hdb_ep08.mp3" />
|
||||
</object>
|
||||
</audio>
|
||||
<p>L’épisode est écoutable dans cette page ou téléchargeable au format <a href="http://www.lagrottedubarbu.com/podcast/audio/hdb_ep08.mp3">mp3</a> et bien sûr vous pouvez toujours vous abonnez au podcast <a href="http://itunes.apple.com/fr/podcast/barbucast/id550059496">via le flux RSS pour iTunes</a></p>
|
||||
<p><strong>Les news</strong><br />
|
||||
- <a href="http://www.lulzbot.com/?q=catalog">le LulzBot</a><br />
|
||||
- <a href="http://www.geeksaresexy.net/2013/01/03/star-wars-wookiee-jacket-by-marc-ecko/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+geeksAreSexyTechnologyNews+%28[Geeks+are+Sexy]+technology+news%29&utm_content=Google+Reader">un blouson de wookie (et pas d’ewok chuis nul)</a><br />
|
||||
- <a href="http://torrentfreak.com/pirates-hollywood-sets-10-billion-box-office-record-121231/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+Torrentfreak+%28Torrentfreak%29&utm_content=Google+Reader">Pirates? Hoolywood bas un record au Box Office avec 10 Milliards de $</a><br />
|
||||
- <a href="http://www.diyphotography.net/download-adobe-cs2-for-free">Télécharger Adobe CS2 gratos?</a><br />
|
||||
- <a href="http://www.adafruit.com/blog/2013/01/07/make-the-metric-system-the-standard-in-the-united-states/">Le système métrique le nouveau standard pour les US</a><br />
|
||||
- <a href="http://www.pcinpact.com/news/76567-microsoft-applaudit-jailbreak-windows-rt-mais-corrigera-tir.htm?utm_source=PCi_RSS_Feed&utm_medium=news&utm_campaign=pcinpact">Microsoft applaudit le jailbreak de Windows RT</a><br />
|
||||
- <a href="http://www.numerama.com/magazine/24715-pour-pascal-obispo-hadopi-ne-suffit-pas-il-y-a-encore-trop-de-pirates.html">Pascal Obispo et le piratage</a><br />
|
||||
- <a href="http://www.pcinpact.com/news/76666-edito-les-boutiques-culturelles-et-high-tech-sont-elles-vouees-a-mourir.htm?utm_source=PCi_RSS_Feed&utm_medium=news&utm_campaign=pcinpact">Les boutiques culturelles et Hight teck sont elles en danger?</a><br />
|
||||
- <a href="https://twitter.com/ubergizmo_fr/status/289809565195849728">un message pour mark Zuckerberg pour 100$</a><br />
|
||||
- <a href="http://coolmaterial.com/video/jack-daniels-the-whiskey-drum/">La caisse claire JackDaniels</a><br />
|
||||
- <a href="http://hackaday.com/2013/01/15/print-your-own-30-round-ar15-magazine/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+hackaday/LgoM+%28Hack+a+Day%29&utm_content=Google+Reader">Imprimer son chargeur d’AR15</a><br />
|
||||
- <a href="http://www.numerama.com/magazine/24793-34j-voulais-pas-pirater34-mais.html">J’voulais pas pirater mais…</a><br />
|
||||
- <a href="http://hackaday.com/2013/01/17/real-life-mario-karts-react-to-launchable-items/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+hackaday/LgoM+%28Hack+a+Day%29&utm_content=Google+Reader">Mario Kart dans la vraie vie</a><br />
|
||||
- <a href="http://blog.makezine.com/2013/01/17/u-s-manufacturing-cheaper-and-greener/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+makezineonline+%28MAKE%29&utm_content=Google+Reader">Fabriquer aux USA: moins cher et plus vert?</a><br />
|
||||
- <a href="http://www.numerama.com/magazine/24825-le-csa-veut-reguler-vos-videos-personnelles.html">le CSA veut réguler COS vidéos personnelles</a><br />
|
||||
- <a href="http://boingboing.net/2013/01/18/nerds-are-one-of-the-most-da.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+boingboing/iBag+%28Boing+Boing%29&utm_content=Google+Reader">“Les nerds sont un des groupes les plus dangereux”</a><br />
|
||||
- <a href="http://hackaday.com/2013/01/19/write-code-fix-the-space-station-win-10000/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+hackaday/LgoM+%28Hack+a+Day%29&utm_content=Google+Reader">Ecrivez du code pour l’ISS et gagnez 10 000$</a><br />
|
||||
- <a href="http://boingboing.net/2013/01/19/augmented-reality-welding-mask.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+boingboing/iBag+%28Boing+Boing%29&utm_content=Google+Reader">le masque à souder HDR</a><br />
|
||||
- <a href="http://www.pcinpact.com/news/76889-deux-nouvelles-failles-pour-java-qualite-code-inquietante.htm?utm_source=PCi_RSS_Feed&utm_medium=news&utm_campaign=pcinpact">deux nouvelles failles Java</a><br />
|
||||
- <a href="">Piratage: une licence globale à plus de 10€/mois</a><br />
|
||||
- <a href="http://hackaday.com/2013/01/21/land-speed-baby-carriage-record-set-at-53-mpg/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+hackaday/LgoM+(Hack+a+Day)&utm_content=Google+Reader">une poussette à 53 miles par heure</a></p>
|
||||
<p><strong>Le Dossier</strong><br />
|
||||
Hackerspace, FabLab, FacLac, qu’est ce que c’est que ces trucs bizarres?…</p>
|
||||
<p><strong>Le site web</strong><br />
|
||||
HobbyElectro le site marchand de l’ami <a href="https://twitter.com/furrtek/">furrtek</a> (et <a href="http://furrtek.free.fr/">son site officiel est là …</a>)<br />
|
||||
<a href="http://www.hobbyelectro.fr">http://www.hobbyelectro.fr</a></p>
|
||||
<p><strong>Le matériel</strong><br />
|
||||
le matériel utilisé pour ce podcast<br />
|
||||
- la mixette SoundLab G105AA 4 voix acheté rue victor masset 19€<br />
|
||||
- le micro à 29€<br />
|
||||
- le cable XLR – Jack mono 20€<br />
|
||||
- le pied de micro Hercules 59€<br />
|
||||
- ampli pour casque 4 voix Behringer HA400 – 15€ environ<br />
|
||||
- GarageBand – 4,49€</p>
|
||||
<p><em>Un grand merci pour vos commentaires sur tweeter et iTunes…</em></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/02/21/barbucast-episode-8/feed/</wfw:commentRss>
|
||||
<slash:comments>8</slash:comments>
|
||||
<enclosure url="http://www.lagrottedubarbu.com/podcast/audio/hdb_ep08.mp3" length="11310729" type="audio/mpeg" />
|
||||
</item>
|
||||
<item>
|
||||
<title>Petite visite de la grotte en mode FPS – aménagements finis à 57% #barbitude2013</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/02/20/petite-visite-de-la-grotte-en-mode-fps-amenagements-finis-a-57-barbitude2013/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/02/20/petite-visite-de-la-grotte-en-mode-fps-amenagements-finis-a-57-barbitude2013/#comments</comments>
|
||||
<pubDate>Wed, 20 Feb 2013 06:31:39 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Divers]]></category>
|
||||
<category><![CDATA[Production]]></category>
|
||||
<category><![CDATA[Video]]></category>
|
||||
<category><![CDATA[aménagements]]></category>
|
||||
<category><![CDATA[barbu]]></category>
|
||||
<category><![CDATA[diy]]></category>
|
||||
<category><![CDATA[FPS]]></category>
|
||||
<category><![CDATA[grotte]]></category>
|
||||
<category><![CDATA[POV]]></category>
|
||||
<category><![CDATA[travaux]]></category>
|
||||
<category><![CDATA[visite]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1165</guid>
|
||||
<description><![CDATA[Salut les barbus…
|
||||
J'ai passé les derniers jours à b [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Salut les barbus…<br />
|
||||
J’ai passé les derniers jours à bricoler pas mal de choses: fabrication de ma nouvelle table, revamp du système de lumière, mise en place des emplacements pour les différentes caméras, et j’ai donc fait hier une petite vidéos en mode FPS pour vous présenter tout ça.</p>
|
||||
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/J-_KcYdRQsg" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p>Une bonne occasion aussi de me faire la main sur le nouveau matériel son, voir si j’oublie rien, fait pas de mauvaise manie, etc…</p>
|
||||
<p>En gros les grandes nouveautés de la grotte (qui sont pas si grosses que ça mais…)<br />
|
||||
- déplacement de l’établi sur la partie béton de la grotte<br />
|
||||
- construction de la nouvelle table, tout soudé à la main pas moi même<br />
|
||||
- déplacement sous peu du matériel cradoc (grand générateur de poussière) sur la partie béton (et déplacement de ma batterie dans le fond de cette partie)<br />
|
||||
- revamp complet du système de lumière: j’ai soudé un cadre en acier, j’y ai vissé les 4 double néons, que je suis allé vissé à la grosse poutre au dessus de la table… la soudure nickel par contre monter tout seul un cadre + 4 néons pour un ensemble d’une bonne cinquantaine de kilos tout seul à la main, perché sur une échelle à 4m de haut, c’était funky j’avoues… heureusement avec l’aide de mes amis cordes et ducttape j’ai réussi à m’en sortir tout seul comme un grand<br />
|
||||
- le nouveau système de lumière frontal / attache de caméra principale a été lui aussi construit à partir de profilé soudé et vissé à une autre poutre<br />
|
||||
- j’ai encore 2/3 néons à placer, d’abord dans la future partie cradoc et peut être un sous les étgères<br />
|
||||
- encore pas mal de rangements à faire…</p>
|
||||
<p>Un dernier petit truc, oui aller acheter du profilé chez un pro c’est vachement moins cher que d’aller dans un magasin de bricolage quelconque… pour vous donner un ordre d’idée pour du profilé carré en acier de 25mm de côté épaisseur 2mm il était vendu environ une vingtaine d’euros pour 2m… et 18€ les 6m chez le spécialiste.<br />
|
||||
Moi j’ai trouvé le mien à Chatellerault et donc maintenant j’ai ma source pour l’acier (ils en ont un hangar plein)</p>
|
||||
<p>Encore un ou deux jours de travaux et rangements et je vais pouvoir attaquer le tournage des premiers épisodes de cette année 2013 (je profites des vacances de la demoiselle pour ranger, fabriquer, filmer tranquillou)</p>
|
||||
<p><em>Comme d’hab les commentaires et insultes sont les bienvenus</em><br />
|
||||
<strong>Un grand merci à tous les barbus pour leurs précieux conseils sur la lumière, les angles de caméras et leurs soutien en général… pleins de projets démentiels et surtout un setup beaucoup plus simple et pratique pour vous filer pleins de vidéos giga cool en 2013</strong></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/02/20/petite-visite-de-la-grotte-en-mode-fps-amenagements-finis-a-57-barbitude2013/feed/</wfw:commentRss>
|
||||
<slash:comments>8</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>retrouvez LaGrotteDuBarbu sur Lofi_00 #9 spéciale POIL</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/02/18/retrouvez-lagrottedubarbu-sur-lofi_00-9-speciale-poil/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/02/18/retrouvez-lagrottedubarbu-sur-lofi_00-9-speciale-poil/#comments</comments>
|
||||
<pubDate>Mon, 18 Feb 2013 21:06:24 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Audio]]></category>
|
||||
<category><![CDATA[Divers]]></category>
|
||||
<category><![CDATA[Rencontres]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1163</guid>
|
||||
<description><![CDATA[Il y a de cela quelques semaines Peggy m'avait contactà [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Il y a de cela quelques semaines Peggy m’avait contacté pour m’interviewer par téléphone pour l’émission <strong>Lofi_00</strong> (qui si j’ai bien compris passes sur une radio belge, me souviens plus laquelle mais nos amis belges me rectifieront ou pourront apporter des précisions j’en suis sûr) avec comme thématique: <strong>Le Poil</strong></p>
|
||||
<p>C’est à écouter ici</p>
|
||||
<p><iframe width="480" height="480" src="//www.mixcloud.com/widget/iframe/?feed=http%3A%2F%2Fwww.mixcloud.com%2FLofi_00%2F9-speciale-poil%2F&embed_uuid=563a3e6b-b7c8-487b-9e9b-1261c8995a73&stylecolor=&embed_type=widget_standard" frameborder="0"></iframe>
|
||||
<div style="clear:both; height:3px; width:472px;"></div>
|
||||
<p style="display:block; font-size:12px; font-family:Helvetica, Arial, sans-serif; margin:0; padding: 3px 4px; color:#02a0c7; width:472px;"><a href="http://www.mixcloud.com/Lofi_00/9-speciale-poil/?utm_source=widget&utm_medium=web&utm_campaign=base_links&utm_term=resource_link" target="_blank" style="color:#02a0c7; font-weight:bold;">#9 Spéciale POIL</a><span> by </span><a href="http://www.mixcloud.com/Lofi_00/?utm_source=widget&utm_medium=web&utm_campaign=base_links&utm_term=profile_link" target="_blank" style="color:#02a0c7; font-weight:bold;">Lofi_00</a><span> on </span><a href="http://www.mixcloud.com/?utm_source=widget&utm_medium=web&utm_campaign=base_links&utm_term=homepage_link" target="_blank" style="color:#02a0c7; font-weight:bold;"> Mixcloud</a></p>
|
||||
<div style="clear:both; height:3px;"></div>
|
||||
<p>Gros win en tout cas puisque j’ai réussi à faire passer du Lamb Of God et du Meshuggah à la radio<br />
|
||||
<em><strong>Barbitude Power!…</strong></em></p>
|
||||
<p><em>Comme d’habitude, vos commentaires et insultes sont les bienvenus</em></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/02/18/retrouvez-lagrottedubarbu-sur-lofi_00-9-speciale-poil/feed/</wfw:commentRss>
|
||||
<slash:comments>2</slash:comments>
|
||||
</item>
|
||||
<item>
|
||||
<title>LaGrotteDuBarbu générique 2013 #barbitude2013</title>
|
||||
<link>http://www.lagrottedubarbu.com/2013/02/18/lagrottedubarbu-generique-2013-barbitude2013/</link>
|
||||
<comments>http://www.lagrottedubarbu.com/2013/02/18/lagrottedubarbu-generique-2013-barbitude2013/#comments</comments>
|
||||
<pubDate>Mon, 18 Feb 2013 14:10:53 +0000</pubDate>
|
||||
<dc:creator>babozor</dc:creator>
|
||||
<category><![CDATA[Production]]></category>
|
||||
<category><![CDATA[Video]]></category>
|
||||
<category><![CDATA[barbitude2013]]></category>
|
||||
<category><![CDATA[2013]]></category>
|
||||
<category><![CDATA[barbitude]]></category>
|
||||
<category><![CDATA[barbu]]></category>
|
||||
<category><![CDATA[générique]]></category>
|
||||
<category><![CDATA[podcast]]></category>
|
||||
<category><![CDATA[TonTube]]></category>
|
||||
|
||||
<guid isPermaLink="false">http://www.lagrottedubarbu.com/?p=1161</guid>
|
||||
<description><![CDATA[Hello les barbus…
|
||||
Le nouveau générique de LaGrotteD [...]]]></description>
|
||||
<content:encoded><![CDATA[<p>Hello les barbus…<br />
|
||||
Le <strong>nouveau générique de LaGrotteDuBarbu 2013</strong> est en ligne et dispo sur <strong>TonTube</strong></p>
|
||||
<p><iframe width="640" height="360" src="http://www.youtube.com/embed/YXVwyNIqlZU" frameborder="0" allowfullscreen></iframe></p>
|
||||
<p>Tourné et monté à la barbare ce matin (en même temps que l’intro et l’outro pour l’année 2013 de LaGrotteDuBarbu)<br />
|
||||
Avec comme d’habitude de la musique bourrin qui vient du dernier album de <strong>Meshuggah</strong> – <strong>Koloss</strong></p>
|
||||
<p><em>Comme d’hab tous les commentaires et insultes sont les bienvenus</em></p>
|
||||
<p class="wp-flattr-button"></p>]]></content:encoded>
|
||||
<wfw:commentRss>http://www.lagrottedubarbu.com/2013/02/18/lagrottedubarbu-generique-2013-barbitude2013/feed/</wfw:commentRss>
|
||||
<slash:comments>9</slash:comments>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
527
vendor/fguillot/picofeed/tests/fixtures/hamakor.xml
vendored
527
vendor/fguillot/picofeed/tests/fixtures/hamakor.xml
vendored
@ -1,527 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||
|
||||
<title>פלאנט תוכנה חופשית בישראל (Planet FOSS-IL)</title>
|
||||
<link rel="self" href="http://planet.hamakor.org.il/atom.xml"/>
|
||||
<link href="http://planet.hamakor.org.il"/>
|
||||
<id>http://planet.hamakor.org.il/atom.xml</id>
|
||||
<updated>2014-12-22T02:31:42+00:00</updated>
|
||||
<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>
|
||||
|
||||
<entry xml:lang="he">
|
||||
<title type="html">סינטרה מודולרית</title>
|
||||
<link href="http://idkn.wordpress.com/2014/12/20/modular-sinatra/"/>
|
||||
<id>http://idkn.wordpress.com/?p=7223</id>
|
||||
<updated>2014-12-20T20:00:02+00:00</updated>
|
||||
<content type="html"><p>ב2012 ניסיתי ליצור פוסטים בנושא של <a href="http://idkn.wordpress.com/2012/11/19/advanced-usage-in-sinatra-first-part/">כיצד ניתן להגיע למצב הדומה לrails עם סינטרה</a>.<br />
|
||||
בשל חוסר סבלנות וזמן, זנחתי את הפוסט, אבל לא את הרעיון לבצע אותו.<br />
|
||||
למעשה זה היה רעיון טוב מאוד לזנוח אותו בזמנו, היות ואז הייתי עושה דברים לא נכון, וכיום יש לי יותר ידע וניסיון בנושא, וגם איך לעבוד נכון יותר, וכן גם גרסת הרובי מאפשרת לנו לעבוד קל יותר.</p>
|
||||
<p>באותו הזמן של הרצון לחזור ולכתוב על הנושא, מצאתי את עצמי זקוק בדחיפות למערכת שתסייע לי לדבג API שאני יוצר בפרוייקט שמתבצע באמצעות REST, אז החלטתי לצרף שני צרכים עם דבר אחד.</p>
|
||||
<p>הרעיון שלי הוא למעשה שרת אשר משמש לקוח בדיקות עבור REST, כך שאפשר להתקין אותו על שרת כלשהו בארגון וכולם יכולים להשתמש בו, במקום תוכנה מקומית על המחשב.</p>
|
||||
<p>הקוד שלי די ממוקד לרובי 2.1 (אני מקווה כי גם מעלה, 2.2 נראה שיתמוך בקוד שלי), ופחות מזה, יצעק לכם על מספר דברים, אשר בקלות ניתן לפתור, אך ראו הוזהרתם.</p>
|
||||
<p><a href="https://github.com/ik5/ruby_rest_wui">התחלתי ליצור את הפרוייקט</a>, והוא עובד עם סינטרה, ומחזיק נכון לכתיבת הפוסט שלוש מחלקות שונות בשביל ביצוע routing.<br />
|
||||
בנוסף, יצרתי לעצמי מבנה ספריות המתאימות למה שאני רוצה לבצע, לפי לוגיקה, כך שהלוגיקה השייכת לממשק, <a href="https://github.com/ik5/ruby_rest_wui/tree/master/logic">נמצאת כאן</a>, בעוד ש<a href="https://github.com/ik5/ruby_rest_wui/tree/master/config">ההגדרות בכלל נמצאות כאן</a>.</p>
|
||||
<p><a href="http://rack.github.io/">אנחנו משתמשים בRack</a> בעצם, היות וכמעט וכל הframeworks עבור בניית מערכות web ברובי משתמשים בו, אנו זקוקים לקובץ קבוע בשם <a href="https://github.com/ik5/ruby_rest_wui/blob/master/config.ru">config.ru</a>.</p>
|
||||
<p>הקובץ הזה, בעצם אחראי על התחלת השרת, וטעינה של המערכת שלנו, כאשר הוא תומך בטעינה של יותר ממערכת אחת בו זמנית, כולל שני framework או יותר, אך נכון לגרסה הנוכחית, אני משתמש בו רק עבור Sinatra.</p>
|
||||
<p>אני משתמש גם ב <a href="http://bundler.io/">Bundler</a> לניהול תלויות, אשר מאפשר לנו גם לדאוג לצעוק על דברים שלא נטענו, ובעיקר עושה לנו סדר של גרסאות של תלויות, ובכך שדברים לא יתנגשו אחד בשני.</p>
|
||||
<p>לאחר טעינת התלויות, אני טוען קובץ בודד בשם app.rb שהוא בעצם מה שמנהל את האפליקציה שלי. אך במקום להשתמש ב <a href="http://ruby-doc.org/core-2.1.5/Kernel.html#method-i-require">require</a> &quot;רגיל&quot;, אני משתמש בפונקציה בשם <a href="http://ruby-doc.org/core-2.1.5/Kernel.html#method-i-require_relative">require_relative</a>, אשר מאפשרת לטעון דברים מהמיקום הנוכחי של הקובץ המנסה לטעון אותה.</p>
|
||||
<p>כל הקסם של ניהול מספר מחלקות, נעוץ אצלי ב <a href="https://github.com/ik5/ruby_rest_wui/blob/master/logic/app.rb">app.rb</a>.<br />
|
||||
אני יצרתי אותו שיהיה מאוד פשוט &#8211; טען לי את המחלקות האחרון והכנס אותן לסביבת העבודה של רובי, על ידי שימוש ב <a href="https://github.com/sinatra/sinatra/blob/v1.4.5/lib/sinatra/base.rb#L1406">use</a>.</p>
|
||||
<p>למערכת שיצרתי ישנם שני מצבים &#8211; מערכת לדיבוג REST, ומערכת &quot;בדיקות&quot; אשר עליה אפשר לבדוק שדברים עובדים, והיא בעיקר על תקן &quot;echo&quot; כלשהו.</p>
|
||||
<p>את המערכת של יצירת המסכים, ושליחת ה REST, יצרתי בקובץ <a href="https://github.com/ik5/ruby_rest_wui/blob/master/logic/rest.rb">rest.rb</a>, והכל מאוגד שם.<br />
|
||||
יש שם משהו שהולך לעבור למקום אחר בקרוב, וזה מספר מתודות לסיוע בפעולות.</p>
|
||||
<p>הקובץ לביצוע הבדיקות, קיבל את השם <a href="https://github.com/ik5/ruby_rest_wui/blob/master/logic/testing.rb">tests.rb</a>, והוא מי שמנהל את כל הניתובים בנושא.<br />
|
||||
הגרסה הבאה, הולכת לגרום לו להיות גנרי יותר, מצד אחד, וגמיש יותר מצד שני, ובכך הכוח של סינטרה יכנס ממש לפעולה, עם ניתובים ממש דינאמיים וחכמים.</p>
|
||||
<p>Sinatra תומך במשהו אשר קיבל את השם <a href="http://www.sinatrarb.com/intro.html#Helpers">Helpers</a>, וזה מתודות אשר מסייעות לנו לבצע דברים, בצורה שלא נהיה צריכים לחזור עליה כל פעם, וזה זמין גם ל view שלנו, ובגרסה הבאה שאשחרר (נכון לכתיבת הפוסט), המידע יעבור לקובץ בשם helpers.rb ואיתו עובדים קצת שונה ברובי.</p>
|
||||
<p>כל מחלקה של סינטרה, מחזיקה חלק של <a href="http://www.sinatrarb.com/intro.html#Configuration">configure</a> משל עצמה, שזה טוב ורע באותו הזמן. זה טוב, כי זה מספק גמישות, אבל זה רע, כי לפעמים יש לנו קצת חזרה על עצמנו.</p>
|
||||
<p>במקרה הזה, הגדרתי כי במצב של :development משתמשים ב <a href="http://www.sinatrarb.com/contrib/reloader.html">Sinatra::Reloader</a>, אשר מגיע עם <a href="http://www.sinatrarb.com/contrib/reloader.html">Sinatra-Contrib</a> &#8211; תת פרוייקט המספק הרבה כלי עזר לדברים שונים.<br />
|
||||
הסיבה לשימוש ב Reloader הוא לא לאתחל את השרת בכל שינוי שעושים למחלקה של סינטרה, כאשר Reloader מגלה כי התוכן של הקובץ השתנה, הוא גורם ל rack לטעון אותו שוב, וככה אנחנו לא זקוקים לטעינה מחודשת של השרת עצמו.</p>
|
||||
<p>המערכת שכתבתי, משתמשת ב template בשם <a href="http://haml.info/">haml</a>, למעשה פעם ראשונה אשר אני משתמש בה מרצון. תוכלו למצוא את ה <a href="https://github.com/ik5/ruby_rest_wui/blob/master/views/layout.haml">layout.haml</a> שהוא המסגרת הרגילה וכן כרגע קובץ בשם <a href="https://github.com/ik5/ruby_rest_wui/blob/master/views/index.haml">index.haml</a> תחת ספריית <a href="https://github.com/ik5/ruby_rest_wui/tree/master/views">view</a>.<br />
|
||||
ועבור העיצוב, אני משתמש ב <a href="http://foundation.zurb.com/">Foundation 5</a>, אשר אני אוהב אותה יותר מאשר bootstrap.<br />
|
||||
עבור Javascript יש גם את jQuery וגם את <a href="http://idkn.wordpress.com/2014/11/04/knockout-js/">knockout.js</a>, כאשר אני נעזר גם ב <a href="https://lodash.com/">lodash.js</a> למספר דברים פשוטים, והיא מספקת בעצם גרסה שעברה אופטימיזציה ל underscore.</p>
|
||||
<p>את הקבצים של Foundation, וכל ה Javascript ניתן למצוא תחת <a href="https://github.com/ik5/ruby_rest_wui/tree/master/public">public</a>.</p>
|
||||
<p>דבר אחרון שנשאר לספר עליו הוא שאני משתמש במשהו אשר נקרא <a href="http://puma.io/">puma</a>.<br />
|
||||
מה זה ?<br />
|
||||
puma הוא משהו שלוקח את rack וגורם לו להיות שרת לכל דבר ועניין, אשר ניתן לבצע עליו חיבור לשרתי HTTP שונים, כדוגמץ apache או nginx.<br />
|
||||
החיבור נעשה על ידי הגדרת proxy בשרתים.</p>
|
||||
<p>ההגדרות של puma, נמצאות תחת config, וכפי שניתן לראות את <a href="https://github.com/ik5/ruby_rest_wui/blob/master/config/puma.rb">הקובץ הראשי והחשוב</a>, הוא גם יודע לבנות לעצמו מבנה ספריות במידה והן לא קיימות, דבר שהוספתי לקוד עצמו. הוא כרגע מכוון למצב של development, ולכן יש לשנות קצת הגדרות בשביל שזה יעבור למצב production.</p>
|
||||
<p>אתם מוזמנים לבצע fork, לשחק עם הקוד וגם להחזיק לי תיקונים ותוספות.</p><br />תויק תחת:<a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/%d7%a4%d7%99%d7%aa%d7%95%d7%97/ruby/">Ruby</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/ui/">ui</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/operating-systems/unix/">unix</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/%d7%90%d7%99%d7%a0%d7%98%d7%a8%d7%a0%d7%98/">אינטרנט</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%99%d7%a4%d7%99%d7%9d-%d7%95%d7%98%d7%a8%d7%99%d7%a7%d7%99%d7%9d/">טיפים וטריקים</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/">טכנולוגיה</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/operating-systems/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/">לינוקס</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/%d7%a4%d7%99%d7%aa%d7%95%d7%97/">פיתוח</a>, <a href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/">קוד פתוח</a>, <a href="http://idkn.wordpress.com/category/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/">רשתות</a>, <a href="http://idkn.wordpress.com/category/%d7%a9%d7%a8%d7%aa%d7%99%d7%9d/">שרתים</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/">תוכנה</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/%d7%aa%d7%9b%d7%a0%d7%95%d7%aa/">תכנות</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/">תקשורת</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/idkn.wordpress.com/7223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/idkn.wordpress.com/7223/" /></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=idkn.wordpress.com&#038;blog=3104636&#038;post=7223&#038;subd=idkn&#038;ref=&#038;feed=1" width="1" height="1" /></content>
|
||||
<author>
|
||||
<name>ik_5</name>
|
||||
<uri>http://idkn.wordpress.com</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">לראות שונה » קוד פתוח</title>
|
||||
<subtitle type="html">מבט שונה בעיקר על (פיתוח) תוכנה, עסקים והקוד הפתוח</subtitle>
|
||||
<link rel="self" href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/feed/atom/"/>
|
||||
<id>http://idkn.wordpress.com/feed/atom/</id>
|
||||
<updated>2014-12-22T02:31:34+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="en-US">
|
||||
<title type="html">Kindle Paperwhite &#8220;Unable to Open Item&#8221;</title>
|
||||
<link href="http://www.guyrutenberg.com/2014/12/20/kindle-paperwhite-unable-to-open-item/"/>
|
||||
<id>http://www.guyrutenberg.com/?p=69803</id>
|
||||
<updated>2014-12-20T14:40:04+00:00</updated>
|
||||
<content type="html"><p>Recently, I tried transfering some new ebook to my Kindle Paperwhite (first generation), the books were listed properly. However, when I tried to open them I got<br />
|
||||
&#8220;Unable to Open Item&#8221; error, suggesting I re-download the books from Amazon. I tried transferring the files again and again, but it didnt&#8217; help. Some of the books were <code>mobi</code> files while others were &#8220;AZW` (which I got from <a href="http://indiebook.co.il/">אינדיבוק</a>) and all of them opened fine on my computer.</p>
|
||||
<p>Finally, I followed an advice from a <a href="http://kindledfans.livejournal.com/71655.html?thread=388839#t388839">comment in the KindledFans blog</a>, and converted the files to <code>AZW3</code> (the original comment suggested <code>mobi</code> but <code>AZW3</code> works better with Hebrew). After converting, I moved the files to my Kindle and they opened just fine.</p></content>
|
||||
<author>
|
||||
<name>Guy</name>
|
||||
<uri>http://www.guyrutenberg.com</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">Guy Rutenberg</title>
|
||||
<subtitle type="html">Keeping track of what I do</subtitle>
|
||||
<link rel="self" href="http://www.guyrutenberg.com/feed/atom/"/>
|
||||
<id>http://www.guyrutenberg.com/feed/atom/</id>
|
||||
<updated>2014-12-20T18:48:18+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="he-IL">
|
||||
<title type="html">Docker – חלק חמישי</title>
|
||||
<link href="http://ilsh.info/archives/4571"/>
|
||||
<id>http://ilsh.info/?p=4571</id>
|
||||
<updated>2014-12-19T11:00:31+00:00</updated>
|
||||
<content type="html"><p><a href="http://ilsh.info/archives/4487">בפרק הקודם</a> הדגמתי הרצת שתי פקודות במיכל (באמצעות הפקודה docker run): האחת איפשרה גישה אינטרקטיבית לעבודה עם המיכל ובשניה הרצנו Daemon שסיפק שירות.</p>
|
||||
<p>כרגע אתמקד בעבודה עם docker client. עבודה עם docker client מאוד פשוטה (באמצעות דגלים וארגומנטים ניתן לשלוט בהוראות ל- Docker Client):</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">Usage: &nbsp;<span class="br0">&#91;</span>sudo<span class="br0">&#93;</span> docker <span class="br0">&#91;</span>command<span class="br0">&#93;</span> <span class="br0">&#91;</span>flags<span class="br0">&#93;</span> <span class="br0">&#91;</span>arguments<span class="br0">&#93;</span> <span class="sy0">..</span></div>
|
||||
</div>
|
||||
<p><span id="more-4571"></span></p>
|
||||
<p>הרצת הפקודה docker version תספק לנו אינפורמציה נוספת על גרסת docker בצד השרת ובצד הלקוח (בצד אינפורמציה רבה נוספת).</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker version<br />
|
||||
<span class="br0">&#91;</span>sudo<span class="br0">&#93;</span> password <span class="kw1">FOR</span> ilan: <br />
|
||||
Client version: 1<span class="sy0">.</span>3<span class="sy0">.</span>2<br />
|
||||
Client API version: <span class="nu0">1.15</span><br />
|
||||
Go version <span class="br0">&#40;</span>client<span class="br0">&#41;</span>: go1<span class="sy0">.</span>3<span class="sy0">.</span>3<br />
|
||||
Git commit <span class="br0">&#40;</span>client<span class="br0">&#41;</span>: 39fa2fa<br />
|
||||
OS<span class="sy0">/</span>Arch <span class="br0">&#40;</span>client<span class="br0">&#41;</span>: linux<span class="sy0">/</span>amd64<br />
|
||||
Server version: 1<span class="sy0">.</span>3<span class="sy0">.</span>2<br />
|
||||
Server API version: <span class="nu0">1.15</span><br />
|
||||
Go version <span class="br0">&#40;</span>server<span class="br0">&#41;</span>: go1<span class="sy0">.</span>3<span class="sy0">.</span>3<br />
|
||||
Git commit <span class="br0">&#40;</span>server<span class="br0">&#41;</span>: 39fa2fa</div>
|
||||
</div>
|
||||
<p><br />
|
||||
<br />
|
||||
כדי לקבל עזרה על פקודה מסויימת (נניח attach) נוסיף את הדגל help:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker attach <span class="co1">&#8211;help</span></div></div>
|
||||
<p>Usage: docker attach <span class="br0">&#91;</span>OPTIONS<span class="br0">&#93;</span> CONTAINER</p>
|
||||
<p>Attach <span class="kw1">TO</span> a running container</p>
|
||||
<p>&nbsp; <span class="co1">&#8211;no-stdin=false &nbsp; &nbsp;Do not attach STDIN</span><br />
|
||||
&nbsp; <span class="co1">&#8211;sig-proxy=true &nbsp; &nbsp;Proxy all received signals to the process (even in non-TTY mode). SIGCHLD, SIGKILL, and SIGSTOP are not proxied.</span></p>
|
||||
|
||||
<p><strong>הערה</strong>: כדי לצפות בכל באפשרויות שהפקודה docker תומכת יש להריץ את הפקודה docker בלבד.<br />
|
||||
<br /></p>
|
||||
<p><strong>הרצת אפליקציית רשת באמצעות docker</strong>:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker run <span class="sy0">-</span>d <span class="sy0">-</span>P training<span class="sy0">/</span>webapp python app<span class="sy0">.</span>py<br />
|
||||
Unable <span class="kw1">TO</span> find image <span class="st0">'training/webapp'</span> locally<br />
|
||||
Pulling repository training<span class="sy0">/</span>webapp<br />
|
||||
31fa814ba25a: Download complete <br />
|
||||
511136ea3c5a: Download complete <br />
|
||||
f10ebce2c0e1: Download complete <br />
|
||||
82cdea7ab5b5: Download complete <br />
|
||||
5dbd9cb5a02f: Download complete <br />
|
||||
74fe38d11401: Download complete <br />
|
||||
64523f641a05: Download complete <br />
|
||||
0e2afc9aad6e: Download complete <br />
|
||||
e8fc7643ceb1: Download complete <br />
|
||||
733b0e3dbcee: Download complete <br />
|
||||
a1feb043c441: Download complete <br />
|
||||
e12923494f6a: Download complete <br />
|
||||
a15f98c46748: Download complete <br />
|
||||
<span class="kw1">STATUS</span>: Downloaded newer image <span class="kw1">FOR</span> training<span class="sy0">/</span>webapp:latest<br />
|
||||
52d212d850c52cf8553f729ecc0850647d1bb50f274f6ef9316ea19b3d3b7fe5</div>
|
||||
</div>
|
||||
<ul>
|
||||
<li>הדגל d- מוכר: האפליקציה במיכל תורץ ברקע ותספק את השירות</li>
|
||||
<li>הדגל p- מציין שיש למפות כל פורט נדרש במיכל ולשייך אותו למיכל הנוכחי</li>
|
||||
<li>מאחר שהמיכל 'training/webapp' לא נמצא במאגר המקומי, הוא הורד מהרשת (Docker Hub). המיכל מכיל סקריפט פייתון פשוט (app.py) שמיישם אפליקצית רשת.</li>
|
||||
</ul>
|
||||
<p><br />
|
||||
<br />
|
||||
נריץ שוב את הפקודה docker ps (הפעם עם הדגל l- בו נבקש לקבל מידע נוסף על זמן הרצת הסקריפט)</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker ps <span class="sy0">-</span>l<br />
|
||||
CONTAINER ID &nbsp;IMAGE &nbsp;COMMAND &nbsp;CREATED &nbsp;<span class="kw1">STATUS</span> &nbsp; PORTS NAMES 2d212d850c5 &nbsp;training<span class="sy0">/</span>webapp:latest &nbsp;<span class="st0">&quot;python app.py&quot;</span> &nbsp;<span class="nu0">11</span> minutes ago &nbsp; Up <span class="nu0">11</span> minutes &nbsp;0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">49153</span><span class="sy0">-&gt;</span><span class="nu0">5000</span><span class="sy0">/</span>tcp &nbsp;clever_lumiere</div>
|
||||
</div>
|
||||
<p>הערה: הפורט 49153 בצד הלקוח מופה לפורט 5000 בצד השרת.</p>
|
||||
<p>נגלוש לכתובת זאת ונקבל את המסך הבא:</p>
|
||||
<p><a href="http://ilsh.info/wp-content/uploads/2014/12/webapp1.png" rel="lightbox"><img src="http://ilsh.info/wp-content/uploads/2014/12/webapp1-300x115.png" alt="webapp1" width="300" height="115" class="aligncenter size-medium wp-image-4593" /></a></p>
|
||||
<p><br />
|
||||
<br />
|
||||
כדי לצפות בלוגים של השרת נריץ את הפקודה הבאה:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker logs <span class="sy0">-</span>f clever_lumiere<br />
|
||||
&nbsp;<span class="sy0">*</span> Running <span class="kw1">ON</span> http:<span class="sy0">//</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">5000</span><span class="sy0">/</span><br />
|
||||
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">49</span>:<span class="nu0">33</span><span class="br0">&#93;</span> <span class="st0">&quot;GET / HTTP/1.1&quot;</span> <span class="nu0">200</span> <span class="sy0">-</span><br />
|
||||
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">49</span>:<span class="nu0">34</span><span class="br0">&#93;</span> <span class="st0">&quot;GET /favicon.ico HTTP/1.1&quot;</span> <span class="nu0">404</span> <span class="sy0">-</span><br />
|
||||
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">50</span>:04<span class="br0">&#93;</span> <span class="st0">&quot;GET / HTTP/1.1&quot;</span> <span class="nu0">200</span> <span class="sy0">-</span><br />
|
||||
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">50</span>:04<span class="br0">&#93;</span> <span class="st0">&quot;GET /favicon.ico HTTP/1.1&quot;</span> <span class="nu0">404</span> <span class="sy0">-</span><br />
|
||||
172<span class="sy0">.</span>17<span class="sy0">.</span>42<span class="sy0">.</span>1 <span class="sy0">-</span> <span class="sy0">-</span> <span class="br0">&#91;</span>07<span class="sy0">/</span>Dec<span class="sy0">/</span><span class="nu0">2014</span> 03:<span class="nu0">50</span>:04<span class="br0">&#93;</span> <span class="st0">&quot;GET /favicon.ico HTTP/1.1&quot;</span> <span class="nu0">404</span> <span class="sy0">-</span></div>
|
||||
</div>
|
||||
<p><strong>הערה</strong>: הדגל f- גורם ל- docker להתנהג כמו הפקודה tail -f (כלומר להמשיך להאזין ללוגים ולא לצאת מהמשימה בסיום הרצת הפקודה).</p>
|
||||
<p><br />
|
||||
<br />
|
||||
כדי לצפות בתהליכים הרצים בתוך המיכל נריץ את הפקודה top: </p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker top clever_lumiere<br />
|
||||
UID &nbsp;PID &nbsp; PPID &nbsp;C &nbsp;STIME &nbsp;TTY &nbsp;TIME &nbsp;CMD<br />
|
||||
root &nbsp;<span class="nu0">23777</span> &nbsp;<span class="nu0">1774</span> &nbsp;<span class="nu0">0</span> &nbsp;05:<span class="nu0">33</span> &nbsp;? &nbsp;00:00:00 &nbsp;python app<span class="sy0">.</span>py</div>
|
||||
</div>
|
||||
<p>ניתן להבחין שהפקודה python app.py היא הפקודה היחידה שרצה במיכל.</p>
|
||||
<p><br />
|
||||
<br />
|
||||
כדי לעצור את עבודת המיכל נריץ את הפקודה הבאה:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker stop clever_lumiere<br />
|
||||
clever_lumiere</div>
|
||||
</div>
|
||||
<p><br />
|
||||
<br />
|
||||
אם נרצה להריץ שוב את המיכל יש לנו שתי אפשרויות: לחדש את ריצת המיכל (מאותה הנקודה שרץ בעבר) או לאתחל אותו:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">~$ sudo docker start clever_lumiere<br />
|
||||
clever_lumiere</div>
|
||||
</div>
|
||||
<p><br />
|
||||
<br />
|
||||
נריץ שוב את הפקודה pocker ps -l וניראה שהמיכל רץ כבר 41 דקות &#8211; כלומר חידשנו את פעולתו.</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker ps <span class="sy0">-</span>l<br />
|
||||
CONTAINER ID &nbsp;IMAGE &nbsp;COMMAND &nbsp;CREATED &nbsp;<span class="kw1">STATUS</span> &nbsp;PORTS &nbsp;NAMES<br />
|
||||
52d212d850c5 &nbsp;training<span class="sy0">/</span>webapp:latest &nbsp;<span class="st0">&quot;python app.py&quot;</span> &nbsp;<span class="nu0">41</span> minutes ago &nbsp;Up <span class="nu0">50</span> seconds &nbsp;0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">49154</span><span class="sy0">-&gt;</span><span class="nu0">5000</span><span class="sy0">/</span>tcp &nbsp;clever_lumiere</div>
|
||||
</div>
|
||||
<p><br />
|
||||
<br />
|
||||
לעומת זאת הפקודה restart תגרום להפסקת פעולת המיכל וריצתו מחדש (מאפס):</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker restart clever_lumiere</div>
|
||||
</div>
|
||||
<p><br />
|
||||
כפי שניתן להיווכח:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker ps <span class="sy0">-</span>l<br />
|
||||
CONTAINER ID &nbsp;IMAGE &nbsp;COMMAND &nbsp;CREATED &nbsp;<span class="kw1">STATUS</span> &nbsp;PORTS &nbsp;NAMES<br />
|
||||
52d212d850c5 &nbsp;training<span class="sy0">/</span>webapp:latest &nbsp;<span class="st0">&quot;python app.py&quot;</span> &nbsp;<span class="nu0">44</span> minutes ago &nbsp;Up <span class="nu0">2</span> seconds &nbsp;0<span class="sy0">.</span>0<span class="sy0">.</span>0<span class="sy0">.</span>0:<span class="nu0">49155</span><span class="sy0">-&gt;</span><span class="nu0">5000</span><span class="sy0">/</span>tcp &nbsp;clever_lumiere</div>
|
||||
</div>
|
||||
<p><br />
|
||||
<br />
|
||||
כדי להסיר את המיכל יש תחילה לעצור אותו (stop) ורק לאחר מכן נוכל להסיר אותו באמצעות בפקודה rm:</p>
|
||||
<div class="codesnip-container">
|
||||
<div class="sql codesnip">$ sudo docker rm clever_lumiere<br />
|
||||
Error response <span class="kw1">FROM</span> daemon: You cannot remove a running container<span class="sy0">.</span> Stop the container before attempting removal <span class="kw1">OR</span> <span class="kw1">USE</span> <span class="sy0">-</span>f<br />
|
||||
2014<span class="sy0">/</span>12<span class="sy0">/</span>07 06:21:14 Error: failed <span class="kw1">TO</span> remove one <span class="kw1">OR</span> more containers<br />
|
||||
ilan@ilan<span class="sy0">-</span>HP<span class="sy0">-</span>ProBook<span class="sy0">-</span>6450b:~$ sudo docker stop clever_lumiere<br />
|
||||
clever_lumiere<br />
|
||||
ilan@ilan<span class="sy0">-</span>HP<span class="sy0">-</span>ProBook<span class="sy0">-</span>6450b:~$ sudo docker rm clever_lumiere<br />
|
||||
clever_lumiere</div>
|
||||
</div>
|
||||
<p><br />
|
||||
<br />
|
||||
עד לנקודה זאת תמיד השתמשנו במיכלים מוכנים שהורדנו מ- Docker Hub. בפרק הבא נלמד להכין מיכלים בעצמנו</p>
|
||||
<img src="http://ilsh.info/wp-content/uploads/2007/08/signature.png" alt="My Signature" /><div class="fcbk_share"><div class="fcbk_like"></div></div></content>
|
||||
<author>
|
||||
<name>Ilan Shavit</name>
|
||||
<uri>http://ilsh.info</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">האתר של שביט אילן » לינוקס ותוכנה חופשית</title>
|
||||
<subtitle type="html">בלוג על לינוקס ותוכנה חופשית</subtitle>
|
||||
<link rel="self" href="http://ilsh.info/archives/category/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/feed"/>
|
||||
<id>http://ilsh.info/archives/category/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/feed</id>
|
||||
<updated>2014-12-19T11:03:37+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="en-US">
|
||||
<title type="html">Orchestrator 1.2.9 GA released</title>
|
||||
<link href="http://code.openark.org/blog/mysql/orchestrator-1-2-9-ga-released"/>
|
||||
<id>http://code.openark.org/blog/?p=7177</id>
|
||||
<updated>2014-12-18T16:24:59+00:00</updated>
|
||||
<content type="html"><p><a href="https://github.com/outbrain/orchestrator">Orchestrator</a> <strong>1.2.9 GA</strong> <a href="https://github.com/outbrain/orchestrator/releases/tag/v1.2.9">has been released</a>. Noteworthy:</p>
|
||||
<ul>
|
||||
<li>Added "<strong>ReadOnly</strong>" (true/false) configuration param. You can have orchestrator completely read-only</li>
|
||||
<li>Added <strong>"AuthenticationMethod": "multi"</strong>: works like BasicAuth (your normal HTTP user+password) only it also accepts the special user called <strong>"readonly"</strong>, which, surprise, can only view and not modify</li>
|
||||
<li>Centralized/serialized most backend database writes (with hundreds/thousands monitored servers it was possible or probable that high concurrency led to too-many-connections openned on the backend database).</li>
|
||||
<li>Fixed evil evil bug that would skip some checks if binary logs were not enabled</li>
|
||||
<li>Better hostname resolve (now also asking MySQL server to resolve hostname; resolving is cached)</li>
|
||||
<li><strong>Pseudo-GTID</strong> (read <a href="http://code.openark.org/blog/mysql/refactoring-replication-topology-with-pseudo-gtid">here</a>, <a href="http://code.openark.org/blog/mysql/orchestrator-1-2-1-beta-pseudo-gtid-support-reconnect-slaves-even-after-master-failure">here</a>, <a href="http://code.openark.org/blog/mysql/refactoring-replication-topologies-with-pseudo-gtid-a-visual-tour">here</a>) support now considered stable (apart from being tested it has already been put to practice multiple times in production at <strong>Outbrain</strong>, in different planned and unplanned crash scenarios)</li>
|
||||
</ul>
|
||||
<p>I continue developing <em>orchestrator</em> as free and open source at my new employer, <a href="http://www.booking.com">Booking.com</a>.</p>
|
||||
<p>&nbsp;</p>
|
||||
<p>&nbsp;</p></content>
|
||||
<author>
|
||||
<name>shlomi</name>
|
||||
<uri>http://code.openark.org/blog</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">code.openark.org » MySQL</title>
|
||||
<subtitle type="html">Blog by Shlomi Noach</subtitle>
|
||||
<link rel="self" href="http://code.openark.org/blog/category/mysql/feed/atom"/>
|
||||
<id>http://code.openark.org/blog/feed/atom</id>
|
||||
<updated>2014-12-18T16:31:32+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="he-IL">
|
||||
<title type="html">Dynamic DNS with CloudFlare</title>
|
||||
<link href="http://blog.rabin.io/328/dynamic-dns-cloudflare"/>
|
||||
<id>https://blog.rabin.io/?p=328</id>
|
||||
<updated>2014-12-17T23:25:43+00:00</updated>
|
||||
<content type="html"><div><p>This is a simple hack I found for my self to have a &#8220;Dynamic DNS&#8221; for my home IP.</p>
|
||||
<p>I&#8217;m using CloudFlare as my name server to manage the zone file for my domain, And one of the nice things about FC is that they have nice <a href="https://www.cloudflare.com/docs/client-api.html" target="_blank">API</a> to manage your account. One of the options this API provides is the capability to <a href="https://www.cloudflare.com/docs/client-api.html#s5.2" target="_blank">update you DNS entries in the Zone</a>.</p>
|
||||
<p><span id="more-328"></span></p>
|
||||
<h2>Get your token</h2>
|
||||
<p>For all the action with the API you&#8217;ll 3 thinks, your privet token (called tkn in the API), email and the action you like to perform.</p>
|
||||
<p>You can find your token under your <a href="https://www.cloudflare.com/my-account.html" target="_blank">Account page</a></p>
|
||||
<h2>DNS Record ID</h2>
|
||||
<p>Next you&#8217;ll need to find the action you like to perform, in my case is to <a href="https://www.cloudflare.com/docs/client-api.html#s5.2" target="_blank">edit the zone file</a>. which is under the &#8220;DNS Record Management&#8221; -&gt; rec_edit menu, but for using this action you will need the ID number for the recored you like to change, and for that you will need to use &#8220;<a href="https://www.cloudflare.com/docs/client-api.html#s3.3" target="_blank">rec_load_all</a>&#8221; action.</p>
|
||||
<p>e.g</p><pre class="crayon-plain-tag">curl https://www.cloudflare.com/api_json.html \
|
||||
-d 'a=rec_load_all' \
|
||||
-d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
|
||||
-d 'email=sample@example.com' \
|
||||
-d 'z=example.com'</pre><p>The output will be in a JSON format, and the part you are looking for will look similar to this,</p><pre class="crayon-plain-tag">...
|
||||
{
|
||||
"rec_id": "18136402",
|
||||
"rec_tag": "3bcef45cdf5b7638b13cfb89f1b6e716",
|
||||
"zone_name": "example.com",
|
||||
"name": "test.example.com",
|
||||
"display_name": "test",
|
||||
"type": "A",
|
||||
"prio": null,
|
||||
"content": "[server IP]",
|
||||
"display_content": "[server IP]",
|
||||
"ttl": "1",
|
||||
"ttl_ceil": 86400,
|
||||
"ssl_id": null,
|
||||
"ssl_status": null,
|
||||
"ssl_expires_on": null,
|
||||
"auto_ttl": 1,
|
||||
"service_mode": "0",
|
||||
-
|
||||
"props": {
|
||||
"proxiable": 1,
|
||||
"cloud_on": 0,
|
||||
"cf_open": 1,
|
||||
"ssl": 0,
|
||||
"expired_ssl": 0,
|
||||
"expiring_ssl": 0,
|
||||
"pending_ssl": 0
|
||||
}
|
||||
...</pre><p></p>
|
||||
<h2>Edit/Update the DNS record</h2>
|
||||
<p>Now that you have the ID for the record you like to change, it&#8217;s a matter of a simple curl command,</p><pre class="crayon-plain-tag">curl https://www.cloudflare.com/api_json.html \
|
||||
-d 'a=rec_edit' \
|
||||
-d 'tkn=8afbe6dea02407989af4dd4c97bb6e25' \
|
||||
-d 'id=18136402' \
|
||||
-d 'email=sample@example.com' \
|
||||
-d 'z=example.com' \
|
||||
-d 'type=A' \
|
||||
-d 'name=test' \
|
||||
-d 'content=1.2.3.4' \
|
||||
-d 'service_mode=0' \
|
||||
-d 'ttl=1'</pre><p>This command will update the IP to 1.2.3.4 for test.example.com entery.</p>
|
||||
<h3>Automate the update process</h3>
|
||||
<p>To automate the process, i have a cron job which runs every 5 minutes, and query my external IP and compare it to the resolved IP form my DNS.</p><pre class="crayon-plain-tag">#!/bin/bash
|
||||
|
||||
CURRENT_IP=$(dig myip.opendns.com @resolver1.opendns.com +short)
|
||||
RESOLVE_IP=$(dig dyn.example.com +short @jean.ns.cloudflare.com)
|
||||
|
||||
if [[ ${CURRENT_IP} != ${RESOLVE_IP} ]] ;
|
||||
then
|
||||
echo "need to update IP from: ${RESOLVE_IP} -&gt; ${CURRENT_IP}"
|
||||
curl https://www.cloudflare.com/api_json.html -d 'a=rec_edit' \
|
||||
-d 'tkn=c7ee1aef8131daf52e103a21a786ecbd99193' \
|
||||
-d 'email=X@Y.Z' \
|
||||
-d 'id=42' \
|
||||
-d 'z=example.com' \
|
||||
-d 'type=A' \
|
||||
-d 'name=dyn' \
|
||||
-d 'content='${CURRENT_IP} \
|
||||
-d 'service_mode=0' \
|
||||
-d 'ttl=120' \
|
||||
|
||||
|
||||
else
|
||||
echo "nothing to do"
|
||||
exit 0;
|
||||
fi</pre><p>&nbsp;</p>
|
||||
</div></content>
|
||||
<author>
|
||||
<name>Rabin Yasharzadeh</name>
|
||||
<uri>http://blog.rabin.io</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">Rabin.IO » FOSS</title>
|
||||
<subtitle type="html">/home/rabin.io/notes</subtitle>
|
||||
<link rel="self" href="http://blog.rabin.io/tag/foss/feed"/>
|
||||
<id>http://blog.rabin.io/tag/foss/feed</id>
|
||||
<updated>2014-12-17T23:33:41+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="en-US">
|
||||
<title type="html">Drupal Performance Tip – “I’m too young to die” – know your DB engines</title>
|
||||
<link href="http://enginx.com/blog/drupal-performance-tip-im-young-die-know-db-engines/"/>
|
||||
<id>http://enginx.com/?p=512</id>
|
||||
<updated>2014-12-15T07:16:00+00:00</updated>
|
||||
<content type="html"><div class="seriesmeta">This entry is part 4 of 4 in the series <a href="http://enginx.com/series/drupal-performance-tips/" class="series-60" title="Drupal Performance Tips">Drupal Performance Tips</a></div><p>In the spirit of the computer video game <a href="http://doom.wikia.com/wiki/Doom" target="_blank">Doom </a>and its <a href="http://doom.wikia.com/wiki/Skill_level" target="_blank">skill levels</a>, we&#8217;ll review a few ways you can improve your <a href="http://drupal.org" target="_blank">Drupal </a>speed performance and optimize for better results and server response time. These tips that we&#8217;ll cover may be at times specific to Drupal 6 versions, although you can always learn the best practices from these examples and apply them on your own code base.</p>
|
||||
<p><img class="alignleft" src="http://adamatomic.com/pics/blog/doom/doom2.jpg" alt="Doom" width="298" height="212" /></p>
|
||||
<p>Doom skill levels: (easiest first)</p>
|
||||
<p>1.<strong> I&#8217;m too young to die</strong></p>
|
||||
<p>2. Hey, not too rough</p>
|
||||
<p>3. Hurt me plenty</p>
|
||||
<p>4. Ultra-violence</p>
|
||||
<p>5. Nightmare!</p>
|
||||
<p><strong> This post is rated &#8220;I&#8217;m too young too die&#8221; difficulty level</strong>.</p>
|
||||
<p>&nbsp;</p>
|
||||
<p><a href="http://drupal.org" target="_blank">Drupal </a>6 shipped with all tables being <a href="http://drupal.stackexchange.com/questions/20893/drupal-database-innodb-or-myisam" target="_blank">MyISAM</a>, and then Drupal 7 changed all that and shipped with all of its tables using the <a href="http://drupal.stackexchange.com/questions/20893/drupal-database-innodb-or-myisam" target="_blank">InnoDB </a>database engine. Each one with its own <a href="https://www.drupal.org/node/1553474" target="_blank">strengths and weaknesses</a> but it&#8217;s quite clear that InnoDB will probably perform better for your Drupal site (though it has quite a bit of fine tuning configuration to be tweaked on my.cnf).</p>
|
||||
<p>Some modules, whether on Drupal 6, or those on Drupal 7 that simply upgraded but didn&#8217;t quite review all of their code, might ship with queries like <a href="http://www.percona.com/blog/2006/12/01/count-for-innodb-tables/" target="_blank">SELECT COUNT() which if you have migrated your tables to InnoDB (or simply using Drupal 7) then this will hinder on database performance</a>. That&#8217;s mainly because InnoDB and MyISAM work differently, and where-as this proved as quite a fast responding query being executed on a MyISAM database which uses the main index to store this information, for InnoDB the situation is different and will result in doing a full table scan for the count. Obviously, on an InnoDB configuration running such queries on large tables will result in very poor performance</p>
|
||||
<p><a href="http://enginx.com/wp-content/uploads/2014/11/drupal_perf-5.png"><img class="aligncenter size-full wp-image-513" src="http://enginx.com/wp-content/uploads/2014/11/drupal_perf-5.png" alt="drupal_perf-5" width="535" height="256" /></a></p>
|
||||
<p>Note to ponder upon &#8211; what about the Views module which uses similar type of COUNT() queries to create the pagination for its views?</p>
|
||||
|
||||
<!-- Easy AdSense V7.43 -->
|
||||
<!-- [leadout: 1 urCount: 1 urMax: 0] -->
|
||||
<div class="ezAdsense adsense adsense-leadout">
|
||||
<!-- enginx-blog-wide-post -->
|
||||
<ins class="adsbygoogle"></ins>
|
||||
</div>
|
||||
<!-- Easy AdSense V7.43 -->
|
||||
<p>The post <a rel="nofollow" href="http://enginx.com/blog/drupal-performance-tip-im-young-die-know-db-engines/">Drupal Performance Tip &#8211; &#8220;I&#8217;m too young to die&#8221; &#8211; know your DB engines</a> appeared first on <a rel="nofollow" href="http://enginx.com">Liran Tal&#039;s Enginx</a>.</p></content>
|
||||
<author>
|
||||
<name>Liran Tal</name>
|
||||
<uri>http://enginx.com</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">Liran Tal's Enginx » opensource</title>
|
||||
<subtitle type="html">Liran is 31 years old, leader of open source projects and avid community advocate. Entrepreneur at heart, married to his soul-mate Tal.</subtitle>
|
||||
<link rel="self" href="http://enginx.com/tag/opensource/feed/"/>
|
||||
<id>http://enginx.com/tag/opensource/feed/</id>
|
||||
<updated>2014-12-15T07:17:04+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="he-IL">
|
||||
<title type="html">צריבה של ROM עבור Galaxy S1 i9000 מלינוקס</title>
|
||||
<link href="http://cucomania.mooo.com/he/posts/352/%d7%a6%d7%a8%d7%99%d7%91%d7%94-%d7%a9%d7%9c-rom-%d7%a2%d7%91%d7%95%d7%a8-galaxy-s1-i9000-%d7%9e%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1"/>
|
||||
<id>http://cucomania.mooo.com/?p=352</id>
|
||||
<updated>2014-12-15T06:28:39+00:00</updated>
|
||||
<content type="html"><p>בפוסט קודם הסברתי על אודות מחיצות באנדרויד. &quot;הקהילה&quot; קוראת לאסופה של ה־images של המחיצות הללו בתור ROM. אין הרבה הסברים באינטרנט שמסבירים איך לצרוב מכשירי Galaxy S i9000 בעברית בלינוקס. אז &#8211; מעכשיו יש.</p>
|
||||
<ol>
|
||||
<li>תורידו את ה־ROM־ים המקוריים של החברה המתאימה לכם. אין בעייה גדולה לשים רום של חברה אחרת. אם זה לא עובד, אפשר לצרוב את המודם המתאים. באתר של iAndroid יש קישורים להורדה: <a href="http://iandroid.co.il/forum/viewtopic.php?f=42&amp;t=18962">http://iandroid.co.il/forum/viewtopic.php?f=42&amp;t=18962</a></li>
|
||||
<li>הקבצים שתורידו הם self extracting exe לחלונות. אצלי <a href="https://www.winehq.org/">wine</a> עשה את מלאכתו נאמנה והקבצים שנוצרו וחתימות ה־MD5 הם (קבצי ה־exe הם ממש ישנים, ייתכן ועכשיו יש קבצים עם חתימה שונה, מה שחושב זה קבצי ה־tar שנוצרים מהם):
|
||||
<pre dir="ltr">82d5a5fffd1fea566aab7fe39522aa2c I9000.Cellcom.JIJVG.exe
|
||||
0cb6ef26ce3076c5b3ffde7cb2ad2a1a I9000.Partner.JHJVG.exe
|
||||
254ef10b0ddacfeabc44cf547082e856 I9000.Pelephone.JJJVB.exe
|
||||
eedb05d074db2026b38c8f00ca18f935 Cellcom.JIJVG.tar
|
||||
33535d9aff3e39d04b0cc504ac389b51 Pelephone.JJJVB.tar
|
||||
7d593eae36a2d5151e6a84454c739827 Partner.JHJVG.tar</pre>
|
||||
</li>
|
||||
<li>עכשיו צריך לפתוח את אחד הקבצים, בתוך ספרייה חדשה (לדוגמה):
|
||||
<pre dir="ltr"> mkdir open-android-firmware
|
||||
cd open-android-firmware
|
||||
tar xf ../Cellcom.JIJVG.tar</pre>
|
||||
</li>
|
||||
<li>כדי לצרוב צריך גם קובץ pit שמגדיר את מבנה המחיצות. חיפוש ברשת אחר <a href="http://www.lmgtfy.com/?q=s1_odin_20100512.pit">s1_odin_20100512.pit</a> תניב קובץ שהתחימה שלו היא 1d927b36d2fa807a22e64fc86b445130</li>
|
||||
<li>צריך גם קובץ שמגדיר dbdatafs, הוא נקרא גם PDA (אין לי שמץ של מושג מה זה). אותו אפשר להוריד מכאן: <a href="http://forum.xda-developers.com/showthread.php?t=2184403">http://forum.xda-developers.com/showthread.php?t=2184403</a> החתימה של מה שהורדתי היא 868b81b9e28d30c82a00038d29e65d8c</li>
|
||||
<li>הצריבה תיעשה על ידי תוכנה heimdall. היא זמינה מהמאגרים החופשיים של דביאן. להתקנה:
|
||||
<pre dir="ltr"> sudo apt install heimdall-flash</pre>
|
||||
</li>
|
||||
<li><span><strong>אופציונאלי</strong></span>: אני לא אוהב להשתמש ב־root, ולכן הגדרתי חוק udev שהמכשיר יהיה ניתן לתכנות גם בעזרת המשתמש שלי. צריך רק לדאוג שהמשתמש יהיה תחת הקבוצה plugdev ואז החוק הבא יעבוד (זה גם טוב לעבודה מול adb בתור משתמש רגיל, ולכן מומלץ).השורה אחרונה מתאימה לגלקסי, האחרות לנקסוס וואללה, לא זוכר <img src="http://cucomania.mooo.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" />
|
||||
<pre dir="ltr">elcuco@pinky ~ $ cat /etc/udev/rules.d/51-android.rules
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="681c", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"</pre>
|
||||
</li>
|
||||
<li>בשלב זה נשים את המכשיר במצב download. תוציאו את המכסה האחורי,ואז תוציאו את הסוללה (פשוט לתת מכה והיא יוצאת). תכניסו מחדש את הסוללה ואז ללחוץ על השילוש הקדוש: מקש הבית, כפתור שמע תחתון וכפתור ההדלקה. <a href="https://www.tinhte.vn/threads/huong-dan-up-room-root-galaxy-win-i8552.2132717/">על הצג יהיה אנדרויד צהוב</a>.<br />
|
||||
<span><strong>המלצה:</strong></span> לא לשים את המכסה אחורי. יהיה יותר קל להוציא את הסוללה ולהתחיל מההתחלה, ואני מבטיח שיהיה צורך בזה <img src="http://cucomania.mooo.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></li>
|
||||
<li>כעת פשוט מפעילים את הפקודה הבאה (אני שמרתי אותה בתסריט בשם flash-all.sh)
|
||||
<pre dir="ltr">heimdall flash --repartition \
|
||||
--pit s1_odin_20100512.pit \
|
||||
--FACTORYFS factoryfs.rfs \
|
||||
--CACHE cache.rfs \
|
||||
--DBDATAFS dbdata.rfs \
|
||||
--IBL+PBL boot.bin \
|
||||
--SBL Sbl.bin \
|
||||
--PARAM param.lfs \
|
||||
--KERNEL zImage \
|
||||
--MODEM modem.bin</pre>
|
||||
</li>
|
||||
<li>זהו. הצריבה לוקחת כמה דקות ואחרי המכשיר עולה כמו חדש.</li>
|
||||
</ol>
|
||||
<p>שימו לב לאותיות הגדולות. הטקסט הזה מגדיר את שמות המחיצות כפי שמוגדרות בקובץ pit שבחרתם (תפתחו אותו בעורך טקסט ותבינו). אני מניח שאם נשנה את שמות המחיצות לאותיות קטנות נוכל לשנות את הפקודה שתהיה באותיות קטנות. אם מישהו בודק את זה &#8211; תכתוב את זה בתגובות, זה יהיה נחמד לדעת.</p>
|
||||
<p><span>המלצות נוספות:</span></p>
|
||||
<ol>
|
||||
<li>אל תנסו את זה בחלונות. צריך להשתמש בתוכנה odin שאין לי מושג מה היא עושה מי כתב אותה. זאת הדלפה של מישהו ואני לא סומך על קוד של מישהו אחר במחשב שלי. התוכנות שיש בלינוקס נבדקו והן קוד פתוח, אני סומך עליהן יותר.</li>
|
||||
<li>תוודאו את החתימות (md5 במיקרה של מה שאני נותן כאן).</li>
|
||||
<li>כמה שיותר מהר נסו לשים רום אלטרנטיבי. <a href="https://download.cyanogenmod.org/?device=galaxysmtd">cyanogenmod</a> הוא בסדר גמור. אני חושב ש־<a href="http://redmine.replicant.us/projects/replicant/wiki/GalaxySI9000">Replicant</a> יהיה יותר טוב &#8211; אבל לא בדקתי אישית, והוא לא זמין לכל מכשיר.</li>
|
||||
<li>על מכשיר ישן זה, לא הייתי ממליץ על gapps כלל. אני השתמשתי ב־<a href="https://f-droid.org/">FDroid</a> והשלמתי כמה תוכנות עם <a href="http://m.aptoide.com/installer">Aptoid</a>. האחרון מפוקפק משהו&#8230; אבל זאת פשרה שאני נאלץ לחיות איתה.</li>
|
||||
<li>כדי להחליף מודם, יש לשים את המכשיר במצב download ולצרוב בעזרת הפקודה הבאה (את המודם צריך לקחת מהרום המתאים):
|
||||
<pre dir="ltr">heimdall flash --MODEM modem.bin</pre>
|
||||
</li>
|
||||
<li>אם דילגת על השלב של udev פשוט לשים sudo לפני כל פקודה.</li>
|
||||
</ol>
|
||||
<p><span>שאלות שנותרו לי ללא מענה:</span></p>
|
||||
<ol>
|
||||
<li>מה התוכן של dbdata.rfs ומה המטרה של המחיצה הזאת.</li>
|
||||
<li>מה זה param.lfs.</li>
|
||||
</ol>
|
||||
<p>תזכורת: <a title="מחיצות באנדרואיד" href="http://cucomania.mooo.com/he/posts/349/%d7%9e%d7%97%d7%99%d7%a6%d7%95%d7%aa-%d7%91%d7%90%d7%a0%d7%93%d7%a8%d7%95%d7%99%d7%93">מחיצות באנדרויד</a></p></content>
|
||||
<author>
|
||||
<name>Diego Iastrubni</name>
|
||||
<uri>http://cucomania.mooo.com</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">עברית בלינוקס » המקור</title>
|
||||
<subtitle type="html">משתמש לינוקס ממוצע, בערך</subtitle>
|
||||
<link rel="self" href="http://cucomania.mooo.com/he/category/hamakor/feed"/>
|
||||
<id>http://cucomania.mooo.com/he/category/hamakor/feed</id>
|
||||
<updated>2014-12-15T06:33:44+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
<entry xml:lang="he">
|
||||
<title type="html">האקינג לראוטר, או איך להפוך ראוטר לקוד פתוח</title>
|
||||
<link href="http://idkn.wordpress.com/2014/12/11/router-hacking/"/>
|
||||
<id>http://idkn.wordpress.com/?p=7265</id>
|
||||
<updated>2014-12-14T08:15:49+00:00</updated>
|
||||
<content type="html"><p><a href="http://idkn.wordpress.com/2009/03/20/%D7%A6%D7%A2%D7%93-%D7%A7%D7%98%D7%9F-%D7%9C%D7%90%D7%95%D7%A4%D7%9F-%D7%9E%D7%95%D7%A7%D7%95-%D7%A6%D7%A2%D7%93-%D7%92%D7%93%D7%95%D7%9C-%D7%9C%D7%A2%D7%99%D7%93%D7%95/">לפני מספר שנים, רכשתי מדורון OpenMoko</a>, ועשיתי עליו מספר פעולות האקינג די נחמדות בשביל לשלוט בטלפון כמו שאני רוצה, או למעשה במודם סלולרי, ושאר הרכיבים, כולל כתיבה של מספר תוכנות ממש קטנות לעצמי, רק כהוכחת יכולת ולא מעבר.</p>
|
||||
<p>מאז לא היו לי אתגרים באמת מעניינים בנושא ההאקינג של מכשירים, עד שרכשתי את WDR4300 של TP-Link והחלטתי שאני לא אוהב את הרעיון שאין לי שליטה על הראוטר שלי.</p>
|
||||
<p>גיליתי שאני מוגבל, היות ובמדינת ישראל יש הגבלת תדרים על ידי משרד הביטחון (ולא משרד התקשורת) &#8211; WTF ?!<br />
|
||||
אז בגלל זה אני למשל לא הייתי יכול לעדכן את הראוטר לגרסה חדשה יותר של TP-Link, כי אין להם הורדה של גרסה &quot;ישראלית&quot; המגבילה תדרים (מצטער אבל זה הזוי).</p>
|
||||
<p>אז התקנתי openwrt, ופתאום נזכרתי לטובה במוקו, אשר דרש ממני קצת האקינג בשביל לגרום לו לעבוד.<br />
|
||||
מצאתי את עצמי ב7 בערב עד 1 לפנות בוקר מתאים אותו לצרכים שלי.</p>
|
||||
<p>זה כיף להיכנס למכשיר דרך telnet ולהתחיל להגדיר את הפצת הלינוקס כפי שאתה רוצה. וזה עוד יותר כיף, כשמערכת החבילות זהה למוקו <span class="wp-smiley wp-emoji wp-emoji-smile" title=":)">:)</span> .<br />
|
||||
אחרי שאתה מגדיר סיסמה ל root, ה telnet מתבטל, ואתה חייב לעבוד עם ssh, שגם עברה מספר שיפצורים על ידי.</p>
|
||||
<p>אני קיבלתי את הראוטר עם חומרה v1.7, שזה השיפצור האחרון של tplink (נכון לכתיבת הפוסט הזה) בנושא החומרה, ונראה שהכל עובד מהקופסא, אחרי שאפשרתי מספר דברים <span class="wp-smiley wp-emoji wp-emoji-smile" title=":)">:)</span></p>
|
||||
<p>זו פעם ראשונה שאני עובד עם אחד מפרוייקטי wrt, ואת האמת, אני נהנה מכל שניה, עם המשחקים האלו, אבל בסופו של דבר, אם הראוטר לא עובד ועושה את העבודה, הוא לא שווה הרבה.</p>
|
||||
<p>אבל כאן הוא עושה בדיוק מה שאני רוצה, כמו שאני רוצה, בלי שמתערבים לי בו.<br />
|
||||
המטרה של הראוטר להחליף את הראוטר שבזק מספקים, היות ואם אגיד שהוא זבל, אתן לזבל שם רע.</p>
|
||||
<p>הראוטר של בזק מנתק את ה wifi כל כמה זמן לכמה שניות. כלומר את המכשירים המחוברים אליו.<br />
|
||||
מדפסת הרשת שלי, משום מה לא עובדת כמו שצריך עם הראוטר הזה, אבל הכי גרוע זה ה <a href="http://en.wikipedia.org/wiki/TR-069">TR-069</a> שיש בראוטר ואני לא יכול לבטל אותו, הוא סוג של back-door לכל הראוטרים האלו, המאפשרים לבזק לבצע provision מרחוק, אבל מסכנים את הראוטר לחלוטין.</p>
|
||||
<p>אז אחרי הרבה התלבטויות, הגיע הזמן פשוט לעבוד עם ראוטר טוב ואיכותי במקום, שאני יכול להחליט עליו כל דבר שרק ארצה, וכמובן שזה מה ש open-wrt מאפשר לי.</p>
|
||||
<p>אני יכול לבצע אפילו התקנת freeswitch עליו, מגרסת הפיתוח (משום מה), שלא לדבר על אסטריסק, או <a href="http://yate.null.ro/pmwiki/">yate</a>.<br />
|
||||
התקנה של מרכזיה כדוגמת freeswitch למשל, מאפשרת אם מתבצעת נכון, להעביר את הכוח לסוג של DMZ, שמוגן מתקיפות למינהן, אבל כן מסוגל לבצע שיחות.<br />
|
||||
אך אין לי כוונה להתקין מרכזיה כלשהי על הראוטר.<br />
|
||||
אם זה לא מספיק, אני יכול גם להתקין את Kamailio מסדרת שלוש וסדרת ארבע, מה שאומר שאני גם יכול לקבל SIP Proxy שאני יכול לתכנת כפי שאני רוצה, אך גם כאן, זה לא יהיה מה שאעשה.</p>
|
||||
<p>פשוט כיף הכוח שאתה מקבל חזרה לציוד שאתה רוכש לעצמך, ואמנם אינני אוהב שיש ריבוי חוקים, למעט חוקים שנועדו לאזן את החיים, אך לדעתי חוק אשר מחייב כל יצרן חומרה בסגנון ראוטרים, טלפונים וכיוב', לאפשר לבצע מה שרוצים על החומרה עצמה, יעשה רק טוב.</p>
|
||||
<p>בכל מקרה, אני מאוד נהנה <span class="wp-smiley wp-emoji wp-emoji-smile" title=":)">:)</span></p><br />תויק תחת:<a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/%d7%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/asterisk/">asterisk</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/%d7%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/freeswitch/">freeswitch</a>, <a href="http://idkn.wordpress.com/category/kamailio/">kamailio</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/%d7%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/%d7%a1%d7%9c%d7%95%d7%9c%d7%a8%d7%99/openmoko/">OpenMoko</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/operating-systems/">Operating Systems</a>, <a href="http://idkn.wordpress.com/category/yate/">yate</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%97%d7%95%d7%9e%d7%a8%d7%94/">חומרה</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/">טכנולוגיה</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%a7%d7%a9%d7%95%d7%a8%d7%aa/%d7%98%d7%9c%d7%a4%d7%95%d7%a0%d7%99%d7%94/">טלפוניה</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/operating-systems/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/">לינוקס</a>, <a href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/">קוד פתוח</a>, <a href="http://idkn.wordpress.com/category/%d7%a8%d7%90%d7%95%d7%98%d7%a8%d7%99%d7%9d/">ראוטרים</a>, <a href="http://idkn.wordpress.com/category/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/">רשתות</a>, <a href="http://idkn.wordpress.com/category/%d7%98%d7%9b%d7%a0%d7%95%d7%9c%d7%95%d7%92%d7%99%d7%94/%d7%aa%d7%95%d7%9b%d7%a0%d7%94/">תוכנה</a> Tagged: <a href="http://idkn.wordpress.com/tag/freeswitch/">freeswitch</a>, <a href="http://idkn.wordpress.com/tag/hardware-hacking/">hardware hacking</a>, <a href="http://idkn.wordpress.com/tag/kamailio/">kamailio</a>, <a href="http://idkn.wordpress.com/tag/openwrt/">openwrt</a>, <a href="http://idkn.wordpress.com/tag/tr-069/">tr-069</a>, <a href="http://idkn.wordpress.com/tag/wdr4300/">wdr4300</a>, <a href="http://idkn.wordpress.com/tag/wrt/">wrt</a>, <a href="http://idkn.wordpress.com/tag/%d7%9c%d7%99%d7%a0%d7%95%d7%a7%d7%a1/">לינוקס</a>, <a href="http://idkn.wordpress.com/tag/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/">קוד פתוח</a>, <a href="http://idkn.wordpress.com/tag/%d7%a8%d7%a9%d7%aa%d7%95%d7%aa/">רשתות</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/idkn.wordpress.com/7265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/idkn.wordpress.com/7265/" /></a> <img alt="" border="0" src="http://pixel.wp.com/b.gif?host=idkn.wordpress.com&#038;blog=3104636&#038;post=7265&#038;subd=idkn&#038;ref=&#038;feed=1" width="1" height="1" /></content>
|
||||
<author>
|
||||
<name>ik_5</name>
|
||||
<uri>http://idkn.wordpress.com</uri>
|
||||
</author>
|
||||
<source>
|
||||
<title type="html">לראות שונה » קוד פתוח</title>
|
||||
<subtitle type="html">מבט שונה בעיקר על (פיתוח) תוכנה, עסקים והקוד הפתוח</subtitle>
|
||||
<link rel="self" href="http://idkn.wordpress.com/category/%d7%a7%d7%95%d7%93-%d7%a4%d7%aa%d7%95%d7%97/feed/atom/"/>
|
||||
<id>http://idkn.wordpress.com/feed/atom/</id>
|
||||
<updated>2014-12-22T02:31:34+00:00</updated>
|
||||
</source>
|
||||
</entry>
|
||||
|
||||
</feed>
|
@ -1,946 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcastRF="http://radiofrance.fr/Lancelot/Podcast#" version="2.0" >
|
||||
<channel>
|
||||
<title>Label pop</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>Chaque semaine, une oreille attentive à l'actualité, pour restituer l'éclatante vitalité de la pop moderne, entendue au sens le plus large</description>
|
||||
<language>fr</language>
|
||||
<copyright>Radio France</copyright>
|
||||
<lastBuildDate>Tue, 01 Jul 2014 09:36:20 +0200</lastBuildDate>
|
||||
<generator>Radio France</generator>
|
||||
<image>
|
||||
<url>http://media.radiofrance-podcast.net/podcast09/RF_OMM_0000006330_ITE.jpg</url>
|
||||
<title>Label pop</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
</image>
|
||||
<itunes:author>Radio France</itunes:author>
|
||||
<itunes:category text="Music"></itunes:category>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:image href="http://media.radiofrance-podcast.net/podcast09/RF_OMM_0000006330_ITE.jpg" />
|
||||
<itunes:owner>
|
||||
<itunes:email>podcast@radiofrance.com</itunes:email>
|
||||
<itunes:name>Radio France</itunes:name>
|
||||
</itunes:owner>
|
||||
<itunes:subtitle>Label pop</itunes:subtitle>
|
||||
<itunes:summary>Chaque semaine, une oreille attentive à l'actualité, pour restituer l'éclatante vitalité de la pop moderne, entendue au sens le plus large</itunes:summary>
|
||||
<podcastRF:originStation>1003</podcastRF:originStation>
|
||||
<item>
|
||||
<title>Label Pop 30.06.2014</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:19 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/909894762012614656/12668-30.06.2014-ITEMA_20648497-0.mp3" length="85370880" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-30.06.2014-ITEMA_20648497-0.mp3</guid>
|
||||
<pubDate>Mon, 30 Jun 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,30.06.2014</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 30.06.2014</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:19 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:19</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 23.06.2014</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:06 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/907297871903072256/12668-23.06.2014-ITEMA_20645272-0.mp3" length="85159936" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-23.06.2014-ITEMA_20645272-0.mp3</guid>
|
||||
<pubDate>Mon, 23 Jun 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,23.06.2014</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 23.06.2014</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:06 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:06</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Roddy Frame en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:27:57 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/904726345244745728/12668-16.06.2014-ITEMA_20641965-0.mp3" length="85016576" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-16.06.2014-ITEMA_20641965-0.mp3</guid>
|
||||
<pubDate>Mon, 16 Jun 2014 11:18:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Roddy,Frame,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Roddy Frame en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:57 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:27:57</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Kishi Bashi en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:04 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/902102704141115392/12668-09.06.2014-ITEMA_20638856-0.mp3" length="85129216" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-09.06.2014-ITEMA_20638856-0.mp3</guid>
|
||||
<pubDate>Mon, 09 Jun 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Kishi,Bashi,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Kishi Bashi en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:04 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:04</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Yann Tiersen en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:01 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/899355619218169856/12668-02.06.2014-ITEMA_20635731-0.mp3" length="85080064" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-02.06.2014-ITEMA_20635731-0.mp3</guid>
|
||||
<pubDate>Mon, 02 Jun 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Yann,Tiersen,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Yann Tiersen en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:01 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:01</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Josephine Foster et Courtney Barnett en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:27:57 - Label pop - par : Vincent Théval - réalisé par : Gilles Blanchard</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/896911663133892608/12668-26.05.2014-ITEMA_20632688-0.mp3" length="85014528" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-26.05.2014-ITEMA_20632688-0.mp3</guid>
|
||||
<pubDate>Mon, 26 May 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Josephine,Foster,et,Courtney,Barnett,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Josephine Foster et Courtney Barnett en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:57 - par : Vincent Théval - réalisé par : Gilles Blanchard</itunes:summary>
|
||||
<itunes:duration>01:27:57</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Henk Hofstede (The Nits) en interview</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:07 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/894229604267466752/12668-19.05.2014-ITEMA_20629566-0.mp3" length="86922208" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-19.05.2014-ITEMA_20629566-0.mp3</guid>
|
||||
<pubDate>Mon, 19 May 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Henk,Hofstede,(The,Nits),en,interview</itunes:keywords>
|
||||
<itunes:subtitle>Henk Hofstede (The Nits) en interview</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:07 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:07</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Hospital Ships en session acoustique</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:21 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/891720408540127232/12668-12.05.2014-ITEMA_20626515-0.mp3" length="87151584" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-12.05.2014-ITEMA_20626515-0.mp3</guid>
|
||||
<pubDate>Mon, 12 May 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Hospital,Ships,en,session,acoustique</itunes:keywords>
|
||||
<itunes:subtitle>Hospital Ships en session acoustique</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:21 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:21</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Etienne Daho en interview</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:26 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/889118812815761408/12668-05.05.2014-ITEMA_20623484-0.mp3" length="87233504" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-05.05.2014-ITEMA_20623484-0.mp3</guid>
|
||||
<pubDate>Mon, 05 May 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Etienne,Daho,en,interview</itunes:keywords>
|
||||
<itunes:subtitle>Etienne Daho en interview</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:26 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:26</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Pierre-Étienne Minonzio pour "Petit manuel musical du football" (Le Mot et le Reste)</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:20 - Label pop - par : Vincent Théval - réalisé par : Gabriel Fadavi</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/886521227345141760/12668-28.04.2014-ITEMA_20620459-0.mp3" length="87135200" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-28.04.2014-ITEMA_20620459-0.mp3</guid>
|
||||
<pubDate>Mon, 28 Apr 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Pierre-Étienne,Minonzio,pour,"Petit,manuel,musical,du,football",(Le,Mot,et,le,Reste)</itunes:keywords>
|
||||
<itunes:subtitle>Pierre-Étienne Minonzio pour "Petit manuel musical du football" (Le Mot et le Reste)</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:20 - par : Vincent Théval - réalisé par : Gabriel Fadavi</itunes:summary>
|
||||
<itunes:duration>01:28:20</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Chris Garneau en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:05 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/883919507762978816/12668-21.04.2014-ITEMA_20617449-0.mp3" length="86889440" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-21.04.2014-ITEMA_20617449-0.mp3</guid>
|
||||
<pubDate>Mon, 21 Apr 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Chris,Garneau,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Chris Garneau en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:05 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:05</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Thierry Dupin et Emile Omar pour la compilation "69 : année mélodique"</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:04 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/881242200548057088/12668-14.04.2014-ITEMA_20614414-0.mp3" length="86873056" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-14.04.2014-ITEMA_20614414-0.mp3</guid>
|
||||
<pubDate>Mon, 14 Apr 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Thierry,Dupin,et,Emile,Omar,pour,la,compilation,"69,:,année,mélodique"</itunes:keywords>
|
||||
<itunes:subtitle>Thierry Dupin et Emile Omar pour la compilation "69 : année mélodique"</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:04 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:04</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Philippe Dumez, blogueur, auteur, éditeur</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:06 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/878644611302559744/12668-07.04.2014-ITEMA_20611353-0.mp3" length="86905824" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-07.04.2014-ITEMA_20611353-0.mp3</guid>
|
||||
<pubDate>Mon, 07 Apr 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Philippe,Dumez,,blogueur,,auteur,,éditeur</itunes:keywords>
|
||||
<itunes:subtitle>Philippe Dumez, blogueur, auteur, éditeur</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:06 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:06</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Howe Gelb en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:09 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/876127057573056513/12668-31.03.2014-ITEMA_20608312-0.mp3" length="86954976" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-31.03.2014-ITEMA_20608312-0.mp3</guid>
|
||||
<pubDate>Mon, 31 Mar 2014 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Howe,Gelb,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Howe Gelb en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:09 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:09</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Maxime Chamoux : (Please) Don't Blame Mexico, work in progress part. 3</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:19 - Label pop - par : Vincent Théval - réalisé par : Patrick Lérisset</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/873464199768973312/12668-24.03.2014-ITEMA_20605284-0.mp3" length="87118816" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-24.03.2014-ITEMA_20605284-0.mp3</guid>
|
||||
<pubDate>Mon, 24 Mar 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Maxime,Chamoux,:,(Please),Don't,Blame,Mexico,,work,in,progress,part.,3</itunes:keywords>
|
||||
<itunes:subtitle>Maxime Chamoux : (Please) Don't Blame Mexico, work in progress part. 3</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:19 - par : Vincent Théval - réalisé par : Patrick Lérisset</itunes:summary>
|
||||
<itunes:duration>01:28:19</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>François and the Atlas Moutains</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:22 - Label pop - par : Vincent Théval - François, chant, guitare, clavier Petit Fantome, clavier, choeur Amaury, basse, percussions, choeur Jean, batterie Gerard, clavier, choeur - réalisé par : Patrick Lérisset</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/870867195511447552/12668-17.03.2014-ITEMA_20602213-0.mp3" length="87167968" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-17.03.2014-ITEMA_20602213-0.mp3</guid>
|
||||
<pubDate>Mon, 17 Mar 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>François,and,the,Atlas,Moutains</itunes:keywords>
|
||||
<itunes:subtitle>François and the Atlas Moutains</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:22 - par : Vincent Théval - François, chant, guitare, clavier Petit Fantome, clavier, choeur Amaury, basse, percussions, choeur Jean, batterie Gerard, clavier, choeur - réalisé par : Patrick Lérisset</itunes:summary>
|
||||
<itunes:duration>01:28:22</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Michka Assayas pour Le Nouveau Dictionnaire du Rock</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:19 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/868349821855997952/12668-10.03.2014-ITEMA_20599189-0.mp3" length="87118816" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-10.03.2014-ITEMA_20599189-0.mp3</guid>
|
||||
<pubDate>Mon, 10 Mar 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Michka,Assayas,pour,Le,Nouveau,Dictionnaire,du,Rock</itunes:keywords>
|
||||
<itunes:subtitle>Michka Assayas pour Le Nouveau Dictionnaire du Rock</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:19 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:19</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Dominique A pour "Tomber sous le charme" (Le Mot et le Reste)</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:11 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/865755919974146048/12668-03.03.2014-ITEMA_20596136-0.mp3" length="86987744" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-03.03.2014-ITEMA_20596136-0.mp3</guid>
|
||||
<pubDate>Mon, 03 Mar 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Dominique,A,pour,"Tomber,sous,le,charme",(Le,Mot,et,le,Reste)</itunes:keywords>
|
||||
<itunes:subtitle>Dominique A pour "Tomber sous le charme" (Le Mot et le Reste)</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:11 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:11</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Wild Beasts en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:19 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/863157660629868544/12668-24.02.2014-ITEMA_20592949-0.mp3" length="87118816" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-24.02.2014-ITEMA_20592949-0.mp3</guid>
|
||||
<pubDate>Mon, 24 Feb 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Wild,Beasts,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Wild Beasts en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:19 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:19</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Jedediah Sklower et Catherine Guesde (Revue Volume!)</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:13 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/860560685396926464/12668-17.02.2014-ITEMA_20589887-0.mp3" length="87020512" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-17.02.2014-ITEMA_20589887-0.mp3</guid>
|
||||
<pubDate>Mon, 17 Feb 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Jedediah,Sklower,et,Catherine,Guesde,(Revue,Volume!)</itunes:keywords>
|
||||
<itunes:subtitle>Jedediah Sklower et Catherine Guesde (Revue Volume!)</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:13 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:13</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Bill Callahan en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:14 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/857879020245622784/12668-10.02.2014-ITEMA_20586797-0.mp3" length="87036896" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-10.02.2014-ITEMA_20586797-0.mp3</guid>
|
||||
<pubDate>Mon, 10 Feb 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Bill,Callahan,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Bill Callahan en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:14 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:14</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Hommage à Pete Seeger</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop/2013-2014/hommage-pete-seeger-02-03-2014-14-46</link>
|
||||
<description>durée : 00:15:20 - Label pop - par : Vincent Théval -
|
||||
|
||||
|
||||
|
||||
Hommage à Pete Seeger
|
||||
|
||||
Figure essentielle de l’histoire du folk américain, Pete Seeger, disparu le 27 janvier dernier à l’âge de 94 ans, laisse un héritage considérable. Label Pop lui rend hommage.
|
||||
(En raison de la diffusion de la cérémonie des Victoires de la musique classique, Label Pop débutera exceptionnellement vers 23h30).
|
||||
|
||||
|
||||
|
||||
- réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/855364085024301056/12668-03.02.2014-ITEMA_20583717-0.mp3" length="15373280" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-03.02.2014-ITEMA_20583717-0.mp3</guid>
|
||||
<pubDate>Mon, 03 Feb 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Hommage,à,Pete,Seeger</itunes:keywords>
|
||||
<itunes:subtitle>Hommage à Pete Seeger</itunes:subtitle>
|
||||
<itunes:summary>durée : 00:15:20 - par : Vincent Théval -
|
||||
|
||||
|
||||
|
||||
Hommage à Pete Seeger
|
||||
|
||||
Figure essentielle de l’histoire du folk américain, Pete Seeger, disparu le 27 janvier dernier à l’âge de 94 ans, laisse un héritage considérable. Label Pop lui rend hommage.
|
||||
(En raison de la diffusion de la cérémonie des Victoires de la musique classique, Label Pop débutera exceptionnellement vers 23h30).
|
||||
|
||||
|
||||
|
||||
- réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>00:15:20</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Florent Marchet en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:10 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/852763696483536896/12668-27.01.2014-ITEMA_20580596-0.mp3" length="86971360" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-27.01.2014-ITEMA_20580596-0.mp3</guid>
|
||||
<pubDate>Mon, 27 Jan 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Florent,Marchet,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Florent Marchet en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:10 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:10</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Damien Jurado en session</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:31 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/850085549199855616/12668-20.01.2014-ITEMA_20577388-0.mp3" length="87315424" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-20.01.2014-ITEMA_20577388-0.mp3</guid>
|
||||
<pubDate>Mon, 20 Jan 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Damien,Jurado,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Damien Jurado en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:31 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:31</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 13.01.2014</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:27:54 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/847577688381067264/12668-13.01.2014-ITEMA_20574308-0.mp3" length="86709216" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-13.01.2014-ITEMA_20574308-0.mp3</guid>
|
||||
<pubDate>Mon, 13 Jan 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,13.01.2014</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 13.01.2014</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:54 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:27:54</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Pacôme Thiellement</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:19 - Label pop - par : Vincent Théval - Pacôme Thiellement pour &quot;Pop Yoga&quot; (Éditions Sonatine) - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/844968105405845504/12668-06.01.2014-ITEMA_20571200-0.mp3" length="87118816" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-06.01.2014-ITEMA_20571200-0.mp3</guid>
|
||||
<pubDate>Mon, 06 Jan 2014 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Pacôme,Thiellement</itunes:keywords>
|
||||
<itunes:subtitle>Pacôme Thiellement</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:19 - par : Vincent Théval - Pacôme Thiellement pour &quot;Pop Yoga&quot; (Éditions Sonatine) - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:19</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Ceci n'est pas un best of (2/2)</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:27:38 - Label pop - par : Vincent Théval - réalisé par : Souad Boukhorssa</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/842373358887636992/12668-30.12.2013-ITEMA_20568302-0.mp3" length="86447072" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-30.12.2013-ITEMA_20568302-0.mp3</guid>
|
||||
<pubDate>Mon, 30 Dec 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Ceci,n'est,pas,un,best,of,(2/2)</itunes:keywords>
|
||||
<itunes:subtitle>Ceci n'est pas un best of (2/2)</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:38 - par : Vincent Théval - réalisé par : Souad Boukhorssa</itunes:summary>
|
||||
<itunes:duration>01:27:38</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Ceci n'est pas un best of (1/2)</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:27:55 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/839626373692657664/12668-23.12.2013-ITEMA_20565398-0.mp3" length="86725600" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-23.12.2013-ITEMA_20565398-0.mp3</guid>
|
||||
<pubDate>Mon, 23 Dec 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Ceci,n'est,pas,un,best,of,(1/2)</itunes:keywords>
|
||||
<itunes:subtitle>Ceci n'est pas un best of (1/2)</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:55 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:27:55</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Vincent Delerm, pour "Les Amants Parallèles"</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:08 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/837096815131103232/12668-16.12.2013-ITEMA_20562363-0.mp3" length="86938592" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-16.12.2013-ITEMA_20562363-0.mp3</guid>
|
||||
<pubDate>Mon, 16 Dec 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Vincent,Delerm,,pour,"Les,Amants,Parallèles"</itunes:keywords>
|
||||
<itunes:subtitle>Vincent Delerm, pour "Les Amants Parallèles"</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:08 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:08</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Catherine Viale pour le livre "It's not only rock'n'roll"</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:13 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/834589109853884416/12668-09.12.2013-ITEMA_20559449-0.mp3" length="87020512" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-09.12.2013-ITEMA_20559449-0.mp3</guid>
|
||||
<pubDate>Mon, 09 Dec 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Catherine,Viale,pour,le,livre,"It's,not,only,rock'n'roll"</itunes:keywords>
|
||||
<itunes:subtitle>Catherine Viale pour le livre "It's not only rock'n'roll"</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:13 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:13</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Régine Chassagne (Arcade Fire)</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:03 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/831987728328429568/12668-02.12.2013-ITEMA_20556447-0.mp3" length="86856672" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-02.12.2013-ITEMA_20556447-0.mp3</guid>
|
||||
<pubDate>Mon, 02 Dec 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Régine,Chassagne,(Arcade,Fire)</itunes:keywords>
|
||||
<itunes:subtitle>Régine Chassagne (Arcade Fire)</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:03 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:03</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Silvain Vanot, pour évoquer Bob Dylan et le coffret "Complete Album Collection"</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:17 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131125&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-25.11.2013-ITEMA_20553483-0.mp3" length="87086048" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-25.11.2013-ITEMA_20553483-0.mp3</guid>
|
||||
<pubDate>Mon, 25 Nov 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Silvain,Vanot,,pour,évoquer,Bob,Dylan,et,le,coffret,"Complete,Album,Collection"</itunes:keywords>
|
||||
<itunes:subtitle>Silvain Vanot, pour évoquer Bob Dylan et le coffret "Complete Album Collection"</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:17 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:17</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Mathieu Macheret (Cahiers du Cinéma) pour évoquer "Inside Lewyn Davis", des frères Coen.</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:13 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131118&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-18.11.2013-ITEMA_20550581-0.mp3" length="87020512" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-18.11.2013-ITEMA_20550581-0.mp3</guid>
|
||||
<pubDate>Mon, 18 Nov 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Mathieu,Macheret,(Cahiers,du,Cinéma),pour,évoquer,"Inside,Lewyn,Davis",,des,frères,Coen.</itunes:keywords>
|
||||
<itunes:subtitle>Mathieu Macheret (Cahiers du Cinéma) pour évoquer "Inside Lewyn Davis", des frères Coen.</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:13 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:13</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>David Sanson, commissaire associé de l¿exposition Europunk</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:38 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131111&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-11.11.2013-ITEMA_20547716-0.mp3" length="87430112" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-11.11.2013-ITEMA_20547716-0.mp3</guid>
|
||||
<pubDate>Mon, 11 Nov 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>David,Sanson,,commissaire,associé,de,l¿exposition,Europunk</itunes:keywords>
|
||||
<itunes:subtitle>David Sanson, commissaire associé de l¿exposition Europunk</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:38 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:38</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop : session live avec San Fermin - Invité : J-D. Beauvallet</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop/2013-2014/label-pop-session-live-avec-san-fermin-invite-j-d-beauvallet-11-04-2013-00-00</link>
|
||||
<description>durée : 01:28:21 - Label pop - par : Vincent Théval - A quelques jours de la sortie européenne de leur incroyable premier album, les américains San Fermin sont en session exceptionnelle pour Label Pop. Jean-Daniel Beauvallet, rédacteur en chef des Inrockuptibles, vient quant à lui évoquer l'autobiographie de Morrissey, récemment parue en Angleterre, ainsi que la 26ème édition du Festival des Inrocks. - réalisé par : Bruno Riou-Maillard</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131104&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-04.11.2013-ITEMA_20544844-0.mp3" length="87151584" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-04.11.2013-ITEMA_20544844-0.mp3</guid>
|
||||
<pubDate>Mon, 04 Nov 2013 22:00:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,:,session,live,avec,San,Fermin,-,Invité,:,J-D.,Beauvallet</itunes:keywords>
|
||||
<itunes:subtitle>San Fermin en session</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:21 - par : Vincent Théval - A quelques jours de la sortie européenne de leur incroyable premier album, les américains San Fermin sont en session exceptionnelle pour Label Pop. Jean-Daniel Beauvallet, rédacteur en chef des Inrockuptibles, vient quant à lui évoquer l'autobiographie de Morrissey, récemment parue en Angleterre, ainsi que la 26ème édition du Festival des Inrocks. - réalisé par : Bruno Riou-Maillard</itunes:summary>
|
||||
<itunes:duration>01:28:21</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Bertrand Belin</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:10 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131028&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-28.10.2013-ITEMA_20542016-0.mp3" length="86971360" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-28.10.2013-ITEMA_20542016-0.mp3</guid>
|
||||
<pubDate>Mon, 28 Oct 2013 23:59:00 +0100</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Bertrand,Belin</itunes:keywords>
|
||||
<itunes:subtitle>Bertrand Belin</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:10 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:10</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Howard Hugues, chanteur du groupe Coming Soon</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:04 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131021&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-21.10.2013-ITEMA_20539182-0.mp3" length="86873056" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-21.10.2013-ITEMA_20539182-0.mp3</guid>
|
||||
<pubDate>Mon, 21 Oct 2013 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Howard,Hugues,,chanteur,du,groupe,Coming,Soon</itunes:keywords>
|
||||
<itunes:subtitle>Howard Hugues, chanteur du groupe Coming Soon</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:04 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:04</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 14.10.2013</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:04 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131014&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-14.10.2013-ITEMA_20536359-0.mp3" length="86873056" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-14.10.2013-ITEMA_20536359-0.mp3</guid>
|
||||
<pubDate>Mon, 14 Oct 2013 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,14.10.2013</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 14.10.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:04 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:04</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Session acoustique de "Of Montreal"</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:05 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20131007&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-07.10.2013-ITEMA_20533584-0.mp3" length="86889440" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-07.10.2013-ITEMA_20533584-0.mp3</guid>
|
||||
<pubDate>Mon, 07 Oct 2013 23:59:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Session,acoustique,de,"Of,Montreal"</itunes:keywords>
|
||||
<itunes:subtitle>Session acoustique de "Of Montreal"</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:05 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:05</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 30.09.2013</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:26 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130930&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-30.09.2013-ITEMA_20530703-0.mp3" length="87233504" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-30.09.2013-ITEMA_20530703-0.mp3</guid>
|
||||
<pubDate>Mon, 30 Sep 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,30.09.2013</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 30.09.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:26 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:26</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 23.09.2013</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:09 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130923&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-23.09.2013-ITEMA_20526781-0.mp3" length="86954976" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-23.09.2013-ITEMA_20526781-0.mp3</guid>
|
||||
<pubDate>Mon, 23 Sep 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,23.09.2013</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 23.09.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:09 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:09</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Luke Temple, chanteur américain</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:11 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130916&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-16.09.2013-ITEMA_20523914-0.mp3" length="86987744" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-16.09.2013-ITEMA_20523914-0.mp3</guid>
|
||||
<pubDate>Mon, 16 Sep 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Luke,Temple,,chanteur,américain</itunes:keywords>
|
||||
<itunes:subtitle>Luke Temple, chanteur américain</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:11 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:11</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 09.09.2013</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:27:58 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130909&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-09.09.2013-ITEMA_20520636-0.mp3" length="86774752" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-09.09.2013-ITEMA_20520636-0.mp3</guid>
|
||||
<pubDate>Mon, 09 Sep 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,09.09.2013</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 09.09.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:58 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:27:58</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 02.09.2013</title>
|
||||
<link>http://www.francemusique.fr/emission/label-pop</link>
|
||||
<description>durée : 01:28:28 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130902&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-02.09.2013-ITEMA_20517162-0.mp3" length="87266272" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-02.09.2013-ITEMA_20517162-0.mp3</guid>
|
||||
<pubDate>Mon, 02 Sep 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,02.09.2013</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 02.09.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:28 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:28</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Label Pop 01.07.2013</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/emission.php?e_id=105000065</link>
|
||||
<description>durée : 01:28:07 - Label pop - par : Vincent Théval - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130701&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-01.07.2013-ITEMA_20497632-0.mp3" length="86922208" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-01.07.2013-ITEMA_20497632-0.mp3</guid>
|
||||
<pubDate>Mon, 01 Jul 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Label,Pop,01.07.2013</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 01.07.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:07 - par : Vincent Théval - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:07</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Alexandre Breton, programmateur du City Sounds Festival</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515009331</link>
|
||||
<description>durée : 01:28:00 - Label pop - par : Vincent Théval - Invité : Alexandre Breton, programmateur du City Sounds Festival (19 et 20 juillet au 104, à Paris)
|
||||
|
||||
&amp;quot; Le Festival CITY SOUNDS inaugure sa première édition par un véritable événement: accueillir pendant deux jours, les 19 &amp;amp; 20 juillet au Centquatre (Paris, 19ème), le meilleur de la scène rock indépendante de San Francisco, la Cité aux brumes légendaires! Célébration débridée, déluge sonore, riffs sous amphétamines, fuzz &amp;amp; Larsens en pagaille: le rock'n'roll héritier des psychédéliques sixties est à l'honneur de ce festival pionnier et audacieux.&amp;quot;
|
||||
|
||||
Réédition de la semaine : Nick Drake &amp;quot;Bryter Layter&amp;quot; (1970) - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130624&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-24.06.2013-ITEMA_20494262-0.mp3" length="86807520" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-24.06.2013-ITEMA_20494262-0.mp3</guid>
|
||||
<pubDate>Mon, 24 Jun 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Alexandre,Breton,,programmateur,du,City,Sounds,Festival</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 24.06.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:00 - par : Vincent Théval - Invité : Alexandre Breton, programmateur du City Sounds Festival (19 et 20 juillet au 104, à Paris)
|
||||
|
||||
&amp;quot; Le Festival CITY SOUNDS inaugure sa première édition par un véritable événement: accueillir pendant deux jours, les 19 &amp;amp; 20 juillet au Centquatre (Paris, 19ème), le meilleur de la scène rock indépendante de San Francisco, la Cité aux brumes légendaires! Célébration débridée, déluge sonore, riffs sous amphétamines, fuzz &amp;amp; Larsens en pagaille: le rock'n'roll héritier des psychédéliques sixties est à l'honneur de ce festival pionnier et audacieux.&amp;quot;
|
||||
|
||||
Réédition de la semaine : Nick Drake &amp;quot;Bryter Layter&amp;quot; (1970) - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:00</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Tunng en session</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515009220</link>
|
||||
<description>durée : 01:27:58 - Label pop - par : Vincent Théval - Tunng en session live
|
||||
- 6 titres acoustiques enregistrés le 2 mai 2013 au studio 105
|
||||
|
||||
Invité : Nicolas Chapelle (Noise Mag, Les Inrockuptibles) pour évoquer la réédition de la semaine : Scott Walker &amp;quot;Scott – The Collection 1967-1970&amp;quot; - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130617&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-17.06.2013-ITEMA_20491729-0.mp3" length="86774752" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-17.06.2013-ITEMA_20491729-0.mp3</guid>
|
||||
<pubDate>Mon, 17 Jun 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Tunng,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 17.06.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:27:58 - par : Vincent Théval - Tunng en session live
|
||||
- 6 titres acoustiques enregistrés le 2 mai 2013 au studio 105
|
||||
|
||||
Invité : Nicolas Chapelle (Noise Mag, Les Inrockuptibles) pour évoquer la réédition de la semaine : Scott Walker &amp;quot;Scott – The Collection 1967-1970&amp;quot; - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:27:58</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Keaton Henson en session</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515009117</link>
|
||||
<description>durée : 01:28:30 - Label pop - par : Vincent Théval - Keaton Henson en session
|
||||
|
||||
Invité : Maxime Chamoux pour la suite de la série &amp;quot;work in progress&amp;quot; sur l'élaboration du prochain album de (Please) Don't Blame Mexico.
|
||||
|
||||
Réédition de la semaine : Paul McCartney &amp;amp; Wings &amp;quot;Wings Over America&amp;quot; (1976) - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130610&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-10.06.2013-ITEMA_20489313-0.mp3" length="87299040" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-10.06.2013-ITEMA_20489313-0.mp3</guid>
|
||||
<pubDate>Mon, 10 Jun 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Keaton,Henson,en,session</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 10.06.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:30 - par : Vincent Théval - Keaton Henson en session
|
||||
|
||||
Invité : Maxime Chamoux pour la suite de la série &amp;quot;work in progress&amp;quot; sur l'élaboration du prochain album de (Please) Don't Blame Mexico.
|
||||
|
||||
Réédition de la semaine : Paul McCartney &amp;amp; Wings &amp;quot;Wings Over America&amp;quot; (1976) - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:30</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Christophe Geudin et Olivier Nuc (revue MUZIQ)</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515008969</link>
|
||||
<description>durée : 01:28:04 - Label pop - par : Vincent Théval - Les invités de la semaine
|
||||
|
||||
Christophe Geudin (rédacteur en chef de Muziq) et Olivier Nuc (responsable de la rubrique &amp;quot;Musiques actuelles&amp;quot; au Figaro) viennent présenter le premier numéro du bookzine Muziq. En couverture : Neil Young, en tournée en France en juin et en juillet.
|
||||
|
||||
|
||||
Réédition de la semaine : Ane Brun &amp;quot;Songs, 2003-2013&amp;quot; - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130603&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-03.06.2013-ITEMA_20486929-0.mp3" length="86873056" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-03.06.2013-ITEMA_20486929-0.mp3</guid>
|
||||
<pubDate>Mon, 03 Jun 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Christophe,Geudin,et,Olivier,Nuc,(revue,MUZIQ)</itunes:keywords>
|
||||
<itunes:subtitle>Label Pop 03/06/13</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:04 - par : Vincent Théval - Les invités de la semaine
|
||||
|
||||
Christophe Geudin (rédacteur en chef de Muziq) et Olivier Nuc (responsable de la rubrique &amp;quot;Musiques actuelles&amp;quot; au Figaro) viennent présenter le premier numéro du bookzine Muziq. En couverture : Neil Young, en tournée en France en juin et en juillet.
|
||||
|
||||
|
||||
Réédition de la semaine : Ane Brun &amp;quot;Songs, 2003-2013&amp;quot; - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:04</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>House Of Wolves en session</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515008862</link>
|
||||
<description>durée : 01:28:18 - Label pop - par : Vincent Théval - Spéciale Los Angeles
|
||||
|
||||
- Entretien avec Eleonore Klar, rédactrice en chef du magazine I Heart
|
||||
|
||||
- Réédition de la semaine : The Byrds &amp;quot;There Is A Season&amp;quot;
|
||||
|
||||
- Session acoustique de House Of Wolves
|
||||
|
||||
&amp;quot;Trois ans après leur enregistrement à Portland (Oregon), les chansons du Californien Rey Villalobos sortent aujourd'hui du cercle des initiés, à la faveur de l'édition européenne du premier album de House Of Wolves. Saisissant coup d'essai, Fold In The Wind décline onze mélodies poignantes et délicates, portées par une voix unique, réminiscence androgyne d'Elliott Smith. L'une des révélations de l'année.&amp;quot;
|
||||
|
||||
Vincent Théval
|
||||
|
||||
- réalisé par : Sylvain Richard</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130527&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-27.05.2013-ITEMA_20484547-0.mp3" length="87102432" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-27.05.2013-ITEMA_20484547-0.mp3</guid>
|
||||
<pubDate>Mon, 27 May 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>House,Of,Wolves,en,session</itunes:keywords>
|
||||
<itunes:subtitle>House of Wolves</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:18 - par : Vincent Théval - Spéciale Los Angeles
|
||||
|
||||
- Entretien avec Eleonore Klar, rédactrice en chef du magazine I Heart
|
||||
|
||||
- Réédition de la semaine : The Byrds &amp;quot;There Is A Season&amp;quot;
|
||||
|
||||
- Session acoustique de House Of Wolves
|
||||
|
||||
&amp;quot;Trois ans après leur enregistrement à Portland (Oregon), les chansons du Californien Rey Villalobos sortent aujourd'hui du cercle des initiés, à la faveur de l'édition européenne du premier album de House Of Wolves. Saisissant coup d'essai, Fold In The Wind décline onze mélodies poignantes et délicates, portées par une voix unique, réminiscence androgyne d'Elliott Smith. L'une des révélations de l'année.&amp;quot;
|
||||
|
||||
Vincent Théval
|
||||
|
||||
- réalisé par : Sylvain Richard</itunes:summary>
|
||||
<itunes:duration>01:28:18</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Le duo Rhume en interview</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515008638</link>
|
||||
<description>durée : 01:28:11 - Label pop - par : Vincent Théval - Le duo RHUME (Maxime Saint-Jean et Laurent Dussarte) mélange hip-hop et arrangements pop. Sur leur premier album, ils déclinent des textes incisifs et drôles sur des rythmiques heurtées, des guitares, des machines et des claviers. Vincent Théval les a rencontrés lors de leur récent passage parisien.
|
||||
|
||||
Et aussi : en exclusivité pour Label Pop ce soir, 2 titres de Pain-Noir, le nouveau projet de François-Régis Croisier (St. Augustine)
|
||||
|
||||
Réédition de la semaine : 'Last Splash' des Breeders - réalisé par : Sylvie Migault</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130520&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-20.05.2013-ITEMA_20482177-0.mp3" length="86987744" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-20.05.2013-ITEMA_20482177-0.mp3</guid>
|
||||
<pubDate>Mon, 20 May 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Le,duo,Rhume,en,interview</itunes:keywords>
|
||||
<itunes:subtitle>Émission du 20.05.2013</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:11 - par : Vincent Théval - Le duo RHUME (Maxime Saint-Jean et Laurent Dussarte) mélange hip-hop et arrangements pop. Sur leur premier album, ils déclinent des textes incisifs et drôles sur des rythmiques heurtées, des guitares, des machines et des claviers. Vincent Théval les a rencontrés lors de leur récent passage parisien.
|
||||
|
||||
Et aussi : en exclusivité pour Label Pop ce soir, 2 titres de Pain-Noir, le nouveau projet de François-Régis Croisier (St. Augustine)
|
||||
|
||||
Réédition de la semaine : 'Last Splash' des Breeders - réalisé par : Sylvie Migault</itunes:summary>
|
||||
<itunes:duration>01:28:11</itunes:duration>
|
||||
</item>
|
||||
<item>
|
||||
<title>Stéphane Deschamps, journaliste aux Inrockuptibles</title>
|
||||
<link>http://sites.radiofrance.fr/francemusique/em/label-pop/index.php?e_id=105000065&d_id=515008530</link>
|
||||
<description>durée : 01:28:20 - Label pop - par : Vincent Théval - Journaliste aux Inrockptibles, Stéphane Deschamps vient évoquer le label argentin ZZK Records, dans le cadre de la journée Leonardo Garcia Alarcon sur France Musique. - réalisé par : Agnès Cathou</description>
|
||||
<author>podcast@radiofrance.com</author>
|
||||
<category >Music </category>
|
||||
<enclosure url="http://rf.proxycast.org/m/media/273073201418.mp3?c=musique&p=Label+pop_12668&l3=20130513&l4=&media_url=http%3A%2F%2Fmedia.radiofrance-podcast.net%2Fpodcast09%2F12668-13.05.2013-ITEMA_20479787-0.mp3" length="87135200" type="audio/mpeg" />
|
||||
<guid >http://media.radiofrance-podcast.net/podcast09/12668-13.05.2013-ITEMA_20479787-0.mp3</guid>
|
||||
<pubDate>Mon, 13 May 2013 00:00:00 +0200</pubDate>
|
||||
<podcastRF:businessReference>19555</podcastRF:businessReference><itunes:author>Vincent Théval</itunes:author>
|
||||
<itunes:explicit>no</itunes:explicit>
|
||||
<itunes:keywords>Stéphane,Deschamps,,journaliste,aux,Inrockuptibles</itunes:keywords>
|
||||
<itunes:subtitle>Label Pop</itunes:subtitle>
|
||||
<itunes:summary>durée : 01:28:20 - par : Vincent Théval - Journaliste aux Inrockptibles, Stéphane Deschamps vient évoquer le label argentin ZZK Records, dans le cadre de la journée Leonardo Garcia Alarcon sur France Musique. - réalisé par : Agnès Cathou</itunes:summary>
|
||||
<itunes:duration>01:28:20</itunes:duration>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
300
vendor/fguillot/picofeed/tests/fixtures/rss20.xml
vendored
300
vendor/fguillot/picofeed/tests/fixtures/rss20.xml
vendored
File diff suppressed because one or more lines are too long
69
vendor/fguillot/picofeed/tests/fixtures/rss_10.xml
vendored
Normal file
69
vendor/fguillot/picofeed/tests/fixtures/rss_10.xml
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/">
|
||||
|
||||
<channel>
|
||||
<title>
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</title>
|
||||
<description>Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</description>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
<dc:date>2015-06-05T00:05:00+03:00</dc:date>
|
||||
<dc:language>ru</dc:language>
|
||||
</channel>
|
||||
<image>
|
||||
<title>Википедия — свободная энциклопедия</title>
|
||||
<link>https://ru.wikipedia.org</link>
|
||||
<url>https://ru.wikipedia.org/static/images/project-logos/ruwiki.png</url>
|
||||
</image>
|
||||
<item>
|
||||
<dc:date>2015-06-05T00:02:00+03:00</dc:date>
|
||||
<dc:creator>Лев Николаевич Толсто́й</dc:creator>
|
||||
<dc:language>bg</dc:language>
|
||||
<title>
|
||||
Война и
|
||||
мир
|
||||
</title>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace
|
||||
</link>
|
||||
<description>В наброске предисловия к «Войне и миру» Толстой
|
||||
писал, что в 1856 г. начал писать повесть, «герой
|
||||
которой должен был быть декабрист, возвращающийся
|
||||
с семейством в Россию.</description>
|
||||
</item>
|
||||
<item>
|
||||
<feedburner:origLink>
|
||||
https://en.wikipedia.org/wiki/Crime_and_Punishment
|
||||
</feedburner:origLink>
|
||||
<content:encoded><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content:encoded>
|
||||
</item>
|
||||
</rdf:RDF>
|
51
vendor/fguillot/picofeed/tests/fixtures/rss_10_element_preference.xml
vendored
Normal file
51
vendor/fguillot/picofeed/tests/fixtures/rss_10_element_preference.xml
vendored
Normal file
@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/">
|
||||
|
||||
<channel>
|
||||
<title>
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</title>
|
||||
<description>Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</description>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
</channel>
|
||||
<item>
|
||||
<link>https://www.github.com/picofeed/link/pre</link>
|
||||
<feedburner:origLink>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace</feedburner:origLink>
|
||||
<link>https://www.github.com/picofeed/link/post</link>
|
||||
</item>
|
||||
<item>
|
||||
<description>description pre</description>
|
||||
<content:encoded><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content:encoded>
|
||||
<description>description post</description>
|
||||
</item>
|
||||
</rdf:RDF>
|
13
vendor/fguillot/picofeed/tests/fixtures/rss_10_empty_channel.xml
vendored
Normal file
13
vendor/fguillot/picofeed/tests/fixtures/rss_10_empty_channel.xml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/">
|
||||
|
||||
<channel/>
|
||||
</rdf:RDF>
|
10
vendor/fguillot/picofeed/tests/fixtures/rss_10_empty_feed.xml
vendored
Normal file
10
vendor/fguillot/picofeed/tests/fixtures/rss_10_empty_feed.xml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/"/>
|
5
vendor/fguillot/picofeed/tests/fixtures/rss_10_empty_item.xml
vendored
Normal file
5
vendor/fguillot/picofeed/tests/fixtures/rss_10_empty_item.xml
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
|
||||
<channel/>
|
||||
<item/>
|
||||
</rdf:RDF>
|
25
vendor/fguillot/picofeed/tests/fixtures/rss_10_extra.xml
vendored
Normal file
25
vendor/fguillot/picofeed/tests/fixtures/rss_10_extra.xml
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/">
|
||||
|
||||
<channel>
|
||||
<link>/wiki/Category:Russian-language_literature</link>
|
||||
</channel>
|
||||
<item>
|
||||
<link>
|
||||
/wiki/War_and_Peace
|
||||
</link>
|
||||
</item>
|
||||
<item>
|
||||
<feedburner:origLink>
|
||||
/wiki/Crime_and_Punishment
|
||||
</feedburner:origLink>
|
||||
</item>
|
||||
</rdf:RDF>
|
18
vendor/fguillot/picofeed/tests/fixtures/rss_10_fallback_on_invalid_feed_values.xml
vendored
Normal file
18
vendor/fguillot/picofeed/tests/fixtures/rss_10_fallback_on_invalid_feed_values.xml
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/">
|
||||
|
||||
<channel>
|
||||
<title>
|
||||
|
||||
</title>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
</channel>
|
||||
</rdf:RDF>
|
39
vendor/fguillot/picofeed/tests/fixtures/rss_10_fallback_on_invalid_item_values.xml
vendored
Normal file
39
vendor/fguillot/picofeed/tests/fixtures/rss_10_fallback_on_invalid_item_values.xml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns="http://purl.org/rss/1.0/">
|
||||
|
||||
<channel>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
</channel>
|
||||
<item>
|
||||
<feedburner:origLink>b67e7afb-80be-4b23-8c42-67b970e2baa7</feedburner:origLink>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace
|
||||
</link>
|
||||
</item>
|
||||
<item>
|
||||
<content:encoded><![CDATA[
|
||||
]]>
|
||||
</content:encoded>
|
||||
<description>Осенью 1865 года, потеряв все свои
|
||||
деньги в казино, не в состоянии оплатить долги кредиторам,
|
||||
и стараясь помочь семье своего брата Михаила, который умер в
|
||||
июле 1864 года, Достоевский планирует создание романа с
|
||||
центральным образом семьи Мармеладовых под названием «Пьяненькая».</description>
|
||||
</item>
|
||||
<item>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)
|
||||
</link>
|
||||
<title>
|
||||
|
||||
</title>
|
||||
</item>
|
||||
</rdf:RDF>
|
69
vendor/fguillot/picofeed/tests/fixtures/rss_10_no_default_namespace.xml
vendored
Normal file
69
vendor/fguillot/picofeed/tests/fixtures/rss_10_no_default_namespace.xml
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<title>
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</title>
|
||||
<description>Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</description>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
<dc:date>2015-06-05T00:05:00+03:00</dc:date>
|
||||
<dc:language>ru</dc:language>
|
||||
</channel>
|
||||
<image>
|
||||
<title>Википедия — свободная энциклопедия</title>
|
||||
<link>https://ru.wikipedia.org</link>
|
||||
<url>https://ru.wikipedia.org/static/images/project-logos/ruwiki.png</url>
|
||||
</image>
|
||||
<item>
|
||||
<dc:date>2015-06-05T00:02:00+03:00</dc:date>
|
||||
<dc:creator>Лев Николаевич Толсто́й</dc:creator>
|
||||
<title>
|
||||
Война и
|
||||
мир
|
||||
</title>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace
|
||||
</link>
|
||||
<description>В наброске предисловия к «Войне и миру» Толстой
|
||||
писал, что в 1856 г. начал писать повесть, «герой
|
||||
которой должен был быть декабрист, возвращающийся
|
||||
с семейством в Россию.</description>
|
||||
</item>
|
||||
<item>
|
||||
<content:encoded><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content:encoded>
|
||||
</item>
|
||||
<item>
|
||||
<feedburner:origLink>
|
||||
https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)
|
||||
</feedburner:origLink>
|
||||
</item>
|
||||
</rdf:RDF>
|
42
vendor/fguillot/picofeed/tests/fixtures/rss_10_prefixed.xml
vendored
Normal file
42
vendor/fguillot/picofeed/tests/fixtures/rss_10_prefixed.xml
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:admin="http://webns.net/mvcb/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"
|
||||
xmlns:rss="http://purl.org/rss/1.0/">
|
||||
|
||||
<rss:channel>
|
||||
<rss:title>
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</rss:title>
|
||||
<rss:description>Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</rss:description>
|
||||
<rss:link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</rss:link>
|
||||
<dc:date>2015-06-05T00:05:00+03:00</dc:date>
|
||||
<dc:language>ru</dc:language>
|
||||
</rss:channel>
|
||||
<rss:image>
|
||||
<rss:title>Википедия — свободная энциклопедия</rss:title>
|
||||
<rss:link>https://ru.wikipedia.org</rss:link>
|
||||
<rss:url>https://ru.wikipedia.org/static/images/project-logos/ruwiki.png</rss:url>
|
||||
</rss:image>
|
||||
<rss:item>
|
||||
<rss:title>
|
||||
Война и
|
||||
мир
|
||||
</rss:title>
|
||||
<rss:link>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace
|
||||
</rss:link>
|
||||
<rss:description>В наброске предисловия к «Войне и миру» Толстой
|
||||
писал, что в 1856 г. начал писать повесть, «герой
|
||||
которой должен был быть декабрист, возвращающийся
|
||||
с семейством в Россию.</rss:description>
|
||||
</rss:item>
|
||||
</rdf:RDF>
|
81
vendor/fguillot/picofeed/tests/fixtures/rss_20.xml
vendored
Normal file
81
vendor/fguillot/picofeed/tests/fixtures/rss_20.xml
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<title>
|
||||
литература на русском языке,
|
||||
либо написанная русскими авторами
|
||||
</title>
|
||||
<description>Зародилась во второй половине X века, однако до XIX века,
|
||||
когда начался её «золотой век», была практически неизвестна
|
||||
в мире.</description>
|
||||
<image>
|
||||
<url>https://ru.wikipedia.org/static/images/project-logos/ruwiki.png</url>
|
||||
<title>Википедия — свободная энциклопедия</title>
|
||||
<link>https://ru.wikipedia.org</link>
|
||||
</image>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
<pubDate>Fri, 05 Jun 2015 00:05:00 +0300</pubDate>
|
||||
<language>ru</language>
|
||||
<managingEditor>Вики педии - свободной энциклопедии</managingEditor>
|
||||
<item>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace
|
||||
</link>
|
||||
<dc:language>bg</dc:language>
|
||||
<title>
|
||||
Война и
|
||||
мир
|
||||
</title>
|
||||
<pubDate>Fri, 05 Jun 2015 00:02:00 +0300</pubDate>
|
||||
<author>Лев Николаевич Толсто́й</author>
|
||||
<description>В наброске предисловия к «Войне и миру» Толстой
|
||||
писал, что в 1856 г. начал писать повесть, «герой
|
||||
которой должен был быть декабрист, возвращающийся
|
||||
с семейством в Россию.</description>
|
||||
<enclosure url="https://upload.wikimedia.org/wikipedia/commons/4/41/War-and-peace_1873.gif" type="image/gif" length="10889"/>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://guid.wikipedia.org/wiki/Crime_and_Punishment</guid>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="
|
||||
https://en.wikipedia.org/wiki/Crime_and_Punishment
|
||||
"/>
|
||||
<content:encoded><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content:encoded>
|
||||
<enclosure url="https://www.github.com/picofeed/link/atomenclosure.png" type="image/png" length="10889"/>
|
||||
<feedburner:origEnclosureLink>https://upload.wikimedia.org/wikipedia/commons/7/7b/Crime_and_Punishment-1.png</feedburner:origEnclosureLink>
|
||||
</item>
|
||||
<item>
|
||||
<feedburner:origLink>
|
||||
https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)
|
||||
</feedburner:origLink>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://guid.wikipedia.org/wiki/A_Hero_of_Our_Time</guid>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
18
vendor/fguillot/picofeed/tests/fixtures/rss_20_dc.xml
vendored
Normal file
18
vendor/fguillot/picofeed/tests/fixtures/rss_20_dc.xml
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<dc:creator>Вики педии - свободной энциклопедии</dc:creator>
|
||||
<item>
|
||||
<dc:creator>Лев Николаевич Толсто́й</dc:creator>
|
||||
</item>
|
||||
<item/>
|
||||
</channel>
|
||||
</rss>
|
69
vendor/fguillot/picofeed/tests/fixtures/rss_20_element_preference.xml
vendored
Normal file
69
vendor/fguillot/picofeed/tests/fixtures/rss_20_element_preference.xml
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<managingEditor>author post</managingEditor>
|
||||
<dc:creator>Вики педии - свободной энциклопедии</dc:creator>
|
||||
<managingEditor>author pre</managingEditor>
|
||||
<lastBuildDate>Fri, 05 Jun 2015 00:05:00 +0300</lastBuildDate>
|
||||
<pubDate>Fri, 05 Jun 2015 01:05:00 +0300</pubDate>
|
||||
<item>
|
||||
<guid>https://www.github.com/picofeed/guid/pre</guid>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="https://www.github.com/picofeed/atom/pre"/>
|
||||
<link>https://www.github.com/picofeed/link/pre</link>
|
||||
<feedburner:origLink>
|
||||
https://en.wikipedia.org/wiki/War_and_Peace
|
||||
</feedburner:origLink>
|
||||
<link>https://www.github.com/picofeed/link/post</link>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="https://www.github.com/picofeed/atom/post"/>
|
||||
<guid>https://www.github.com/picofeed/guid/post</guid>
|
||||
<author>author post</author>
|
||||
<dc:creator>Лев Николаевич Толсто́й</dc:creator>
|
||||
<author>author pre</author>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://www.github.com/picofeed/guid/pre</guid>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="https://www.github.com/picofeed/atom/pre"/>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/Crime_and_Punishment
|
||||
</link>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="https://www.github.com/picofeed/atom/post"/>
|
||||
<guid>https://www.github.com/picofeed/guid/post</guid>
|
||||
<description>description pre</description>
|
||||
<content:encoded><![CDATA[<h1>
|
||||
История создания
|
||||
</h1>
|
||||
<p>
|
||||
Осенью
|
||||
<a href="/wiki/1865_%D0%B3%D0%BE%D0%B4" title="1865 год">
|
||||
1865
|
||||
года
|
||||
</a>
|
||||
, потеряв все свои деньги в
|
||||
<a href="/wiki/%D0%9A%D0%B0%D0%B7%D0%B8%D0%BD%D0%BE" title="Казино">
|
||||
казино
|
||||
</a>
|
||||
, не в состоянии оплатить долги кредиторам, и стараясь помочь семье своего брата Михаила, который умер в июле
|
||||
<a href="/wiki/1864_%D0%B3%D0%BE%D0%B4" title="1864 год">
|
||||
1864 года
|
||||
</a>
|
||||
, Достоевский планирует создание романа с центральным образом семьи Мармеладовых под названием «Пьяненькая».
|
||||
</p>]]></content:encoded>
|
||||
<description>description post</description>
|
||||
</item>
|
||||
<item>
|
||||
<guid>https://www.github.com/picofeed/guid/pre</guid>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="
|
||||
https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)
|
||||
"/>
|
||||
<guid>https://www.github.com/picofeed/guid/post</guid>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
12
vendor/fguillot/picofeed/tests/fixtures/rss_20_empty_channel.xml
vendored
Normal file
12
vendor/fguillot/picofeed/tests/fixtures/rss_20_empty_channel.xml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel/>
|
||||
</rss>
|
9
vendor/fguillot/picofeed/tests/fixtures/rss_20_empty_feed.xml
vendored
Normal file
9
vendor/fguillot/picofeed/tests/fixtures/rss_20_empty_feed.xml
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"/>
|
6
vendor/fguillot/picofeed/tests/fixtures/rss_20_empty_item.xml
vendored
Normal file
6
vendor/fguillot/picofeed/tests/fixtures/rss_20_empty_item.xml
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<item/>
|
||||
</channel>
|
||||
</rss>
|
30
vendor/fguillot/picofeed/tests/fixtures/rss_20_extra.xml
vendored
Normal file
30
vendor/fguillot/picofeed/tests/fixtures/rss_20_extra.xml
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<lastBuildDate>Fri, 05 Jun 2015 00:05:00 +0300</lastBuildDate>
|
||||
<link>/wiki/Category:Russian-language_literature</link>
|
||||
<item>
|
||||
<link>
|
||||
/wiki/War_and_Peace
|
||||
</link>
|
||||
</item>
|
||||
<item>
|
||||
<atom:link type="text/html" rel="https://wikipedia.org/deep-link" href="
|
||||
/wiki/Crime_and_Punishment
|
||||
"/>
|
||||
</item>
|
||||
<item>
|
||||
<feedburner:origLink>
|
||||
/wiki/Doctor_Zhivago_(novel)
|
||||
</feedburner:origLink>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
17
vendor/fguillot/picofeed/tests/fixtures/rss_20_fallback_on_invalid_feed_values.xml
vendored
Normal file
17
vendor/fguillot/picofeed/tests/fixtures/rss_20_fallback_on_invalid_feed_values.xml
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<title>
|
||||
|
||||
</title>
|
||||
<link>https://en.wikipedia.org/wiki/Category:Russian-language_literature</link>
|
||||
</channel>
|
||||
</rss>
|
34
vendor/fguillot/picofeed/tests/fixtures/rss_20_fallback_on_invalid_item_values.xml
vendored
Normal file
34
vendor/fguillot/picofeed/tests/fixtures/rss_20_fallback_on_invalid_item_values.xml
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0"
|
||||
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
||||
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:atom="http://www.w3.org/2005/Atom"
|
||||
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
||||
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
||||
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
|
||||
|
||||
<channel>
|
||||
<item>
|
||||
<guid>b67e7afb-80be-4b23-8c42-67b970e2baa7</guid>
|
||||
</item>
|
||||
<item>
|
||||
<content:encoded><![CDATA[
|
||||
]]>
|
||||
</content:encoded>
|
||||
<description>Осенью 1865 года, потеряв все свои
|
||||
деньги в казино, не в состоянии оплатить долги кредиторам,
|
||||
и стараясь помочь семье своего брата Михаила, который умер в
|
||||
июле 1864 года, Достоевский планирует создание романа с
|
||||
центральным образом семьи Мармеладовых под названием «Пьяненькая».</description>
|
||||
</item>
|
||||
<item>
|
||||
<link>
|
||||
https://en.wikipedia.org/wiki/Doctor_Zhivago_(novel)
|
||||
</link>
|
||||
<title>
|
||||
|
||||
</title>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
@ -1,63 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><description>The WWD Official Tumblr Page!
|
||||
|
||||
Women’s Wear Daily (WWD) is the daily media of record for senior executives in the global women’s and men’s fashion, retail and beauty communities and the consumer media that cover the market.
|
||||
|
||||
WWD On:
|
||||
|
||||
Facebook
|
||||
www.facebook.com/womensweardaily
|
||||
|
||||
Twitter
|
||||
www.twitter.com/womensweardaily
|
||||
www.twitter.com/wwdmarketplace
|
||||
|
||||
YouTube
|
||||
www.youtube.com/wwd</description><title>http://womensweardaily.tumblr.com/</title><generator>Tumblr (3.0; @womensweardaily)</generator><link>http://womensweardaily.tumblr.com/</link><item><title>Sue Wong RTW Spring 2015
|
||||
The designer’s spring collection...</title><description><img src="http://31.media.tumblr.com/cd505251ce02d3de1c603f560e7d9b69/tumblr_ndywlqVRKT1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/runway/spring-ready-to-wear-2015/review/sue-wong>?src=tumblr">Sue Wong RTW Spring 2015</a></h1>
|
||||
<p>The designer’s spring collection bore the influence of her infatuation with Art Deco and old Hollywood. <strong><a href="http://www.wwd.com/runway/spring-ready-to-wear-2015/review/sue-wong>?src=tumblr">For More</a><br/><a href="http://www.wwd.com/fashion-news/fashion-features/thats-totally-fine-by-rose-la-grua-rtw-spring-2015-7980675" data-ls-seen="1"><br/></a></strong></p></description><link>http://womensweardaily.tumblr.com/post/100993521734</link><guid>http://womensweardaily.tumblr.com/post/100993521734</guid><pubDate>Sun, 26 Oct 2014 10:00:16 -0400</pubDate><category>Sue Wong</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>TAW: Shanghai Fashion Week
|
||||
Photo by Dave Tacon</title><description><img src="http://38.media.tumblr.com/68973faac180b432aba4f2686c3dc4ff/tumblr_ndyffbM8HW1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/they-are-wearing/they-are-wearing-shanghai-fashion-week-7999283/slideshow?src=tumblr">TAW: Shanghai Fashion Week</a></h1>
|
||||
<h4 id="slide-credit"><em>Photo by Dave Tacon</em></h4></description><link>http://womensweardaily.tumblr.com/post/100990373888</link><guid>http://womensweardaily.tumblr.com/post/100990373888</guid><pubDate>Sun, 26 Oct 2014 09:00:13 -0400</pubDate><category>Shanghai Fashion Week</category><category>Fashion</category><category>Street Style</category><category>They Are Wearing</category></item><item><title>Frances Caine RTW Spring 2015
|
||||
Husband-and-wife hipster duo...</title><description><img src="http://31.media.tumblr.com/028449c66357f16100397819e9255c87/tumblr_ndyn1kEO5Q1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/frances-caine-rtw-spring-2015-7999202?src=tumblr">Frances Caine RTW Spring 2015</a></h1>
|
||||
<p>Husband-and-wife hipster duo Travis Caine and Katherine Kin are not just design partners, they also have a band called Von Haze. <a href="http://www.wwd.com/fashion-news/fashion-features/frances-caine-rtw-spring-2015-7999202?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100980752157</link><guid>http://womensweardaily.tumblr.com/post/100980752157</guid><pubDate>Sun, 26 Oct 2014 05:00:09 -0400</pubDate><category>Frances Caine</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>They Are Wearing: Frieze London
|
||||
Photo by Marcus Dawes</title><description><img src="http://33.media.tumblr.com/15580b6192ae0158914c25b9d7d796fd/tumblr_ndwvz5Nea41qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/they-are-wearing/they-are-wearing-frieze-london-7994824/slideshow?src=tumblr">They Are Wearing: Frieze London</a></h1>
|
||||
<h4 id="slide-credit">Photo by Marcus Dawes</h4></description><link>http://womensweardaily.tumblr.com/post/100975969488</link><guid>http://womensweardaily.tumblr.com/post/100975969488</guid><pubDate>Sun, 26 Oct 2014 03:00:08 -0400</pubDate><category>They Are Wearing</category><category>Frieze London</category><category>Fashion</category><category>Street Style</category></item><item><title>Margot Robbie at FGI’s Night of Stars</title><description><img src="http://33.media.tumblr.com/b7bf4c8890e61772235c7f9ab226f931/tumblr_ndyg9bBFTL1qa7p1yo1_500.jpg"/><br/><br/><h3 id="slide-caption"><a href="http://www.wwd.com/eye/parties/fashion-group-international-night-of-stars-honors-dvf-peter-copping-8000144/slideshow?src=tumblr">Margot Robbie at FGI’s Night of Stars</a></h3></description><link>http://womensweardaily.tumblr.com/post/100973079335</link><guid>http://womensweardaily.tumblr.com/post/100973079335</guid><pubDate>Sun, 26 Oct 2014 02:00:08 -0400</pubDate><category>Margot Robbie</category><category>FGI's Night of Stars</category><category>Fashion</category><category>celebs</category></item><item><title>CM2K by Cheryl Koo RTW Spring 2015
|
||||
In yet another...</title><description><img src="http://33.media.tumblr.com/23fc081fdb1d29020833e6f5a8795d15/tumblr_ndymlzJbE21qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short"><a href="http://www.wwd.com/fashion-news/fashion-features/cm2k-by-cheryl-koo-rtw-spring-2015-7999205?src=tumblr">CM2K by Cheryl Koo RTW Spring 2015</a></h1>
|
||||
<p>In yet another performance-art presentation, a perennial trend on the L.A. Fashion Week circuit, Cheryl Koo used professional dancers as models. <a href="http://www.wwd.com/fashion-news/fashion-features/cm2k-by-cheryl-koo-rtw-spring-2015-7999205?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100969643522</link><guid>http://womensweardaily.tumblr.com/post/100969643522</guid><pubDate>Sun, 26 Oct 2014 01:00:08 -0400</pubDate><category>CM2K by Cheryl Koo</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>Kinsman RTW Spring 2015
|
||||
Joanna Kinsman got wild with her...</title><description><img src="http://33.media.tumblr.com/fe3cb231f47409252dbc68b738909d5d/tumblr_ndynaoRjDm1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/kinsman-rtw-spring-2015-7994087?src=tumblr">Kinsman RTW Spring 2015</a></h1>
|
||||
<p>Joanna Kinsman got wild with her Brazilian-cut bikinis done in fur, shearling, a dark-pink animal print and embossed leather. <a href="http://www.wwd.com/fashion-news/fashion-features/kinsman-rtw-spring-2015-7994087?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100957532620</link><guid>http://womensweardaily.tumblr.com/post/100957532620</guid><pubDate>Sat, 25 Oct 2014 22:00:06 -0400</pubDate><category>Kinsman</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>They Are Wearing: Frieze London
|
||||
Photo by Marcus Dawes</title><description><img src="http://33.media.tumblr.com/f3117347a369634ad5cc9055c727e4d1/tumblr_nduzowYGxf1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/they-are-wearing/they-are-wearing-frieze-london-7994824/slideshow?src=tumblr">They Are Wearing: Frieze London</a></h1>
|
||||
<h4 id="slide-credit">Photo by Marcus Dawes</h4></description><link>http://womensweardaily.tumblr.com/post/100953624966</link><guid>http://womensweardaily.tumblr.com/post/100953624966</guid><pubDate>Sat, 25 Oct 2014 21:00:09 -0400</pubDate><category>They Are Wearing</category><category>Frieze London</category><category>Fashion</category><category>Street Style</category></item><item><title>Spring 2015 Trend: Do the Shag
|
||||
Photo by Isa Wipfli
|
||||
Designers...</title><description><img src="http://33.media.tumblr.com/d79b278d0555f8fc64b9b5261166638c/tumblr_ndwk9s0iwk1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/trends/spring-2015-trend-do-the-shag-7996294/slideshow?src=tumblr">Spring 2015 Trend: Do the Shag</a></h1>
|
||||
<h4 id="slide-credit"><em>Photo by Isa Wipfli</em></h4>
|
||||
<p><span class="mandelbrot_refrag"><span class="mandelbrot_refrag">Designers</span></span> toughened up the Sixties groove for spring with hardware details on dresses, graphic textures and a decidedly rock-star attitude. Here, Faith Connexion’s leather jacket and AllSaints’ cotton jeans.</p></description><link>http://womensweardaily.tumblr.com/post/100949761246</link><guid>http://womensweardaily.tumblr.com/post/100949761246</guid><pubDate>Sat, 25 Oct 2014 20:00:08 -0400</pubDate><category>Spring 2015</category><category>Trend</category><category>Sixties</category><category>Faith Connexion</category><category>AllSaints</category><category>Fashion</category></item><item><title>Aeneas Erlking RTW Spring 2015
|
||||
Designer Aeneas Zhou Erlking...</title><description><img src="http://33.media.tumblr.com/020ff3752be38bdfa63735f9c0047eae/tumblr_ndylioeQfp1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/aeneas-erlking-rtw-spring-2015-7999207?src=tumblr">Aeneas Erlking RTW Spring 2015</a></h1>
|
||||
<p>Designer Aeneas Zhou Erlking showed 11 looks for resort 2015 in a collection called “Pretty In Punk.” <a href="http://www.wwd.com/fashion-news/fashion-features/aeneas-erlking-rtw-spring-2015-7999207?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100941659863</link><guid>http://womensweardaily.tumblr.com/post/100941659863</guid><pubDate>Sat, 25 Oct 2014 18:00:06 -0400</pubDate><category>Aeneas Erlking</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>TAW: Shanghai Fashion Week
|
||||
Photo by Dave Tacon</title><description><img src="http://38.media.tumblr.com/5d5f621a28afd229173c0edc666c8007/tumblr_ndyfiaTdGJ1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/they-are-wearing/they-are-wearing-shanghai-fashion-week-7999283/slideshow?src=tumblr">TAW: Shanghai Fashion Week</a></h1>
|
||||
<h4 id="slide-credit"><em>Photo by Dave Tacon</em></h4></description><link>http://womensweardaily.tumblr.com/post/100937329296</link><guid>http://womensweardaily.tumblr.com/post/100937329296</guid><pubDate>Sat, 25 Oct 2014 17:00:08 -0400</pubDate><category>Shanghai Fashion Week</category><category>Fashion</category><category>They Are Wearing</category><category>Street Style</category></item><item><title>Skintone RTW Spring 2015
|
||||
Using only raw hand-woven cotton in...</title><description><img src="http://31.media.tumblr.com/273113c485118fbfc7ef9ae8b7ec3c9b/tumblr_ndyplgAkeS1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/skintone-rtw-spring-2015-7991646?src=tumblr">Skintone RTW Spring 2015</a></h1>
|
||||
<p>Using only raw hand-woven cotton in ivory, this line of casual tank tops, sundresses and drawstring-waist skirts appeared comfortable but bland. <a href="http://www.wwd.com/fashion-news/fashion-features/skintone-rtw-spring-2015-7991646?src=tumblr"><strong>For More<br/></strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100932937084</link><guid>http://womensweardaily.tumblr.com/post/100932937084</guid><pubDate>Sat, 25 Oct 2014 16:00:39 -0400</pubDate><category>Skintone</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>They Are Wearing: Frieze London
|
||||
Photo by Marcus Dawes</title><description><img src="http://38.media.tumblr.com/39cdfb9cff640d24c9b76802346b8fe9/tumblr_ndww24360a1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/they-are-wearing/they-are-wearing-frieze-london-7994824/slideshow?src=tumblr">They Are Wearing: Frieze London</a></h1>
|
||||
<h4 id="slide-credit">Photo by Marcus Dawes</h4></description><link>http://womensweardaily.tumblr.com/post/100928590055</link><guid>http://womensweardaily.tumblr.com/post/100928590055</guid><pubDate>Sat, 25 Oct 2014 15:00:30 -0400</pubDate><category>They Are Wearing</category><category>Frieze London</category><category>Fashion</category><category>Street Style</category></item><item><title>A look from the Zara Terez
|
||||
Collection: Candy Crush.
|
||||
Courtesy...</title><description><img src="http://33.media.tumblr.com/3c48ac34c36431a0ce7735cf86141344/tumblr_ndr6g0i2vc1qa7p1yo1_500.jpg"/><br/><br/><h1 id="slide-caption"><a href="http://www.wwd.com/fashion-news/fashion-scoops/candy-crush-teams-up-with-zara-terez-7991211?src=tumblr">A look from the Zara Terez </a></h1>
|
||||
<h1><a href="http://www.wwd.com/fashion-news/fashion-scoops/candy-crush-teams-up-with-zara-terez-7991211?src=tumblr">Collection: Candy Crush.</a></h1>
|
||||
<h4 id="slide-credit"><em>Courtesy Photo</em></h4></description><link>http://womensweardaily.tumblr.com/post/100924265060</link><guid>http://womensweardaily.tumblr.com/post/100924265060</guid><pubDate>Sat, 25 Oct 2014 14:00:30 -0400</pubDate><category>Zara Terez Collection: Candy Crush</category><category>Zara Terez</category><category>Candy Crush</category><category>Fashion</category></item><item><title>Altaf Maaneshia RTW Spring 2015
|
||||
The designer returned to his...</title><description><img src="http://31.media.tumblr.com/3fe391d7e0c06dc9ab376bf07e660a8b/tumblr_ndylygFlHw1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/altaf-maaneshia-rtw-spring-2015-7994092?src=tumblr">Altaf Maaneshia RTW Spring 2015</a></h1>
|
||||
<p>The designer returned to his favorite Forties-inspired dresses marked by extreme shoulders and nipped waists. <a href="http://www.wwd.com/fashion-news/fashion-features/altaf-maaneshia-rtw-spring-2015-7994092?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100919982150</link><guid>http://womensweardaily.tumblr.com/post/100919982150</guid><pubDate>Sat, 25 Oct 2014 13:00:29 -0400</pubDate><category>Altaf Maaneshia</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>Yirantian Guo RTW Spring 2015
|
||||
Courtesy Photo
|
||||
The...</title><description><img src="http://33.media.tumblr.com/099f60f25d240211b9a6feeffc93aa5b/tumblr_ndyjh287br1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/yirantian-guo-rtw-spring-2015-7999476?src=tumblr">Yirantian Guo RTW Spring 2015</a></h1>
|
||||
<h4 id="slide-credit"><em>Courtesy Photo</em></h4>
|
||||
<p>The designer’s deconstructed, modernist style has been on the radar of China fashion watchers since she launched her own collection back in 2012. <a href="http://www.wwd.com/fashion-news/fashion-features/yirantian-guo-rtw-spring-2015-7999476?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100915824047</link><guid>http://womensweardaily.tumblr.com/post/100915824047</guid><pubDate>Sat, 25 Oct 2014 12:00:31 -0400</pubDate><category>Yirantian Guo</category><category>RTW Spring 2015</category><category>Fashion</category><category>Shanghai Fashion Week</category></item><item><title>Rosie Huntington-Whiteley’s on a Roll
|
||||
Photo by Donato...</title><description><img src="http://33.media.tumblr.com/cb124dc307258a0ba44a4a1cdb59b0b1/tumblr_ndyi6tQuZS1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-scoops/rosie-on-a-roll-8000063/slideshow?src=tumblr">Rosie Huntington-Whiteley’s on a Roll</a></h1>
|
||||
<h4 id="slide-credit"><em>Photo by Donato Sardella/Getty Images/Courtesy Photo</em></h4>
|
||||
<p>Huntington-Whiteley hosted a dinner at the Sunset Tower Hotel with e-commerce site Forward by Elyse Walker. <strong>Liberty Ross</strong>, <strong>Abbey Lee</strong> <strong>Kershaw</strong> and <strong>Cher Coulter</strong> were among the guests who came to celebrate designer <strong>Anthony Vaccarello</strong>, whose label retails on the site. <a href="http://www.wwd.com/fashion-news/fashion-scoops/rosie-on-a-roll-8000063/slideshow?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100911850898</link><guid>http://womensweardaily.tumblr.com/post/100911850898</guid><pubDate>Sat, 25 Oct 2014 11:00:28 -0400</pubDate><category>Rosie Huntington-Whiteley</category><category>Anthony Vaccarello</category><category>Abbey Lee Kershaw</category><category>Fashion</category><category>celebs</category><category>Forward by Elyse Walker</category><category>Sunset Tower Hotel</category></item><item><title>Dar Sara RTW Spring 2015
|
||||
Ballerinas by way of Bollywood informed...</title><description><img src="http://38.media.tumblr.com/6b314d36441c4a7c74722d63e4ee6852/tumblr_ndymudmmfW1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/fashion-features/dar-sara-rtw-spring-2015-7991801?src=tumblr">Dar Sara RTW Spring 2015</a></h1>
|
||||
<p>Ballerinas by way of Bollywood informed Dar Sara Fashion’s inventive spring lineup. <a href="http://www.wwd.com/fashion-news/fashion-features/dar-sara-rtw-spring-2015-7991801?src=tumblr"><strong>For More</strong></a></p></description><link>http://womensweardaily.tumblr.com/post/100908254264</link><guid>http://womensweardaily.tumblr.com/post/100908254264</guid><pubDate>Sat, 25 Oct 2014 10:00:27 -0400</pubDate><category>Dar Sara</category><category>RTW Spring 2015</category><category>Fashion</category><category>LAFW</category></item><item><title>TAW: Shanghai Fashion Week
|
||||
Photo by Dave Tacon</title><description><img src="http://38.media.tumblr.com/e81cf4f010a35b94cd0dea8f67f45ff0/tumblr_ndyfddFKBJ1qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/they-are-wearing/they-are-wearing-shanghai-fashion-week-7999283/slideshow?src=tumblr">TAW: Shanghai Fashion Week</a></h1>
|
||||
<h4 id="slide-credit"><em>Photo by Dave Tacon</em></h4></description><link>http://womensweardaily.tumblr.com/post/100905126460</link><guid>http://womensweardaily.tumblr.com/post/100905126460</guid><pubDate>Sat, 25 Oct 2014 09:00:23 -0400</pubDate><category>Shanghai Fashion Week</category><category>Fashion</category><category>Street Style</category><category>They Are Wearing</category></item><item><title>Spring 2015 Denim Trend: A Denim
|
||||
Love Story
|
||||
Calvin...</title><description><img src="http://38.media.tumblr.com/278ab96e4584d645e9c0402ee7d3fc4e/tumblr_ndwnd6Lb221qa7p1yo1_500.jpg"/><br/><br/><h1 class="window-wide title-short" id="slideshow-title"><a href="http://www.wwd.com/fashion-news/trends/spring-2015-denim-trend-a-denim-love-story-7993360/slideshow?src=tumblr">Spring 2015 Denim Trend: A Denim</a></h1>
|
||||
<h1 class="window-wide title-short"><a href="http://www.wwd.com/fashion-news/trends/spring-2015-denim-trend-a-denim-love-story-7993360/slideshow?src=tumblr"> Love Story</a></h1>
|
||||
<p>Calvin Rucker’s polyester crinkled peasant top; MiH’s cotton denim skirt. Prima Donna leather fringe bag.</p></description><link>http://womensweardaily.tumblr.com/post/100902488286</link><guid>http://womensweardaily.tumblr.com/post/100902488286</guid><pubDate>Sat, 25 Oct 2014 08:00:46 -0400</pubDate><category>Spring 2015</category><category>Denim</category><category>Trend</category><category>Calvin Rucker</category><category>MiH</category><category>Prima Donna</category><category>Fashion</category><category>seventies</category></item></channel></rss>
|
979
vendor/fguillot/picofeed/tests/fixtures/youtube.xml
vendored
979
vendor/fguillot/picofeed/tests/fixtures/youtube.xml
vendored
File diff suppressed because one or more lines are too long
@ -1,177 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>خبریں - وائس آف امریکہ</title>
|
||||
<link>http://www.urduvoa.com/archive/news/latest/2184/2184.html</link>
|
||||
<description><![CDATA[اردو خبریں]]></description>
|
||||
<image>
|
||||
<url>http://www.voanews.com/img/voa/rssLogo_VOA.gif</url>
|
||||
<title>خبریں - وائس آف امریکہ</title>
|
||||
<link>http://www.urduvoa.com/archive/news/latest/2184/2184.html</link>
|
||||
</image>
|
||||
<language>ur</language>
|
||||
<copyright>کاپی رائٹ 2010 - وائس آف امریکہ</copyright>
|
||||
<ttl>60</ttl>
|
||||
<lastBuildDate>Sun, 16 Mar 2014 18:08:14 -0400</lastBuildDate>
|
||||
<generator>Pangea CMS – VOA</generator>
|
||||
<atom:link href="http://www.urduvoa.com/api/zoot_egkty" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>کرائمیا: ریفرنڈم میں روس سے الحاق کی حمایت</title>
|
||||
<description><![CDATA[روس کے سرکاری ذرائع ابلاغ نے دعویٰ کیا ہے کہ ریفرنڈم میں روس کے ساتھ الحاق کے حق میں ووٹ ڈالنے والے رائے دہندگان کی شرح 95 فی صد سے زائد رہی ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/majority-favors-joining-russia-in-crimea-referendum-16mar2014/1872523.html</link>
|
||||
<guid>http://www.urduvoa.com/content/majority-favors-joining-russia-in-crimea-referendum-16mar2014/1872523.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 17:51:37 -0400</pubDate>
|
||||
<category>خبریں</category><category>دنیا</category><comments>http://www.urduvoa.com/content/majority-favors-joining-russia-in-crimea-referendum-16mar2014/1872523.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/31CBC894-6FE8-480A-A032-1238D6AD30E2_cx0_cy6_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>کراچی : انسداد پولیو مہم کا تیسرا مرحلہ</title>
|
||||
<description><![CDATA[انسداد پولیو مہم میں شریک پولیو رضاکاروں نے کراچی کی 24 یونین کونسلوں میں گھر گھر جاکر 5 سال تک کے بچوں کو پولیو سے بچاو کے قطرے پلائے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/third-round-of-anti-polio-campaign-16mar2014/1872482.html</link>
|
||||
<guid>http://www.urduvoa.com/content/third-round-of-anti-polio-campaign-16mar2014/1872482.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 15:31:10 -0400</pubDate>
|
||||
<category>خبریں</category><category>صحت-سائنس</category><comments>http://www.urduvoa.com/content/third-round-of-anti-polio-campaign-16mar2014/1872482.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/BC964C7F-E409-4055-8CFB-0E7AC40F814D_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>نائجیریا میں دیہات پر حملے، 100 افراد ہلاک</title>
|
||||
<description><![CDATA[انسانی حقوق کی تنظیم 'ہیومن رائٹس واچ' کے مطابق علاقے میں مذہبی بنیادوں پر جاری جھڑپوں میں 2010ء سےاب تک تین ہزار افراد مارے جاچکے ہیں۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/hundred-killed-in-central-nigeria-attack-16mar2014/1872468.html</link>
|
||||
<guid>http://www.urduvoa.com/content/hundred-killed-in-central-nigeria-attack-16mar2014/1872468.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 15:16:00 -0400</pubDate>
|
||||
<category>خبریں</category><category>دنیا</category><comments>http://www.urduvoa.com/content/hundred-killed-in-central-nigeria-attack-16mar2014/1872468.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/3ACA1467-80D2-428C-A3AD-29E2D1FBF15B_cx0_cy0_cw0_w800_r1.png" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>علاج کے لیے شخصیت کا معائنہ بھی ضروری ہے، تحقیق</title>
|
||||
<description><![CDATA[مطالعے میں شامل ہونے والےایسے نوجوان جنھیں زیادہ سمجھدار بتایا گیا تھا اپنے ہم عمر اور لا ابالی طبعیت رکھنے والے نوجوانوں کے مقابلے میں 38 برس کی عمر میں بہت اچھی صحت کے مالک تھے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/personality-tests-of-patients-improve-heath-care-13mar2014/1872453.html</link>
|
||||
<guid>http://www.urduvoa.com/content/personality-tests-of-patients-improve-heath-care-13mar2014/1872453.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 14:26:31 -0400</pubDate>
|
||||
<category>خبریں</category><category>صحت-سائنس</category><author>noreply@voanews.com (نصرت شبنم)</author><comments>http://www.urduvoa.com/content/personality-tests-of-patients-improve-heath-care-13mar2014/1872453.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/6811B2F6-3FA8-4E7A-97BB-C4F141969063_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>شمالی کوریا کے مزید میزائل تجربے</title>
|
||||
<description><![CDATA[فروری کے اختتام سے شمالی کوریا کے ان میزائل تجربات میں خاصا اضافہ ہوا ہے جس کے باعث جنوبی کوریا اور خطے کے دیگر ممالک نے شمالی کوریا کی سرحدوں کی نگرانی سخت کردی ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/north-korea-test-fires-18-missiles-16mar2014/1872427.html</link>
|
||||
<guid>http://www.urduvoa.com/content/north-korea-test-fires-18-missiles-16mar2014/1872427.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 13:48:57 -0400</pubDate>
|
||||
<category>خبریں</category><category>دنیا</category><comments>http://www.urduvoa.com/content/north-korea-test-fires-18-missiles-16mar2014/1872427.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/438CDEF6-F3D8-492E-AE18-8AB3B7CE8EBC_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>توہین ادیان کے قوانین میں ’ترمیم‘ کے مطالبات میں اضافہ</title>
|
||||
<description><![CDATA[ماہرین اور انسانی حقوق کی تنظیموں کا کہنا ہے کہ ریاست اپنی ذمہ داری کا احساس کرتے ہوئے اگر توہین ادیان کے جھوٹے الزامات لگانے والوں کے خلاف موثر قانونی کارروائی کرے تو قانون کے غلط استعمال کو بڑی حد تک روکا جا سکتا ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/pakistan-blasphemy-16march/1872314.html</link>
|
||||
<guid>http://www.urduvoa.com/content/pakistan-blasphemy-16march/1872314.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 10:19:44 -0400</pubDate>
|
||||
<category>خبریں</category><category>پاکستان</category><author>noreply@voanews.com (کامران حیدر)</author><comments>http://www.urduvoa.com/content/pakistan-blasphemy-16march/1872314.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/4B7EE696-DB0D-458D-AF9A-F2B16E2E95E1_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>لاپتا طیارے کے پاکستانی حدود میں شواہد نہیں ملے: دفتر خارجہ</title>
|
||||
<description><![CDATA[ترجمان دفتر خارجہ تسنیم اسلم کا کہنا تھا کہ پاکستان میں ایسی کوئی چیز نہیں ہوئی اور نہ ہی راڈار پر کوئی معلومات آئیں۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/malaysia-missing-airliner-pakistan-territory-witness-not-found/1872288.html</link>
|
||||
<guid>http://www.urduvoa.com/content/malaysia-missing-airliner-pakistan-territory-witness-not-found/1872288.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 09:28:34 -0400</pubDate>
|
||||
<category>خبریں</category><category>پاکستان</category><category>ناصر محمود </category><author>noreply@voanews.com (ناصر محمود)</author><comments>http://www.urduvoa.com/content/malaysia-missing-airliner-pakistan-territory-witness-not-found/1872288.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/22B46417-2A72-4728-930E-B41B487210D0_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>لاپتا طیارہ: تحقیقات کا نیا رخ، تلاش میں 25 ملک سرگرم</title>
|
||||
<description><![CDATA[حکام نے بتایا کہ پولیس نے جہاز کے دونوں پائلٹوں کے گھروں کی تلاشی بھی لی جب کہ ان انجینیئرز سے بھی تحقیقات کی جارہی ہیں جن سے ممکنہ طور پر اس جہاز سے کوالالمپور سے اڑان بھرنے سے قبل رابطہ کیا گیا ہو۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/search-for-missing-plane-involves-25-countries/1872224.html</link>
|
||||
<guid>http://www.urduvoa.com/content/search-for-missing-plane-involves-25-countries/1872224.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 08:00:32 -0400</pubDate>
|
||||
<category>خبریں</category><category>دنیا</category><comments>http://www.urduvoa.com/content/search-for-missing-plane-involves-25-countries/1872224.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/7697AB54-137C-45D1-AD79-3C510B394C65_cx0_cy9_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>شام: باغیوں کے زیر تسلط علاقے پر سرکاری قبضہ بحال</title>
|
||||
<description><![CDATA[سرکاری فورسز ایک عرصے سے یبرود نامی علاقے میں کارروائیاں کرتی آرہی تھیں جس کا مقصد سرحد پار سے باغیوں کی رسد کو زک پہنچانا تھا۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/syria-security-forces-seized-rebel-held-town/1872206.html</link>
|
||||
<guid>http://www.urduvoa.com/content/syria-security-forces-seized-rebel-held-town/1872206.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 06:58:58 -0400</pubDate>
|
||||
<category>خبریں</category><category>مشرق وسطیٰ </category><comments>http://www.urduvoa.com/content/syria-security-forces-seized-rebel-held-town/1872206.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/9D9F3945-9AB9-4462-BE42-98D4767F5DD0_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>پاکستان میں یوٹیوب پر پابندی جلد اٹھا لی جائے گی: وزیر اطلاعات</title>
|
||||
<description><![CDATA[پرویز رشید کا کہنا تھا کہ لوگوں کے جذبات خصوصاً مذہبی جذبات مجروح کرنے والی وڈیوز کو روکنے کے لیے ایک سافٹ ویئر تیار کر لیا گیا ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/pakistan-ban-on-youtube/1872190.html</link>
|
||||
<guid>http://www.urduvoa.com/content/pakistan-ban-on-youtube/1872190.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 04:32:46 -0400</pubDate>
|
||||
<category>خبریں</category><category>پاکستان</category><comments>http://www.urduvoa.com/content/pakistan-ban-on-youtube/1872190.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/F54EC135-96C3-4DE7-B9AA-8A7C82F3B6E4_cx0_cy6_cw80_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>کرائمیا میں یوکرین سے علیحدگی پر ریفرنڈم </title>
|
||||
<description><![CDATA[بحیرہ اسود کے کنارے واقع یوکرین کے اس علاقے میں ریفرنڈم روس کی طرف سے اقوام متحدہ کی سلامتی کونسل میں اس عمل کے خلاف قرارداد کے ویٹو کرنے کے ایک دن بعد شروع ہوا۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/ukraine-crimea-referendum/1872185.html</link>
|
||||
<guid>http://www.urduvoa.com/content/ukraine-crimea-referendum/1872185.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 03:35:53 -0400</pubDate>
|
||||
<category>خبریں</category><category>دنیا</category><comments>http://www.urduvoa.com/content/ukraine-crimea-referendum/1872185.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/A5BDE893-E02B-4C45-9CBE-16778CF193F5_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>مجوزہ سکیورٹی معاہدے پر دستخط نہیں کروں گا: افغان صدر</title>
|
||||
<description><![CDATA[حامد کرزئی کا کہنا تھا کہ افغانستان کے عوام امریکہ کے ساتھ سکیورٹی معاہدے کے خلاف نہیں ہیں لیکن افغان عوام کے لیے بھی کسی دوسرے ملک کی طرح امن زندگی کی بنیاد ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/afghanistan-karazi-last-adress-to-parliament/1872173.html</link>
|
||||
<guid>http://www.urduvoa.com/content/afghanistan-karazi-last-adress-to-parliament/1872173.html</guid>
|
||||
<pubDate>Sun, 16 Mar 2014 00:52:18 -0400</pubDate>
|
||||
<category>خبریں</category><category>جنوبی ایشیا</category><comments>http://www.urduvoa.com/content/afghanistan-karazi-last-adress-to-parliament/1872173.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/F89B947E-BB71-41D2-B2A4-4F5777B3ABDE_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>لاڑکانہ:مقدس اوراق کی بے حرمتی کے الزام میں ایک شخص گرفتار </title>
|
||||
<description><![CDATA[واقعہ ہفتے کی رات لاڑکانہ کے علاقے جناح باغ چوک پر پیش آیا۔ کچھ لوگوں نے زیرحراست شخص پر مقدس اوراق کی بے حرمتی کرنے کا الزام لگاتے ہوئے جلاوٴ گھیراوٴ شروع کردیا۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/larkana-tention/1872130.html</link>
|
||||
<guid>http://www.urduvoa.com/content/larkana-tention/1872130.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 19:27:08 -0400</pubDate>
|
||||
<category>خبریں</category><category>پاکستان</category><enclosure url="http://gdb.voanews.com/B6BA48F0-B3FF-4099-89AE-7BFFB21D9ED1_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title> ’ ینگ گلوبل لیڈرز پروگرام ‘ کے لئے تین پاکستانی منتخب</title>
|
||||
<description><![CDATA[عالمی اقتصادی گلوبل لیڈرشپ پروگرام کیلئے اس سے قبل آسکر ایوارڈ یافتہ پاکستانی فلم میکر شرمین عبید چنائے بھی منتخب ہوچکی ہیں.]]></description>
|
||||
<link>http://www.urduvoa.com/content/three-pakistanis-in-global-leadership-program/1872109.html</link>
|
||||
<guid>http://www.urduvoa.com/content/three-pakistanis-in-global-leadership-program/1872109.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 17:42:44 -0400</pubDate>
|
||||
<category>خبریں</category><category>تعلیم</category><comments>http://www.urduvoa.com/content/three-pakistanis-in-global-leadership-program/1872109.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/E8FE46DC-8DDC-44DA-AF49-57EE97D94C46_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>لیاری گینگ وار ، دونوں گروپس میں امن معاہدہ</title>
|
||||
<description><![CDATA[لیاری میں تین دنوں تک شدید گینگ وار کے بعد ہفتے کو دونوں گروپوں میں امن معاہدہ طے پاگیا ۔ قومی عوامی تحریک کے رہنما ایاز لطیف پلیجو نے معاہدے کو تکمیل تک پہنچانے کے لئے اپنی خدمات کا دعویٰ کیا ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/lyari-gan-war-edns/1872108.html</link>
|
||||
<guid>http://www.urduvoa.com/content/lyari-gan-war-edns/1872108.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 17:40:04 -0400</pubDate>
|
||||
<category>خبریں</category><category>پاکستان</category><enclosure url="http://gdb.voanews.com/90FC1184-9097-4331-A476-F532D58BD60C_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>کراچی ، سال 2014 کا پہلا پولیو کیس سامنے آگیا</title>
|
||||
<description><![CDATA[بلدیہ ٹاوٴن کی رہائشی دو سالہ بچی مزدلفہ میں پولیو وائرس کی تصدیق ہوگئی ہے۔ اس کے ساتھ ہی ملک بھر میں رواں سال سامنے آنے والے کیسز کی تعداد 29ہوگئی ہے۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/sindh-first-polio-case-found-in-karachi-2014/1872083.html</link>
|
||||
<guid>http://www.urduvoa.com/content/sindh-first-polio-case-found-in-karachi-2014/1872083.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 15:44:04 -0400</pubDate>
|
||||
<category>خبریں</category><category>صحت-سائنس</category><author>noreply@voanews.com (شائستہ جلیل)</author><comments>http://www.urduvoa.com/content/sindh-first-polio-case-found-in-karachi-2014/1872083.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/0EAD081F-3832-46DA-84C4-70E782F49A53_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>نئی فلمیں ’بے وقوفیاں‘ اور ’نے برز‘ ریلیز ہوگئیں</title>
|
||||
<description><![CDATA[فلم ”بے وقوفیاں“جمعہ کو بھارت کے ساتھ ساتھ پاکستانی سنیماگھروں کی بھی زینت بن چکی ہے۔ اسے اس ہفتے کا فرنٹ رنرر کہاجارہا ہے۔۔۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/bollywood-box-office-report/1872076.html</link>
|
||||
<guid>http://www.urduvoa.com/content/bollywood-box-office-report/1872076.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 15:36:24 -0400</pubDate>
|
||||
<category>خبریں</category><category>آرٹ</category><enclosure url="http://gdb.voanews.com/042B4E3A-C87A-426B-9468-7FE5EF1E4B1E_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>نئی باتیں یاد رکھنے کیلئے پرانی یادیں بھلانا ضروری ہوگیا!!</title>
|
||||
<description><![CDATA[پرانی اور بے کار یادوں کا بھلا دینا یاداشت اور جذباتی صحت دونوں کے لئے ضروری ہے۔۔۔ کوئی فالتو پرانی یاد آئے تو اپنا دھیان دوسری معلومات کی طرف کر دینا چاہئے جسے انسان یاد کرنا چاہتا ہو۔۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/article/1872065.html</link>
|
||||
<guid>http://www.urduvoa.com/content/article/1872065.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 15:11:34 -0400</pubDate>
|
||||
<category>خبریں</category><category>صحت-سائنس</category><category>شہزاد حسین</category><author>noreply@voanews.com (شہزاد حسین)</author><comments>http://www.urduvoa.com/content/article/1872065.html#relatedInfoContainer</comments><enclosure url="http://gdb.voanews.com/025146CA-1CB1-4D86-B8C0-22A6D096C572_cx0_cy25_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>ٹی ٹوئنٹی ورلڈ کپ اتوار سے شروع ہورہا ہے</title>
|
||||
<description><![CDATA[پاکستان اور بھارت روایتی حریف بھی ہیں ۔ دونوں کو ایک دوسرے پر برتری ثابت کرنے کے لئے21 مارچ کو ایک دوسرے کا سخت مقابلہ کرنا ہوگا۔ یہ میچ میرپور میں کھیلا جائے گا۔]]></description>
|
||||
<link>http://www.urduvoa.com/content/world-cup-t-20/1872036.html</link>
|
||||
<guid>http://www.urduvoa.com/content/world-cup-t-20/1872036.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 14:05:24 -0400</pubDate>
|
||||
<category>خبریں</category><category>کھیل</category><enclosure url="http://gdb.voanews.com/EB0F9E04-E8B6-4318-BDD3-A427070C0ED3_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
<item>
|
||||
<title>راشن سسٹم ، قحط زدہ تھر کے مسائل کا مستقل حل ۔۔!!</title>
|
||||
<description><![CDATA[تھر ہر سال، دو سال بعد خشک سالی کا شکارہوجاتا ہے اور کوششوں کے باوجود اس کا کو ئی مستقل حل نہیں نکل پاتا ۔ زیر نظر رتحریر میں کراچی کے ایک ادارے ’پائیلر‘ نے کچھ تجاویز پیش کی ہیں، ملاحظہ کیجئے:]]></description>
|
||||
<link>http://www.urduvoa.com/content/solution-of-drought/1872010.html</link>
|
||||
<guid>http://www.urduvoa.com/content/solution-of-drought/1872010.html</guid>
|
||||
<pubDate>Sat, 15 Mar 2014 12:40:40 -0400</pubDate>
|
||||
<category>خبریں</category><category>پاکستان</category><author>noreply@voanews.com (وسیم صدیقی)</author><enclosure url="http://gdb.voanews.com/8E87943F-441D-47FD-AA1D-88788BDF355A_cx0_cy0_cw0_w800_r1.jpg" length="3123" type="image/jpeg"/>
|
||||
</item>
|
||||
</channel></rss>
|
Loading…
Reference in New Issue
Block a user