Packages

Feed parser built in pure Elixir, Supports RSS(Feedburner/Itunes) and Atom(Feedburner/Youtube/Google Docs)

Current section

Files

Jump to
feedraptor lib parsers itunes_rss.ex
Raw

lib/parsers/itunes_rss.ex

defmodule Feedraptor.Parser.ItunesRSS do
@moduledoc """
Feed Parser for Itunes RSS feeds
## Feed properties:
* Copyright
* Description
* Image
* Language
* Last Built
* Url
* Managing Editor
* Version
* Title
* TTL
* Itunes Author
* Itunes Block
* Itunes Image
* Itunes Explicit
* Itunes Complete
* Itunes Keywords
* Itunes Type
* Itunes new feed url
* Itunes Subtitle
* Itunes Categories
* Itunes Owners
* Entries
## Owner Properties
* Name
* Email
## Entry properties:
* Author
* Guid
* Title
* Url
* Summary
* Content
* Published
* Itunes Author
* Itunes Block
* Itunes Duration
* Itunes Explicit
* Itunes Keywords
* Itunes Subtitle
* Itunes Image
* Itunes Closed Captioned
* Itunes Order
* Itunes Season
* Itunes Episode
* Itunes Title
* Itunes Episode Type
* Itunes Summary
* Enclosure Length
* Enclosure Type
* Enclosure Url
## Image properties:
* Url
* Title
* Link
* Width
* Height
* Description
"""
use Capuli
# RSS 2.0 elements that need including
element :copyright
element :description
element :image, module: Feedraptor.Parser.RSSImage
element :language
element :lastbuilddate, as: :last_built
element :link, as: :url
element :managingeditor
element :rss, as: :version, value: :version
element :title
element :ttl
# If author is not present use managingEditor on the channel
element :"itunes:author", as: :itunes_author
element :"itunes:block", as: :itunes_block
element :"itunes:image", value: :href, as: :itunes_image
element :"itunes:explicit", as: :itunes_explicit
element :"itunes:complete", as: :itunes_complete
element :"itunes:keywords", as: :itunes_keywords
element :"itunes:type", as: :itunes_type
# New URL for the podcast feed
element :"itunes:new_feed_url", as: :itunes_new_feed_url
element :"itunes:subtitle", as: :itunes_subtitle
# If summary is not present, use the description tag
element :"itunes:summary", as: :itunes_summary
# iTunes RSS feeds can have multiple main categories and multiple
# sub-categories per category.
#elements :"itunes:category", as: :_itunes_categories, module: Feedraptor.Parser.ItunesRSS.Category
elements :"itunes:category", as: :itunes_categories, value: :text
elements :"itunes:owner", as: :itunes_owners, class: Feedraptor.Parser.ItunesRSS.Owner
elements :item, as: :entries, module: Feedraptor.Parser.ItunesRSS.Item
defmodule Owner do
@moduledoc false
use Capuli
element :"itunes:name", as: :name
element :"itunes:email", as: :email
end
defmodule Item do
@moduledoc false
alias Feedraptor.Helper
defmodule Definition do
@moduledoc false
use Capuli
element :author
element :guid, as: :entry_id
element :title
element :link, as: :url
element :description, as: :summary
element :"content:encoded", as: :content
element :pubdate, as: :published
# If author is not present use author tag on the item
element :"itunes:author", as: :itunes_author
element :"itunes:block", as: :itunes_block
element :"itunes:duration", as: :itunes_duration
element :"itunes:explicit", as: :itunes_explicit
element :"itunes:keywords", as: :itunes_keywords
element :"itunes:subtitle", as: :itunes_subtitle
element :"itunes:image", value: :href, as: :itunes_image
element :"itunes:isclosedcaptioned", as: :itunes_closed_captioned
element :"itunes:order", as: :itunes_order
element :"itunes:season", as: :itunes_season
element :"itunes:episode", as: :itunes_episode
element :"itunes:title", as: :itunes_title
element :"itunes:episodetype", as: :itunes_episode_type
# If summary is not present, use the description tag
element :"itunes:summary", as: :itunes_summary
element :enclosure, value: :length, as: :enclosure_length
element :enclosure, value: :type, as: :enclosure_type
element :enclosure, value: :url, as: :enclosure_url
#elements "psc:chapter", as: :raw_chapters, class: Feedjira::Parser::PodloveChapter
end
@doc false
def parse(raw_entry) do
raw_entry
|> Definition.parse()
|> Helper.update_date_fields()
end
end
@doc false
def will_parse?(xml) do
xml =~ ~r{xmlns:itunes\s?=\s?[\"\']http://www\.itunes\.com/dtds/podcast-1\.0\.dtd[\"\']}
end
end