# Universal Feed Parser

Parse RSS and Atom feeds in Python. 3000 unit tests. Open source.

- Download ·
- Documentation ·
- Unit tests ·
- Report a bug

## entries[i].source

A dictionary with details about the source of the entry.

### Comes from

- `/atom10:feed/atom10:entry/atom10:source`

### entries[i].source.author

The author of the source of this entry.

### entries[i].source.author_detail

A dictionary containing details about the author of the source of this entry.

#### entries[i].source.author_detail.name

The name of the author of the source of this entry.

#### entries[i].source.author_detail.href

The URL of the author of the source of this entry. This can be the author's home page, or a contact page with a webmail form.

If this is a relative URI, it is resolved according to a set of rules.

#### entries[i].source.author_detail.email

The email address of the author of the source of this entry.

### entries[i].source.contributors

A list of contributors to the source of this entry.

#### entries[i].source.contributors[j].name

The name of a contributor to the source of this entry.

#### entries[i].source.contributors[j].href

The URL of a contributor to the source of this entry. This can be the contributor's home page, or a contact page with a webmail form.

If this is a relative URI, it is resolved according to a set of rules.

#### entries[i].source.contributors[j].email

The email address of a contributor to the source of this entry.

### entries[i].source.icon

The URL of an icon representing the source of this entry.

If this is a relative URI, it is resolved according to a set of rules.

### entries[i].source.id

A globally unique identifier for the source of this entry.

### entries[i].source.link

The primary permanent link of the source of this entry

### entries[i].source.links

A list of all links defined by the source of this entry.

#### entries[i].source.links[j].rel

The relationship of a link defined by the source of this entry.

Atom 1.0 defines five standard link relationships and describes the process for registering others. Here are the five standard `rel` values:

- `alternate`
- `self`
- `related`
- `via`
- `enclosure`

#### entries[i].source.links[j].type

The content type of the page pointed to by a link defined by the source of this entry.

#### entries[i].source.links[j].href

The URL of the page pointed to by a link defined by the source of this entry.

If this is a relative URI, it is resolved according to a set of rules.

#### entries[i].source.links[j].title

The title of a link defined by the source of this entry.

### entries[i].source.logo

The URL of a logo representing the source of this entry.

If this is a relative URI, it is resolved according to a set of rules.

### entries[i].source.rights

A human-readable copyright statement for the source of this entry.

### entries[i].source.rights_detail

A dictionary containing details about the copyright statement for the source of this entry.

#### entries[i].source.rights_detail.value

Same as entries[i].source.rights.

If this contains HTML or XHTML, it is sanitized by default.

If this contains HTML or XHTML, certain (X)HTML elements within this value may contain relative URIs. If so, they are resolved according to a set of rules.

#### entries[i].source.rights_detail.type

The content type of the copyright statement for the source of this entry.

Most likely values for `type`:

- `text/plain`
- `text/html`
- `application/xhtml+xml`

For Atom feeds, the content type is taken from the `type` attribute, which defaults to `text/plain` if not specified. For RSS feeds, the content type is auto-determined by inspecting the content, and defaults to `text/html`. Note that this may cause silent data loss if the value contains plain text with angle brackets. There is nothing I can do about this problem; it is a limitation of RSS.

Future enhancement: some versions of RSS clearly specify that certain values default to `text/plain`, and Universal Feed Parser should respect this, but it doesn't yet.

#### entries[i].source.rights_detail.language

The language of the copyright statement for the source of this entry.

`language` is supposed to be a language code, as specified by RFC 3066, but publishers have been known to publish random values like “English” or “German”. Universal Feed Parser does not do any parsing or normalization of language codes.

`language` may come from the element's `xml:lang` attribute, or it may inherit from a parent element's `xml:lang`, or the `Content-Language` HTTP header. If the feed does not specify a language, `language` will be `None`, the Python null value.

#### entries[i].source.rights_detail.base

The original base URI for links within the copyright statement for the source of this entry.

`base` is only useful in rare situations and can usually be ignored. It is the original base URI for this value, as specified by the element's `xml:base` attribute, or a parent element's `xml:base`, or the appropriate HTTP header, or the URI of the feed. (See Relative Link Resolution for more details.) By the time you see it, Universal Feed Parser has already resolved relative links in all values where it makes sense to do so. Clients should never need to manually resolve relative links.

### entries[i].source.subtitle

A subtitle, tagline, slogan, or other short description of the source of this entry.

If this contains HTML or XHTML, it is sanitized by default.

If this contains HTML or XHTML, certain (X)HTML elements within this value may contain relative URIs. If so, they are resolved according to a set of rules.

### entries[i].source.subtitle_detail

A dictionary containing details about the subtitle for the source of this entry.

#### entries[i].source.subtitle_detail.value

Same as entries[i].source.subtitle.

If this contains HTML or XHTML, it is sanitized by default.

If this contains HTML or XHTML, certain (X)HTML elements within this value may contain relative URIs. If so, they are resolved according to a set of rules.

#### entries[i].source.subtitle_detail.type

The content type of the subtitle of the source of this entry.

Most likely values for `type`:

- `text/plain`
- `text/html`
- `application/xhtml+xml`

For Atom feeds, the content type is taken from the `type` attribute, which defaults to `text/plain` if not specified. For RSS feeds, the content type is auto-determined by inspecting the content, and defaults to `text/html`. Note that this may cause silent data loss if the value contains plain text with angle brackets. There is nothing I can do about this problem; it is a limitation of RSS.

Future enhancement: some versions of RSS clearly specify that certain values default to `text/plain`, and Universal Feed Parser should respect this, but it doesn't yet.

#### entries[i].source.subtitle_detail.language

The language of the subtitle of the source of this entry.

`language` is supposed to be a language code, as specified by RFC 3066, but publishers have been known to publish random values like “English” or “German”. Universal Feed Parser does not do any parsing or normalization of language codes.

`language` may come from the element's `xml:lang` attribute, or it may inherit from a parent element's `xml:lang`, or the `Content-Language` HTTP header. If the feed does not specify a language, `language` will be `None`, the Python null value.

#### entries[i].source.subtitle_detail.base

The original base URI for links within the subtitle of the source of this entry.

`base` is only useful in rare situations and can usually be ignored. It is the original base URI for this value, as specified by the element's `xml:base` attribute, or a parent element's `xml:base`, or the appropriate HTTP header, or the URI of the feed. (See Relative Link Resolution for more details.) By the time you see it, Universal Feed Parser has already resolved relative links in all values where it makes sense to do so. Clients should never need to manually resolve relative links.

### entries[i].source.title

The title of the source of this entry.

If this contains HTML or XHTML, it is sanitized by default.

If this contains HTML or XHTML, certain (X)HTML elements within this value may contain relative URIs. If so, they are resolved according to a set of rules.

### entries[i].source.title_detail

A dictionary containing details about the title for the source of this entry.

#### entries[i].source.title_detail.value

Same as entries[i].source.title.

If this contains HTML or XHTML, it is sanitized by default.

If this contains HTML or XHTML, certain (X)HTML elements within this value may contain relative URIs. If so, they are resolved according to a set of rules.

#### entries[i].source.title_detail.type

The content type of the title of the source of this entry.

Most likely values for `type`:

- `text/plain`
- `text/html`
- `application/xhtml+xml`

For Atom feeds, the content type is taken from the `type` attribute, which defaults to `text/plain` if not specified. For RSS feeds, the content type is auto-determined by inspecting the content, and defaults to `text/html`. Note that this may cause silent data loss if the value contains plain text with angle brackets. There is nothing I can do about this problem; it is a limitation of RSS.

Future enhancement: some versions of RSS clearly specify that certain values default to `text/plain`, and Universal Feed Parser should respect this, but it doesn't yet.

#### entries[i].source.title_detail.language

The language of the title of the source of this entry.

`language` is supposed to be a language code, as specified by RFC 3066, but publishers have been known to publish random values like “English” or “German”. Universal Feed Parser does not do any parsing or normalization of language codes.

`language` may come from the element's `xml:lang` attribute, or it may inherit from a parent element's `xml:lang`, or the `Content-Language` HTTP header. If the feed does not specify a language, `language` will be `None`, the Python null value.

#### entries[i].source.title_detail.base

The original base URI for links within the title of the source of this entry.

`base` is only useful in rare situations and can usually be ignored. It is the original base URI for this value, as specified by the element's `xml:base` attribute, or a parent element's `xml:base`, or the appropriate HTTP header, or the URI of the feed. (See Relative Link Resolution for more details.) By the time you see it, Universal Feed Parser has already resolved relative links in all values where it makes sense to do so. Clients should never need to manually resolve relative links.

### entries[i].source.updated

The date the source of this entry was last updated, as a string in the same format as it was published in the original feed.

This element is parsed as a date and stored in entries[i].source.updated_parsed.

### entries[i].source.updated_parsed

The date this entry was last updated, as a standard Python 9-tuple.

← entries[i].tags
entries[i].comments →