commit 1d0992e61b35cad2bd7173b1d8416918c457a525
Author: Evgeny Kuchuk
Date: Thu Aug 12 16:19:26 2021 +0300
first commit
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e9799b7
--- /dev/null
+++ b/README.md
@@ -0,0 +1,68 @@
+# Podcast Feed Parser
+
+A PHP library for parsing Podcast XML/RSS feeds.
+
+## Features
+
+* Get channel metadata, such as the title and description
+* Retrieve a list of the episodes
+* Supports iTunes metadata such as categories
+* Get artwork and media files
+* Sort episodes by their publication date, episode number or split into seasons
+
+## Installation
+
+```bash
+composer require lukaswhite/php-feed-parser
+```
+
+## Usage
+
+```php
+use Lukaswhite\PodcastFeedParser\Parser;
+
+$parser = Parser();
+$parser->load('/path/to/feed/feed.rss');
+$podcast = $parser->run();
+```
+
+or
+
+```php
+$parser = Parser();
+$parser->setContent(/** raw content */);
+$podcast = $parser->run();
+```
+
+The `run()` method returns an instance of the `Podcast` class, on which the `getEpisodes()` method returns a collection of the podcast episodes.
+
+## Simple Example
+
+This only shows a limited selection of the available fields; you'll find a [complete list here](https://htmlpreview.github.io/?https://github.com/lukaswhite/podcast-feed-parser/blob/main/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast.xhtml).
+
+```php
+$podcast = $parser->run();
+$id = $db->insert(
+ 'podcasts',
+ [
+ 'title' => $podcast->getTitle(),
+ 'description' => $podcast->getDescription(),
+ 'artwork' => $podcast->getArtwork()->getUri(),
+ ]
+);
+
+foreach($podcast->getEpisodes() as $episode) {
+ $db->insert(
+ 'episodes',
+ [
+ 'podcast_id' => $id,
+ 'guid' => $episode->getGuid(),
+ 'title' => $episode->getTitle(),
+ 'description' => $episode->getDescription(),
+ 'media_uri' => $podcast->getMedia()->getUri(),
+ ]
+ );
+}
+
+return $podcast->getEpisodes()->mostRecent();
+```
\ No newline at end of file
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..1a8463d
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,25 @@
+{
+ "name": "lukaswhite/podcast-feed-parser",
+ "description": "A PHP library for parsing podcast feeds",
+ "type": "library",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Lukas White",
+ "email": "hello@lukaswhite.com"
+ }
+ ],
+ "require": {
+ "simplepie/simplepie": "^1.5",
+ "lukaswhite/itunes-categories": "^0.0.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5",
+ "phpunit/php-code-coverage": "^7.0.7"
+ },
+ "autoload": {
+ "psr-4": {
+ "Lukaswhite\\PodcastFeedParser\\": "src/"
+ }
+ }
+}
diff --git a/docs/html/classes.xhtml b/docs/html/classes.xhtml
new file mode 100644
index 0000000..f15f8e2
--- /dev/null
+++ b/docs/html/classes.xhtml
@@ -0,0 +1,213 @@
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
Classes
+
+
\
+
+
+
+ Name
+ Description
+
+
+
+
+
+
+ Exception
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+
+
+
\Lukaswhite\PodcastFeedParser
+
+
+
+ Name
+ Description
+
+
+
+
+
+
+ Artwork
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+ Category
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+ Episode
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+ Link
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+ Media
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+ Owner
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+ Parser
+
+ Class Parser
+ EMPTY
+
+
+
+
+ Podcast
+
+
+ No description available
+
+ EMPTY
+
+
+
+
+
+
+
\Lukaswhite\PodcastFeedParser\Exceptions
+
+
+
+
\Lukaswhite\PodcastFeedParser\Rawvoice
+
+
+
+ Name
+ Description
+
+
+
+
+
+
+ Subscribe
+
+ Class Subscribe
+ EMPTY
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception.xhtml b/docs/html/classes/Exception.xhtml
new file mode 100644
index 0000000..31eba9c
--- /dev/null
+++ b/docs/html/classes/Exception.xhtml
@@ -0,0 +1,134 @@
+
+
+
+
+ phpDox - Exception
+
+
+
+
+
+
+
+
+
+
+
+
+
+ \ Exception
+
+
+ Synopsis
+ class Exception
+ {
+
+ }
+ Members
+
+
protected
+
+ $code
+ —
+ intThe exception code
+ $file
+ —
+ stringThe filename where the exception was created
+ $line
+ —
+ intThe line where the exception was created
+ $message
+ —
+ stringThe exception message
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/__clone.xhtml b/docs/html/classes/Exception/__clone.xhtml
new file mode 100644
index 0000000..acef321
--- /dev/null
+++ b/docs/html/classes/Exception/__clone.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::__clone
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: __clone
+ Clone the exception
+
+
+ Signature
+
+ function __clone()
+
+
+ Returns
+
+ void
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/__construct.xhtml b/docs/html/classes/Exception/__construct.xhtml
new file mode 100644
index 0000000..f089b2d
--- /dev/null
+++ b/docs/html/classes/Exception/__construct.xhtml
@@ -0,0 +1,110 @@
+
+
+
+
+ phpDox - Exception::__construct
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: __construct
+ Construct the exception
+
+
+ Signature
+
+
public function __construct(string
+ $message,
+ int
+ $code,
+
+ $previous )
+
+
+ Parameters
+
+ $message
+ —
+ string
+
+ $code
+ —
+ int
+
+ $previous
+ —
+
+
+
+ Returns
+
+ void
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/__toString.xhtml b/docs/html/classes/Exception/__toString.xhtml
new file mode 100644
index 0000000..cf00e24
--- /dev/null
+++ b/docs/html/classes/Exception/__toString.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::__toString
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: __toString
+ String representation of the exception
+
+
+ Signature
+
+ public function __toString()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getCode.xhtml b/docs/html/classes/Exception/getCode.xhtml
new file mode 100644
index 0000000..04d3498
--- /dev/null
+++ b/docs/html/classes/Exception/getCode.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getCode
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getCode
+ Gets the Exception code
+
+
+ Signature
+
+ public function getCode()
+
+
+ Returns
+
+ mixed
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getFile.xhtml b/docs/html/classes/Exception/getFile.xhtml
new file mode 100644
index 0000000..dad4249
--- /dev/null
+++ b/docs/html/classes/Exception/getFile.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getFile
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getFile
+ Gets the file in which the exception was created
+
+
+ Signature
+
+ public function getFile()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getLine.xhtml b/docs/html/classes/Exception/getLine.xhtml
new file mode 100644
index 0000000..2a7f333
--- /dev/null
+++ b/docs/html/classes/Exception/getLine.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getLine
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getLine
+ Gets the line in which the exception was created
+
+
+ Signature
+
+ public function getLine()
+
+
+ Returns
+
+ int
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getMessage.xhtml b/docs/html/classes/Exception/getMessage.xhtml
new file mode 100644
index 0000000..3831344
--- /dev/null
+++ b/docs/html/classes/Exception/getMessage.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getMessage
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getMessage
+ Gets the Exception message
+
+
+ Signature
+
+ public function getMessage()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getPrevious.xhtml b/docs/html/classes/Exception/getPrevious.xhtml
new file mode 100644
index 0000000..a421ff7
--- /dev/null
+++ b/docs/html/classes/Exception/getPrevious.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getPrevious
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getPrevious
+ Returns previous Exception
+
+
+ Signature
+
+ public function getPrevious()
+
+
+ Returns
+
+ Throwable
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getTrace.xhtml b/docs/html/classes/Exception/getTrace.xhtml
new file mode 100644
index 0000000..cab17a7
--- /dev/null
+++ b/docs/html/classes/Exception/getTrace.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getTrace
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getTrace
+ Gets the stack trace
+
+
+ Signature
+
+ public function getTrace()
+
+
+ Returns
+
+ array
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Exception/getTraceAsString.xhtml b/docs/html/classes/Exception/getTraceAsString.xhtml
new file mode 100644
index 0000000..7880ca8
--- /dev/null
+++ b/docs/html/classes/Exception/getTraceAsString.xhtml
@@ -0,0 +1,87 @@
+
+
+
+
+ phpDox - Exception::getTraceAsString
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Exception:: getTraceAsString
+ Gets the stack trace as a string
+
+
+ Signature
+
+ public function getTraceAsString()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Artwork.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Artwork.xhtml
new file mode 100644
index 0000000..217a319
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Artwork.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Artwork
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Artwork
+
+
+ Synopsis
+ class Artwork
+ {
// Inherited methods from HasUri public string getUri ()
+ public HasUri setUri ()
+
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category.xhtml
new file mode 100644
index 0000000..c80b9c0
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category.xhtml
@@ -0,0 +1,155 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Category
+
+
+ Synopsis
+ class Category
+ {
// constants const ITUNES = 'itunes'; const GOOGLE_PLAY = 'googleplay';
+
+ }
+ Constants
+
+
+
+ Name
+ Value
+
+
+
+
+ ITUNES
+ 'itunes'
+
+
+ GOOGLE_PLAY
+ 'googleplay'
+
+
+
+ Members
+
+
protected
+
+ $name
+ —
+ string
+ $subCategories
+ —
+ array
+ $type
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/addSubCategory.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/addSubCategory.xhtml
new file mode 100644
index 0000000..91753d6
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/addSubCategory.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category::addSubCategory
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Category:: addSubCategory
+
+
+
+ Signature
+
+
public function addSubCategory(Category
+ $subCategory )
+
+
+ Parameters
+
+ $subCategory
+ —
+ Lukaswhite\PodcastFeedParser\Category
+
+
+ Returns
+
+ Category
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getName.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getName.xhtml
new file mode 100644
index 0000000..1a69240
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getName.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category::getName
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Category:: getName
+
+
+
+ Signature
+
+ public function getName()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getSubCategories.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getSubCategories.xhtml
new file mode 100644
index 0000000..4e76e14
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getSubCategories.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category::getSubCategories
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Category:: getSubCategories
+
+
+
+ Signature
+
+ public function getSubCategories()
+
+
+ Returns
+
+ array
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getType.xhtml
new file mode 100644
index 0000000..7d5e1ba
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/getType.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category::getType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Category:: getType
+
+
+
+ Signature
+
+ public function getType()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/setName.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/setName.xhtml
new file mode 100644
index 0000000..010f904
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/setName.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category::setName
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Category:: setName
+
+
+
+ Signature
+
+ public function setName(string
+ $name )
+
+
+ Parameters
+
+ $name
+ —
+ string
+
+
+ Returns
+
+ Category
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/setType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/setType.xhtml
new file mode 100644
index 0000000..845d425
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Category/setType.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Category::setType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Category:: setType
+
+
+
+ Signature
+
+ public function setType(string
+ $type )
+
+
+ Parameters
+
+ $type
+ —
+ string
+
+
+ Returns
+
+ Category
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode.xhtml
new file mode 100644
index 0000000..59b9e47
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode.xhtml
@@ -0,0 +1,278 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Episode
+
+
+ Synopsis
+ class Episode
+ {
// Inherited methods from HasLink public string getLink ()
+ public HasLink setLink ()
+
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getEpisodeNumber.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getEpisodeNumber.xhtml
new file mode 100644
index 0000000..f0158f9
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getEpisodeNumber.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::getEpisodeNumber
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: getEpisodeNumber
+
+
+
+ Signature
+
+ public function getEpisodeNumber()
+
+
+ Returns
+
+ int
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getGuid.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getGuid.xhtml
new file mode 100644
index 0000000..779363e
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getGuid.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::getGuid
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: getGuid
+
+
+
+ Signature
+
+ public function getGuid()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getMedia.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getMedia.xhtml
new file mode 100644
index 0000000..53aa3d7
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getMedia.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::getMedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: getMedia
+
+
+
+ Signature
+
+ public function getMedia()
+
+
+ Returns
+
+ Media
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getPublishedDate.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getPublishedDate.xhtml
new file mode 100644
index 0000000..54a14c1
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getPublishedDate.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::getPublishedDate
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: getPublishedDate
+
+
+
+ Signature
+
+ public function getPublishedDate()
+
+
+ Returns
+
+ DateTime
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getSeason.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getSeason.xhtml
new file mode 100644
index 0000000..73b4b78
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getSeason.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::getSeason
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: getSeason
+
+
+
+ Signature
+
+ public function getSeason()
+
+
+ Returns
+
+ int
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getType.xhtml
new file mode 100644
index 0000000..69b5924
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/getType.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::getType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: getType
+
+
+
+ Signature
+
+ public function getType()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setEpisodeNumber.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setEpisodeNumber.xhtml
new file mode 100644
index 0000000..5ec660e
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setEpisodeNumber.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::setEpisodeNumber
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: setEpisodeNumber
+
+
+
+ Signature
+
+ public function setEpisodeNumber(int
+ $episodeNumber )
+
+
+ Parameters
+
+ $episodeNumber
+ —
+ int
+
+
+ Returns
+
+ Episode
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setGuid.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setGuid.xhtml
new file mode 100644
index 0000000..34ba2d8
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setGuid.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::setGuid
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: setGuid
+
+
+
+ Signature
+
+ public function setGuid(string
+ $guid )
+
+
+ Parameters
+
+ $guid
+ —
+ string
+
+
+ Returns
+
+ Episode
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setMedia.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setMedia.xhtml
new file mode 100644
index 0000000..2285ec0
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setMedia.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::setMedia
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: setMedia
+
+
+
+ Signature
+
+
public function setMedia(Media
+ $media )
+
+
+ Parameters
+
+ $media
+ —
+ object
+
+
+ Returns
+
+ Episode
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setPublishedDate.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setPublishedDate.xhtml
new file mode 100644
index 0000000..cff1282
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setPublishedDate.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::setPublishedDate
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: setPublishedDate
+
+
+
+ Signature
+
+
public function setPublishedDate(DateTime
+ $publishedDate )
+
+
+ Parameters
+
+ $publishedDate
+ —
+ object
+
+
+ Returns
+
+ Episode
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setSeason.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setSeason.xhtml
new file mode 100644
index 0000000..617b860
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setSeason.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::setSeason
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: setSeason
+
+
+
+ Signature
+
+ public function setSeason(int
+ $season )
+
+
+ Parameters
+
+ $season
+ —
+ int
+
+
+ Returns
+
+ Episode
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setType.xhtml
new file mode 100644
index 0000000..5277831
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Episode/setType.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Episode::setType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Episode:: setType
+
+
+
+ Signature
+
+ public function setType(string
+ $type )
+
+
+ Parameters
+
+ $type
+ —
+ string
+
+
+ Returns
+
+ Episode
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Exceptions_FileNotFoundException.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Exceptions_FileNotFoundException.xhtml
new file mode 100644
index 0000000..75d90e9
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Exceptions_FileNotFoundException.xhtml
@@ -0,0 +1,151 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Exceptions\FileNotFoundException
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Exceptions\ FileNotFoundException
+
+
+ Synopsis
+ class FileNotFoundException
+ extends
Exception
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $code
+ —
+ intThe exception code
+ $file
+ —
+ stringThe filename where the exception was created
+ $line
+ —
+ intThe line where the exception was created
+ $message
+ —
+ stringThe exception message
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Exceptions_InvalidXmlException.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Exceptions_InvalidXmlException.xhtml
new file mode 100644
index 0000000..728454c
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Exceptions_InvalidXmlException.xhtml
@@ -0,0 +1,151 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Exceptions\InvalidXmlException
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Exceptions\ InvalidXmlException
+
+
+ Synopsis
+ class InvalidXmlException
+ extends
Exception
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $code
+ —
+ intThe exception code
+ $file
+ —
+ stringThe filename where the exception was created
+ $line
+ —
+ intThe line where the exception was created
+ $message
+ —
+ stringThe exception message
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link.xhtml
new file mode 100644
index 0000000..f188d07
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link.xhtml
@@ -0,0 +1,131 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Link
+
+
+ Synopsis
+
+ Members
+
+
protected
+
+ $rel
+ —
+ string
+ $type
+ —
+ string
+ $uri
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/__construct.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/__construct.xhtml
new file mode 100644
index 0000000..1f0547f
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/__construct.xhtml
@@ -0,0 +1,93 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link::__construct
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Link:: __construct
+ Link constructor.
+
+
+ Signature
+
+ public function __construct(string
+ $uri )
+
+
+ Parameters
+
+ $uri
+ —
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getRel.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getRel.xhtml
new file mode 100644
index 0000000..9db7a01
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getRel.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link::getRel
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Link:: getRel
+
+
+
+ Signature
+
+ public function getRel()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getType.xhtml
new file mode 100644
index 0000000..a66d03d
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getType.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link::getType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Link:: getType
+
+
+
+ Signature
+
+ public function getType()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getUri.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getUri.xhtml
new file mode 100644
index 0000000..b0fac3d
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/getUri.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link::getUri
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Link:: getUri
+
+
+
+ Signature
+
+ public function getUri()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/setRel.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/setRel.xhtml
new file mode 100644
index 0000000..585bb5b
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/setRel.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link::setRel
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Link:: setRel
+
+
+
+ Signature
+
+ public function setRel(string
+ $rel )
+
+
+ Parameters
+
+ $rel
+ —
+ string
+
+
+ Returns
+
+ Link
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/setType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/setType.xhtml
new file mode 100644
index 0000000..46249f9
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Link/setType.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Link::setType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Link:: setType
+
+
+
+ Signature
+
+ public function setType(string
+ $type )
+
+
+ Parameters
+
+ $type
+ —
+ string
+
+
+ Returns
+
+ Link
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Media.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media.xhtml
new file mode 100644
index 0000000..5876298
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media.xhtml
@@ -0,0 +1,147 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Media
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Media
+
+
+ Synopsis
+ class Media
+ {
// Inherited methods from HasUri public string getUri ()
+ public HasUri setUri ()
+
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+
+ $length
+
+
+ $mimeType
+
+ $uri
+ —
+ string
+
+
+ Methods
+
+
public
+
+
+
public
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/getLength.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/getLength.xhtml
new file mode 100644
index 0000000..bf479be
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/getLength.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Media::getLength
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Media:: getLength
+
+
+
+ Signature
+
+ public function getLength()
+
+
+ Returns
+
+ mixed
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/getMimeType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/getMimeType.xhtml
new file mode 100644
index 0000000..75b5225
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/getMimeType.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Media::getMimeType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Media:: getMimeType
+
+
+
+ Signature
+
+ public function getMimeType()
+
+
+ Returns
+
+ mixed
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/setLength.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/setLength.xhtml
new file mode 100644
index 0000000..0fc9a69
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/setLength.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Media::setLength
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Media:: setLength
+
+
+
+ Signature
+
+ public function setLength(mixed
+ $length )
+
+
+ Parameters
+
+ $length
+ —
+ mixed
+
+
+ Returns
+
+ Media
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/setMimeType.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/setMimeType.xhtml
new file mode 100644
index 0000000..6191b22
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Media/setMimeType.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Media::setMimeType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Media:: setMimeType
+
+
+
+ Signature
+
+ public function setMimeType(mixed
+ $mimeType )
+
+
+ Parameters
+
+ $mimeType
+ —
+ mixed
+
+
+ Returns
+
+ Media
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner.xhtml
new file mode 100644
index 0000000..1dcec85
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Owner
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Owner
+
+
+ Synopsis
+
+ Members
+
+
protected
+
+ $email
+ —
+ string
+ $name
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/getEmail.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/getEmail.xhtml
new file mode 100644
index 0000000..543602b
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/getEmail.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Owner::getEmail
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Owner:: getEmail
+
+
+
+ Signature
+
+ public function getEmail()
+
+
+ Returns
+
+ mixed
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/getName.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/getName.xhtml
new file mode 100644
index 0000000..7944571
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/getName.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Owner::getName
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Owner:: getName
+
+
+
+ Signature
+
+ public function getName()
+
+
+ Returns
+
+ mixed
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/setEmail.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/setEmail.xhtml
new file mode 100644
index 0000000..70c6ef2
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/setEmail.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Owner::setEmail
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Owner:: setEmail
+
+
+
+ Signature
+
+ public function setEmail(mixed
+ $email )
+
+
+ Parameters
+
+ $email
+ —
+ mixed
+
+
+ Returns
+
+ Owner
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/setName.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/setName.xhtml
new file mode 100644
index 0000000..5b54ff3
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Owner/setName.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Owner::setName
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Owner:: setName
+
+
+
+ Signature
+
+ public function setName(mixed
+ $name )
+
+
+ Parameters
+
+ $name
+ —
+ mixed
+
+
+ Returns
+
+ Owner
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser.xhtml
new file mode 100644
index 0000000..270664e
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser.xhtml
@@ -0,0 +1,181 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Parser
+ Class Parser
+ Parse a podcast feed.
+
+ Synopsis
+ class Parser
+ {
// constants const NS_ITUNES = 'http://www.itunes.com/dtds/podcast-1.0.dtd'; const NS_GOOGLE_PLAY = 'http://www.google.com/schemas/play-podcasts/1.0'; const NS_ATOM = 'http://www.w3.org/2005/Atom'; const NS_SYNDICATION = 'http://purl.org/rss/1.0/modules/syndication/'; const NS_RAWVOICE = 'http://www.rawvoice.com/rawvoiceRssModule/'; // members protected $content ;
+ protected SimplePie $sp ;
+
+
+ }
+ Constants
+
+
+
+ Name
+ Value
+
+
+
+
+ NS_ITUNES
+ 'http://www.itunes.com/dtds/podcast-1.0.dtd'
+
+
+ NS_GOOGLE_PLAY
+ 'http://www.google.com/schemas/play-podcasts/1.0'
+
+
+ NS_ATOM
+ 'http://www.w3.org/2005/Atom'
+
+
+ NS_SYNDICATION
+ 'http://purl.org/rss/1.0/modules/syndication/'
+
+
+ NS_RAWVOICE
+ 'http://www.rawvoice.com/rawvoiceRssModule/'
+
+
+
+ Members
+
+
protected
+
+ $content
+ —
+ stringThe raw feed content
+ $sp
+ —
+ \SimplePie
+
+
+ Methods
+
+
protected
+
+
public
+
+
+ load()
+
+ run()
+ — Run the parser and return an object that represents the parsed podcast.
+
+ setContent()
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/getFile.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/getFile.xhtml
new file mode 100644
index 0000000..b6036e0
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/getFile.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::getFile
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: getFile
+
+
+
+ Signature
+
+ Parameters
+
+ $item
+ —
+ \SimplePie_Item
+
+
+ Returns
+
+ Media
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/getSingleNamespacedChannelItem.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/getSingleNamespacedChannelItem.xhtml
new file mode 100644
index 0000000..3af518d
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/getSingleNamespacedChannelItem.xhtml
@@ -0,0 +1,113 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::getSingleNamespacedChannelItem
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: getSingleNamespacedChannelItem
+
+
+
+ Signature
+
+ protected function getSingleNamespacedChannelItem(
+ $namespace,
+
+ $name,
+ [null
+ $item = NULL] )
+
+
+ Parameters
+
+ $namespace
+ —
+
+
+ $name
+ —
+
+
+ $item
+ —
+ null
+
+
+ Returns
+
+ mixed
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/load.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/load.xhtml
new file mode 100644
index 0000000..c8daa95
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/load.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::load
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: load
+
+
+
+ Signature
+
+ public function load(string
+ $filepath )
+
+
+ Parameters
+
+ $filepath
+ —
+ string
+
+
+ Returns
+
+ Parser
+
+
+
+ Errors/Exceptions
+
+
+
+ FileNotFoundException
+
+
+
+
+
+ InvalidXmlException
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseAtomTags.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseAtomTags.xhtml
new file mode 100644
index 0000000..5ffb41b
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseAtomTags.xhtml
@@ -0,0 +1,93 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::parseAtomTags
+
+
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseEpisodeItem.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseEpisodeItem.xhtml
new file mode 100644
index 0000000..ef78aad
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseEpisodeItem.xhtml
@@ -0,0 +1,114 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::parseEpisodeItem
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: parseEpisodeItem
+
+
+
+ Signature
+
+ Parameters
+
+ $item
+ —
+ \SimplePie_Item
+
+
+ Returns
+
+ Episode
+
+
+
+ Errors/Exceptions
+
+
+
+ Exception
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseRawvoiceFields.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseRawvoiceFields.xhtml
new file mode 100644
index 0000000..abc4fb9
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseRawvoiceFields.xhtml
@@ -0,0 +1,105 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::parseRawvoiceFields
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: parseRawvoiceFields
+
+
+
+ Signature
+
+
protected function parseRawvoiceFields(Podcast
+ $podcast )
+
+
+ Parameters
+
+ $podcast
+ —
+ Lukaswhite\PodcastFeedParser\Podcast
+
+
+ Errors/Exceptions
+
+
+
+ Exception
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseRssTags.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseRssTags.xhtml
new file mode 100644
index 0000000..ad98f21
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseRssTags.xhtml
@@ -0,0 +1,105 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::parseRssTags
+
+
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseSyndicationFields.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseSyndicationFields.xhtml
new file mode 100644
index 0000000..5316243
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/parseSyndicationFields.xhtml
@@ -0,0 +1,105 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::parseSyndicationFields
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: parseSyndicationFields
+
+
+
+ Signature
+
+
protected function parseSyndicationFields(Podcast
+ $podcast )
+
+
+ Parameters
+
+ $podcast
+ —
+ Lukaswhite\PodcastFeedParser\Podcast
+
+
+ Errors/Exceptions
+
+
+
+ Exception
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/run.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/run.xhtml
new file mode 100644
index 0000000..7f73664
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/run.xhtml
@@ -0,0 +1,103 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::run
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: run
+ Run the parser and return an object that represents the parsed podcast.
+
+
+ Signature
+
+ public function run()
+
+
+ Returns
+
+ Podcast
+
+
+
+ Errors/Exceptions
+
+
+
+ Exception
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/setContent.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/setContent.xhtml
new file mode 100644
index 0000000..4c3b072
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Parser/setContent.xhtml
@@ -0,0 +1,114 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Parser::setContent
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Parser:: setContent
+
+
+
+ Signature
+
+ public function setContent(string
+ $content )
+
+
+ Parameters
+
+ $content
+ —
+ string
+
+
+ Returns
+
+ $this
+
+
+
+ Errors/Exceptions
+
+
+
+ InvalidXmlException
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast.xhtml
new file mode 100644
index 0000000..26a5c6d
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast.xhtml
@@ -0,0 +1,501 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\ Podcast
+
+
+ Synopsis
+ class Podcast
+ implements
+
HasArtwork
+ {
// constants const EPISODIC = 'episodic'; const SERIAL = 'serial'; // Inherited methods from HasLink public string getLink ()
+ public HasLink setLink ()
+
+
+ }
+ Hierarchy
+
+
Uses
+
+
Implements
+
+
+ Constants
+
+
+
+ Name
+ Value
+
+
+
+
+ EPISODIC
+ 'episodic'
+
+
+ SERIAL
+ 'serial'
+
+
+
+ Members
+
+
protected
+
+ $artwork
+ —
+ Lukaswhite\PodcastFeedParser\Artwork
+ $atomLinks
+ —
+ array
+ $author
+ —
+ string
+ $categories
+ —
+ array
+ $copyright
+ —
+ string
+ $description
+ —
+ string
+ $episodes
+ —
+ array
+ $explicit
+ —
+ string
+ $generator
+ —
+ string
+ $language
+ —
+ string
+ $lastBuildDate
+ —
+ \DateTime
+ $link
+ —
+ string
+ $managingEditor
+ —
+ string
+ $newFeedUrl
+ —
+ string
+ $owner
+ —
+ Lukaswhite\PodcastFeedParser\Owner
+ $rawvoiceFrequency
+ —
+ string
+ $rawvoiceLocation
+ —
+ string
+ $rawvoiceRating
+ —
+ string
+ $rawvoiceSubscribe
+ —
+ Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe
+ $subtitle
+ —
+ string
+ $title
+ —
+ string
+ $type
+ —
+ string
+ $updateBase
+ —
+ \DateTime
+ $updateFrequency
+ —
+ int
+ $updatePeriod
+ —
+ string
+
+
+ Methods
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
public
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/addEpisode.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/addEpisode.xhtml
new file mode 100644
index 0000000..2191b81
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/addEpisode.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::addEpisode
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: addEpisode
+
+
+
+ Signature
+
+
public function addEpisode(Episode
+ $episode )
+
+
+ Parameters
+
+ $episode
+ —
+ Lukaswhite\PodcastFeedParser\Episode
+
+
+ Returns
+
+ $this
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getAuthor.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getAuthor.xhtml
new file mode 100644
index 0000000..f9a777f
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getAuthor.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::getAuthor
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: getAuthor
+
+
+
+ Signature
+
+ public function getAuthor()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getCopyright.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getCopyright.xhtml
new file mode 100644
index 0000000..b2fe5c5
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getCopyright.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::getCopyright
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: getCopyright
+
+
+
+ Signature
+
+ public function getCopyright()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getEpisodes.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getEpisodes.xhtml
new file mode 100644
index 0000000..c5523b8
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getEpisodes.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::getEpisodes
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: getEpisodes
+
+
+
+ Signature
+
+ public function getEpisodes()
+
+
+ Returns
+
+ array
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getLanguage.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getLanguage.xhtml
new file mode 100644
index 0000000..cef1ef3
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getLanguage.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::getLanguage
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: getLanguage
+
+
+
+ Signature
+
+ public function getLanguage()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getManagingEditor.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getManagingEditor.xhtml
new file mode 100644
index 0000000..9812b74
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/getManagingEditor.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::getManagingEditor
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: getManagingEditor
+
+
+
+ Signature
+
+ public function getManagingEditor()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setAuthor.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setAuthor.xhtml
new file mode 100644
index 0000000..f060258
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setAuthor.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::setAuthor
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: setAuthor
+
+
+
+ Signature
+
+ public function setAuthor(string
+ $author )
+
+
+ Parameters
+
+ $author
+ —
+ string
+
+
+ Returns
+
+ Podcast
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setCopyright.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setCopyright.xhtml
new file mode 100644
index 0000000..8691a70
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setCopyright.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::setCopyright
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: setCopyright
+
+
+
+ Signature
+
+ public function setCopyright(string
+ $copyright )
+
+
+ Parameters
+
+ $copyright
+ —
+ string
+
+
+ Returns
+
+ Podcast
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setLanguage.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setLanguage.xhtml
new file mode 100644
index 0000000..2fdd4a9
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setLanguage.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::setLanguage
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: setLanguage
+
+
+
+ Signature
+
+ public function setLanguage(string
+ $language )
+
+
+ Parameters
+
+ $language
+ —
+ string
+
+
+ Returns
+
+ Podcast
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setManagingEditor.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setManagingEditor.xhtml
new file mode 100644
index 0000000..edd27c7
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Podcast/setManagingEditor.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Podcast::setManagingEditor
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Podcast:: setManagingEditor
+
+
+
+ Signature
+
+ public function setManagingEditor(string
+ $managingEditor )
+
+
+ Parameters
+
+ $managingEditor
+ —
+ string
+
+
+ Returns
+
+ Podcast
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe.xhtml
new file mode 100644
index 0000000..eb202dd
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe.xhtml
@@ -0,0 +1,156 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Rawvoice\ Subscribe
+ Class Subscribe
+
+
+ Synopsis
+ class Subscribe
+ {
// constants const FEED = 'feed'; const ITUNES = 'itunes'; const GOOGLEPLAY = 'googleplay'; const BLUBRRY = 'blubrry'; const HTML = 'html'; const STITCHER = 'stitcher'; const TUNEIN = 'tunein'; // members protected array $links =
+ ;
+
+
+ }
+ Constants
+
+
+
+ Name
+ Value
+
+
+
+
+ FEED
+ 'feed'
+
+
+ ITUNES
+ 'itunes'
+
+
+ GOOGLEPLAY
+ 'googleplay'
+
+
+ BLUBRRY
+ 'blubrry'
+
+
+ HTML
+ 'html'
+
+
+ STITCHER
+ 'stitcher'
+
+
+ TUNEIN
+ 'tunein'
+
+
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/addLink.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/addLink.xhtml
new file mode 100644
index 0000000..6a379c8
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/addLink.xhtml
@@ -0,0 +1,108 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::addLink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe:: addLink
+
+
+
+ Signature
+
+ public function addLink(string
+ $platform,
+ string
+ $link )
+
+
+ Parameters
+
+ $platform
+ —
+ string
+
+ $link
+ —
+ string
+
+
+ Returns
+
+ Subscribe
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/getLink.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/getLink.xhtml
new file mode 100644
index 0000000..cc072f1
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/getLink.xhtml
@@ -0,0 +1,101 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::getLink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe:: getLink
+
+
+
+ Signature
+
+ public function getLink(string
+ $platform )
+
+
+ Parameters
+
+ $platform
+ —
+ string
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/getLinks.xhtml b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/getLinks.xhtml
new file mode 100644
index 0000000..030a411
--- /dev/null
+++ b/docs/html/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe/getLinks.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::getLinks
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe:: getLinks
+
+
+
+ Signature
+
+ public function getLinks()
+
+
+ Returns
+
+ array
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/css/SourceSansPro-Regular.ttf b/docs/html/css/SourceSansPro-Regular.ttf
new file mode 100644
index 0000000..278ad8a
Binary files /dev/null and b/docs/html/css/SourceSansPro-Regular.ttf differ
diff --git a/docs/html/css/source.css b/docs/html/css/source.css
new file mode 100644
index 0000000..3628eab
--- /dev/null
+++ b/docs/html/css/source.css
@@ -0,0 +1,184 @@
+table.source {
+ border:0;
+ padding:0;
+ margin:0;
+ border-collapse: collapse;
+}
+
+table.source td {
+ border:1px solid #ccc;
+ vertical-align: top;
+ font-size: 1em;
+ line-height: 1.4em;
+ font-family: monospace;
+}
+
+table.source td.no a {
+ display:block;
+ color: #ccc;
+ text-align: right;
+ padding: 0 8px;
+ text-decoration: none;
+}
+
+table.source pre {
+ padding:0;
+ margin:0;
+}
+
+table.source pre span {
+ display:inline;
+}
+
+table.source td.line div {
+ padding:80px 0 0 0;
+ margin:-80px 0 0 0;
+ cursor: text;
+}
+
+table.source td.line pre:hover {
+ background-color: #eee;
+}
+
+table.source td.line div:target pre {
+ background-color: #ffffc8;
+}
+
+.token {
+ color: #0000BB;
+}
+
+.T_COMMENT, .T_DOC_COMMENT {
+ color: #FF8000;
+}
+
+.T_ABSTRACT,
+.T_ARRAY,
+.T_AS,
+.T_BREAK,
+.T_CALLABLE,
+.T_CASE,
+.T_CATCH,
+.T_CLASS,
+.T_CLONE,
+.T_CONTINUE,
+.T_DEFAULT,
+.T_ECHO,
+.T_ELSE,
+.T_ELSEIF,
+.T_EMPTY,
+.T_ENDDECLARE,
+.T_ENDFOR,
+.T_ENDFOREACH,
+.T_ENDIF,
+.T_ENDSWITCH,
+.T_ENDWHILE,
+.T_EXIT,
+.T_EXTENDS,
+.T_FINAL,
+.T_FINALLY,
+.T_FOREACH,
+.T_FUNCTION,
+.T_GLOBAL,
+.T_IF,
+.T_IMPLEMENTS,
+.T_INCLUDE,
+.T_INCLUDE_ONCE,
+.T_INSTANCEOF,
+.T_INSTEADOF,
+.T_INTERFACE,
+.T_ISSET,
+.T_LOGICAL_AND,
+.T_LOGICAL_OR,
+.T_LOGICAL_XOR,
+.T_NAMESPACE,
+.T_NEW,
+.T_PRIVATE,
+.T_PROTECTED,
+.T_PUBLIC,
+.T_REQUIRE,
+.T_REQUIRE_ONCE,
+.T_RETURN,
+.T_STATIC,
+.T_THROW,
+.T_TRAIT,
+.T_TRY,
+.T_UNSET,
+.T_USE,
+.T_VAR,
+.T_WHILE,
+.T_YIELD,
+.T_PHPDOX_OPEN_BRACKET,
+.T_PHPDOX_CLOSE_BRACKET,
+.T_PHPDOX_OPEN_SQUARE,
+.T_PHPDOX_CLOSE_SQUARE,
+.T_PHPDOX_OPEN_CURLY,
+.T_PHPDOX_CLOSE_CURLY,
+.T_PHPDOX_SEMICOLON,
+.T_PHPDOX_DOT,
+.T_PHPDOX_COMMA,
+.T_PHPDOX_EQUAL,
+.T_PHPDOX_LT,
+.T_PHPDOX_GT,
+.T_PHPDOX_PLUS,
+.T_PHPDOX_MINUS,
+.T_PHPDOX_MULT,
+.T_PHPDOX_DIV,
+.T_PHPDOX_QUESTION_MARK,
+.T_PHPDOX_EXCLAMATION_MARK,
+.T_PHPDOX_COLON,
+.T_PHPDOX_DOUBLE_QUOTES,
+.T_PHPDOX_AT,
+.T_PHPDOX_AMPERSAND,
+.T_PHPDOX_PERCENT,
+.T_PHPDOX_PIPE,
+.T_PHPDOX_DOLLAR,
+.T_PHPDOX_CARET,
+.T_PHPDOX_TILDE,
+.T_PHPDOX_BACKTICK {
+ color: #007700;
+}
+
+.T_CONSTANT_ENCAPSED_STRING, .T_ENCAPSED_AND_WHITESPACE {
+ color: #DD0000;
+}
+
+.covered {
+ background-color: rgba(5, 238, 25, 0.13);
+}
+
+a.covered:hover + div {
+ left:90px;
+}
+
+.coverage_details {
+ position: absolute;
+ left:-10000px;
+ margin:-1.4em 0 0 0;
+ background-color: #eee;
+ box-shadow: 5px 5px 10px #888;
+ z-index: 1;
+ padding:1em;
+}
+
+.coverage_details span {
+ font-weight: bold;
+}
+
+.coverage_details ul {
+ margin:0;
+ padding:1em;
+}
+
+.coverage_details:before {
+ position: absolute;
+ content:"";
+ width: 12px;
+ height: 12px;
+ top: 3px;
+ left: -6px;
+ border:0;
+ background-color: #eee;
+ transform: rotate(45deg);
+ z-index: -1;
+}
diff --git a/docs/html/css/style.css b/docs/html/css/style.css
new file mode 100644
index 0000000..d051608
--- /dev/null
+++ b/docs/html/css/style.css
@@ -0,0 +1,447 @@
+@font-face {
+ font-family: 'Source Sans Pro';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(SourceSansPro-Regular.ttf) format('truetype');
+}
+
+html {
+ background-color: #888888;
+}
+
+body {
+ background-color: #ffffff;
+ font-family: 'Source Sans Pro', sans-serif;
+ font-size: 1em;
+ line-height: 1.5;
+ padding-left: 0;
+ padding-right: 0;
+ padding-bottom: 0;
+ margin: 0;
+}
+
+a {
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+h1 {
+ font-size: 2em;
+ padding:3px;
+ margin:0;
+}
+
+h2 {
+ font-size: 1em;
+ padding:3px;
+ margin:0;
+}
+
+h3 {
+ font-size: 0.9em;
+ padding:3px;
+ margin:0;
+}
+
+.topnav {
+ position: fixed;
+ display:block;
+ right: 0;
+ left: 0;
+ top:0;
+ z-index: 1337;
+ margin-bottom: 0;
+ border-bottom: 0.25em solid rgba(255,147,30,0.8);
+ background-color: rgba(238,238,238,0.8);
+ padding:0.25em;
+}
+
+.logo {
+ font-style: italic;
+ margin-right:1.5em;
+}
+
+.logo span {
+ position: relative;
+ top:-5px;
+ left:10px;
+ color: rgba(255,147,30,1);
+}
+
+.topnav ul {
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ width: auto;
+ position: relative;
+ display: block;
+ float:left;
+}
+.topnav li {
+ display: block;
+ float: left;
+ margin: 0;
+ padding: 0.5em;
+}
+
+.topnav li.separator {
+ margin-left:1.5em;
+ margin-right:1.5em;
+}
+
+.topnav li a {
+ display: block;
+ float: left;
+ color: #000000;
+ font-weight: bold;
+}
+
+.topnav li a:hover {
+ color: #555555;
+}
+
+#mainstage {
+ padding: 3em 0 0 1em;
+ clear: both;
+}
+
+#index {
+ padding: 3em 0 0 1em;
+ background-color: #888888;
+ color: #fff;
+ margin:0;
+ min-height: 14em;
+}
+
+.styled #index {
+ background: rgba(0, 0, 0, 0) none repeat scroll 0 0;
+ color: #000;
+ margin: 0;
+ min-height: 0;
+ padding: 0;
+}
+
+#index h1 {
+ text-shadow: 0 -1px 0 #555555;
+}
+
+#index p {
+ font-size: 0.9em;
+}
+
+#index div {
+ float:left;
+}
+
+#projectinfo {
+ padding-top:1em;
+ width:47em;
+}
+
+#buildinfo {
+ float:right;
+ padding:1em;
+ min-height: 10em;
+ background-color: #aaaaaa;
+}
+
+#buildinfo h3 {
+ font-size: 1em;
+ margin:0;
+}
+
+#buildinfo p {
+ font-size: 0.7em;
+ padding:0 0 1em 0;
+ margin:0;
+ max-width: 19em;
+}
+
+.column {
+ float: left;
+}
+
+.indent {
+ text-indent: 1em;
+}
+
+.indent2 {
+ text-indent: 2em;
+}
+
+.nummeric {
+ text-align: right;
+}
+
+.nummeric a {
+ display: block;
+ background-color: #CCD;
+ padding: 0 0.5em;
+}
+
+.nummeric a:hover, .nummeric a:focus, .nummeric a:active {
+ background-color: #DDE;
+ outline: dotted 2px #AAB;
+}
+
+.nummeric a:hover {
+ outline-style: solid;
+}
+
+.nummeric a:active {
+ outline: solid 2px #667;
+}
+
+.percent {
+ text-align: right;
+ width:5em;
+}
+
+.wrapped {
+ white-space: pre-wrap;
+ white-space: -moz-pre-wrap;
+ white-space: -o-pre-wrap;
+ word-wrap: break-word;
+}
+
+.unavailable {
+ border:1px dotted rgba(128, 36, 32, 0.10);
+ background-color: rgba(230, 10, 10, 0.05);
+ color: rgba(128, 36, 32, 0.20);
+ margin:0 1em 1em 0;
+ padding: 2px;
+}
+
+.unavailable p {
+ margin: 0.2em;
+ padding: 0;
+}
+
+.container {
+ margin:0 2em 1em 0;
+}
+
+.box {
+ padding:1em;
+ margin:1em 1em 2em 0;
+ border: 1px solid #cccccc;
+ font-size: 1em;
+ color: #888888;
+ background-color: #eeeeee;
+}
+
+.styled {
+ font-size: 1em;
+ background-color: #efefef;
+ border-top: 2px solid rgba(255,147,30,1);
+ margin:0;
+ padding: 1em 2em;
+}
+
+ul.none {
+ list-style-type: none;
+}
+
+ul.styled {
+ list-style-type: disc;
+}
+
+ul.members li {
+ margin-bottom: 0.5em;
+}
+
+.styled h4 {
+ padding:0;
+ margin:0;
+ border-bottom: 1px solid #cccccc;
+}
+
+.synopsis {
+ padding:1em;
+ background-color: #efefef;
+ border-top: 2px solid rgba(255,147,30,1);
+ font-family: "Courier New", Courier, monospace;
+ width:50em;
+}
+
+table.overview {
+ width:30em;
+}
+
+table.styled {
+ font-size: 1em;
+ border-collapse: collapse;
+ border-spacing: 0;
+ background-color: #efefef;
+ border-top: 2px solid rgba(255,147,30,1);
+ border-bottom: 1px solid rgba(255,147,30,1);
+ margin-bottom: 1em;
+}
+
+table.styled thead {
+ font-weight: normal;
+ font-size: 0.9em;
+}
+
+table.styled thead tr {
+ border-bottom: 1px solid #aaaaaa;
+}
+
+table.styled th {
+ text-align: left;
+ padding:5px;
+ color:#888;
+}
+
+table.styled tr {
+ border-bottom: 1px solid #dddddd;
+}
+
+table.styled td {
+ padding:5px;
+ font-size: 0.9em;
+}
+
+td.line {
+ min-width: 4em;
+}
+
+dl.styled {
+ font-size: 0.9em;
+}
+
+ul.history {
+ list-style-type: none;
+}
+
+ul.history li div {
+ padding: 5px;
+ margin: 0;
+ border-top: 1px solid #777777;
+ border-bottom: 1px solid #777777;
+ background-color: #ffffff;
+ font-family: monospace;
+}
+
+ul.history li p {
+ padding: 0;
+ margin: 0;
+ font-size: 0.9em;
+}
+
+.breadcrumb {
+ margin:0;
+ padding:0;
+ font-size: 0.9em;
+}
+
+ul.breadcrumb li {
+ display: inline-block;
+}
+
+ul.breadcrumb li.separator:before {
+ content: '»';
+ padding-left:0.5em;
+ padding-right:0.5em;
+}
+
+nav.box {
+ font-size: 1.2em;
+ padding: 1em;
+ margin: 0 1em 1em 0;
+ min-width:10em;
+ float:right;
+}
+
+nav.box ul {
+ list-style: none outside none;
+ margin: 0;
+ padding: 0;
+}
+
+nav.box ul li {
+ border-bottom: 1px solid #dddddd;
+ font-size: 0.8em;
+ margin-bottom: 0.2em;
+}
+
+.styled {
+ width:50em;
+}
+
+#mainstage section {
+ float: left;
+ margin: 0 0 2em 1em;
+ padding: 0;
+ font-size: 1em;
+ max-width: 50em;
+}
+
+#mainstage section h1 {
+ margin: 0;
+ padding: 0;
+}
+
+#mainstage section h2 {
+ margin: 0;
+ padding: 2em 0 0 0;
+}
+
+section table {
+ width:100%;
+}
+
+footer {
+ display:block;
+ clear: both;
+ overflow: auto;
+ border-top: 0.25em solid rgba(255,147,30,1);
+ background-color: #888888;
+ margin:0;
+}
+
+footer span {
+ color:#ffffff;
+ padding: 0 0.75em;
+ font-size: 0.8em;
+}
+
+/* enrichment */
+.testresult-PASSED {
+ color:darkgreen;
+}
+
+.testresult-EMPTY {
+ color: rgba(0, 100, 0, 0.20);
+}
+
+.testresult-FAILED {
+ color:darkred;
+}
+
+.testresult-SKIPPED {
+ color: #afafaf;
+}
+
+.path {
+ margin:0;
+ padding:0;
+ font-size: 0.9em;
+}
+
+ul.path li {
+ display: inline-block;
+}
+
+ul.path li.separator:before {
+ content: '/';
+ /*padding-left:0.5em;
+ padding-right:0.5em;*/
+}
+
+.directory tr td:first-of-type {
+ padding-left:1em;
+}
diff --git a/docs/html/index.xhtml b/docs/html/index.xhtml
new file mode 100644
index 0000000..ca94ddd
--- /dev/null
+++ b/docs/html/index.xhtml
@@ -0,0 +1,302 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
+
Podcast Feed Parser
+
Software Documentation
+
Welcome to the Software Documentation homepage.
+
+
+
Build
+
Fri, 04 Dec 2020 01:57:01 +0000
+
VCS Info
+
+ tag:
+ branch:
+
Used Enrichers
+
build, phploc
+
+
+
+
+
+
Structure
+
+
+ Namespaces
+
+
+
+
+ Interfaces
+
+
+
+
+ Traits
+
+
+
+
+ Classes
+
+
+
+
+ Abstract Classes
+
+ (0%)
+
+
+ Concrete Classes
+
+ (0%)
+
+
+ Methods
+
+
+
+
+ Scope
+
+
+
+
+ Non-Static Methods
+
+ (0%)
+
+
+ Static Methods
+
+ (0%)
+
+
+ Visibility
+
+
+
+
+ Public Method
+
+ (0%)
+
+
+ Non-Public Methods
+
+ (0%)
+
+
+ Functions
+
+
+
+
+ Named Functions
+
+ (0%)
+
+
+ Anonymous Functions
+
+ (0%)
+
+
+ Constants
+
+
+
+
+ Global Constants
+
+ (0%)
+
+
+ Class Constants
+
+ (0%)
+
+
+
+
+
Tests
+
+
+ Classes
+
+
+
+
+ Methods
+
+
+
+
+
+
+
+
+
Size
+
+
+ Lines of Code (LOC)
+
+
+
+
+ Comment Lines of Code (CLOC)
+
+ (0%)
+
+
+ Non-Comment Lines of Code (NCLOC)
+
+ (0%)
+
+
+ Logical Lines of Code (LLOC)
+
+ (0%)
+
+
+ Classes
+
+ (0%)
+
+
+ Average Class Length
+ NaN
+
+
+
+ Average Method Length
+ NaN
+
+
+
+ Functions
+
+ (0%)
+
+
+ Average Function Length
+ NaN
+
+
+
+ Not in classes or functions
+
+ (0%)
+
+
+
+
+
Complexity
+
+
+ Cyclomatic Complexity / LLOC
+ 0
+
+
+
+ Cyclomatic Complexity / Number of Methods
+ 0
+
+
+
+
+
+
Dependencies
+
+
+ Global Accesses
+
+
+
+
+ Global Constants
+
+ (0%)
+
+
+ Global Variables
+
+ (0%)
+
+
+ Super-Global Variables
+
+ (0%)
+
+
+ Attribute Accesses
+
+
+
+
+ Non-Static
+
+ (0%)
+
+
+ Static
+
+ (0%)
+
+
+ Method Calls
+
+
+
+
+ Non-Static
+
+ (0%)
+
+
+ Static
+
+ (0%)
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/interfaces.xhtml b/docs/html/interfaces.xhtml
new file mode 100644
index 0000000..2c55fdb
--- /dev/null
+++ b/docs/html/interfaces.xhtml
@@ -0,0 +1,62 @@
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
Interfaces
+
+
\Lukaswhite\PodcastFeedParser\Contracts
+
+
+
+ Name
+ Description
+
+
+
+
+
+ HasArtwork
+
+
+ No description available
+
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/interfaces/Lukaswhite_PodcastFeedParser_Contracts_HasArtwork.xhtml b/docs/html/interfaces/Lukaswhite_PodcastFeedParser_Contracts_HasArtwork.xhtml
new file mode 100644
index 0000000..a3ab67e
--- /dev/null
+++ b/docs/html/interfaces/Lukaswhite_PodcastFeedParser_Contracts_HasArtwork.xhtml
@@ -0,0 +1,81 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Contracts\HasArtwork
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Contracts\ HasArtwork
+
+
+ Synopsis
+ interface HasArtwork
+ {
+
+ }
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/namespaces.xhtml b/docs/html/namespaces.xhtml
new file mode 100644
index 0000000..839c0fe
--- /dev/null
+++ b/docs/html/namespaces.xhtml
@@ -0,0 +1,103 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
Namespaces
+
+
Namespaces
+
+
+
+ Name
+ Interfaces
+ Classes
+ Traits
+
+
+
+ \
+ 0
+
+ 1
+
+ 0
+
+
+ \Lukaswhite\PodcastFeedParser
+ 0
+
+ 8
+
+ 0
+
+
+ \Lukaswhite\PodcastFeedParser\Contracts
+
+ 1
+
+ 0
+ 0
+
+
+ \Lukaswhite\PodcastFeedParser\Exceptions
+ 0
+
+ 2
+
+ 0
+
+
+ \Lukaswhite\PodcastFeedParser\Rawvoice
+ 0
+
+ 1
+
+ 0
+
+
+ \Lukaswhite\PodcastFeedParser\Traits
+ 0
+ 0
+
+ 12
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/source/Artwork.php.xhtml b/docs/html/source/Artwork.php.xhtml
new file mode 100644
index 0000000..2bc9fba
--- /dev/null
+++ b/docs/html/source/Artwork.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Artwork.php Source of file Artwork.php
+ Size: 0,135 Bytes - Last Modified: 2020-12-03T03:00:32+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Artwork.php1 2 3 4 5 6 7 8 9 10 11
namespace Lukaswhite \ PodcastFeedParser ;
use Lukaswhite \ PodcastFeedParser \ Traits \ HasUri ;
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Category.php.xhtml b/docs/html/source/Category.php.xhtml
new file mode 100644
index 0000000..748d91c
--- /dev/null
+++ b/docs/html/source/Category.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Category.php Source of file Category.php
+ Size: 1,241 Bytes - Last Modified: 2020-12-03T04:11:31+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Category.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Contracts/HasArtwork.php.xhtml b/docs/html/source/Contracts/HasArtwork.php.xhtml
new file mode 100644
index 0000000..ae277ec
--- /dev/null
+++ b/docs/html/source/Contracts/HasArtwork.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasArtwork.php Source of file HasArtwork.php
+ Size: 0,085 Bytes - Last Modified: 2020-12-03T03:01:51+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Contracts/ HasArtwork.php1 2 3 4 5 6 7 8 9 10
namespace Lukaswhite \ PodcastFeedParser \ Contracts ;
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Contracts/index.xhtml b/docs/html/source/Contracts/index.xhtml
new file mode 100644
index 0000000..58a4b68
--- /dev/null
+++ b/docs/html/source/Contracts/index.xhtml
@@ -0,0 +1,84 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
+
Source of Podcast Feed Parser
+
+ This project consists of 5 directories, containing
+ a total of 24 files.
+
+
+
+
+ Name
+ Size
+ Last Modified
+
+
+
+ HasArtwork.php
+
+ 85 Bytes
+
+ 2020-12-03T03:01:51+00:00
+
+
+
+
+ Total: 1 files
+
+
+
+
+
+
+
diff --git a/docs/html/source/Episode.php.xhtml b/docs/html/source/Episode.php.xhtml
new file mode 100644
index 0000000..82f6072
--- /dev/null
+++ b/docs/html/source/Episode.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Episode.php Source of file Episode.php
+ Size: 2,587 Bytes - Last Modified: 2020-12-03T06:34:27+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Episode.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Exceptions/FileNotFoundException.php.xhtml b/docs/html/source/Exceptions/FileNotFoundException.php.xhtml
new file mode 100644
index 0000000..09bb952
--- /dev/null
+++ b/docs/html/source/Exceptions/FileNotFoundException.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of FileNotFoundException.php Source of file FileNotFoundException.php
+ Size: 0,112 Bytes - Last Modified: 2020-12-03T04:16:53+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Exceptions/ FileNotFoundException.php1 2 3 4 5 6 7 8 9 10
namespace Lukaswhite \ PodcastFeedParser \ Exceptions ;
class FileNotFoundException extends \ Exception
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Exceptions/InvalidXmlException.php.xhtml b/docs/html/source/Exceptions/InvalidXmlException.php.xhtml
new file mode 100644
index 0000000..1b8783c
--- /dev/null
+++ b/docs/html/source/Exceptions/InvalidXmlException.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of InvalidXmlException.php Source of file InvalidXmlException.php
+ Size: 0,110 Bytes - Last Modified: 2020-12-03T04:23:35+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Exceptions/ InvalidXmlException.php1 2 3 4 5 6 7 8 9 10
namespace Lukaswhite \ PodcastFeedParser \ Exceptions ;
class InvalidXmlException extends \ Exception
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Exceptions/index.xhtml b/docs/html/source/Exceptions/index.xhtml
new file mode 100644
index 0000000..de16885
--- /dev/null
+++ b/docs/html/source/Exceptions/index.xhtml
@@ -0,0 +1,92 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
+
Source of Podcast Feed Parser
+
+ This project consists of 5 directories, containing
+ a total of 24 files.
+
+
+
+
+
+
+
diff --git a/docs/html/source/Link.php.xhtml b/docs/html/source/Link.php.xhtml
new file mode 100644
index 0000000..ed784a7
--- /dev/null
+++ b/docs/html/source/Link.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Link.php Source of file Link.php
+ Size: 1,031 Bytes - Last Modified: 2020-12-04T01:02:28+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Link.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Media.php.xhtml b/docs/html/source/Media.php.xhtml
new file mode 100644
index 0000000..02318f6
--- /dev/null
+++ b/docs/html/source/Media.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Media.php Source of file Media.php
+ Size: 0,766 Bytes - Last Modified: 2020-12-03T03:00:25+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Media.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Owner.php.xhtml b/docs/html/source/Owner.php.xhtml
new file mode 100644
index 0000000..c4590d3
--- /dev/null
+++ b/docs/html/source/Owner.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Owner.php Source of file Owner.php
+ Size: 0,725 Bytes - Last Modified: 2020-12-03T03:47:55+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Owner.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Parser.php.xhtml b/docs/html/source/Parser.php.xhtml
new file mode 100644
index 0000000..4488720
--- /dev/null
+++ b/docs/html/source/Parser.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Parser.php Source of file Parser.php
+ Size: 12,700 Bytes - Last Modified: 2020-12-04T01:41:26+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Parser.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368
namespace Lukaswhite \ PodcastFeedParser ;
use Lukaswhite \ PodcastFeedParser \ Exceptions \ FileNotFoundException ; use Lukaswhite \ PodcastFeedParser \ Exceptions \ InvalidXmlException ; use Lukaswhite \ PodcastFeedParser \ Rawvoice \ Subscribe ;
const NS_ITUNES = 'http://www.itunes.com/dtds/podcast-1.0.dtd' ; const NS_GOOGLE_PLAY = 'http://www.google.com/schemas/play-podcasts/1.0' ; const NS_ATOM = 'http://www.w3.org/2005/Atom' ; const NS_SYNDICATION = 'http://purl.org/rss/1.0/modules/syndication/' ; const NS_RAWVOICE = 'http://www.rawvoice.com/rawvoiceRssModule/' ;
public function setContent ( string $content ) : self simplexml_load_string ( $content ) ; } catch ( \ Exception $e ) { throw new InvalidXmlException ( 'The feed does not appear to be valid XML' ) ;
$this -> content = $content ;
public function load ( string $filepath ) : self if ( ! file_exists ( $filepath ) ) { throw new FileNotFoundException ( 'The file could not be found' ) ; $this -> setContent ( file_get_contents ( $filepath ) ) ;
public function run ( ) : Podcast $this -> sp = new \ SimplePie ( ) ; $this -> sp -> set_raw_data ( $this -> content ) ;
$podcast = new Podcast ( ) ; $podcast -> setTitle ( $this -> sp -> get_title ( ) ) -> setDescription ( $this -> sp -> get_description ( ) ) -> setLanguage ( $this -> sp -> get_language ( ) ) -> setCopyright ( $this -> sp -> get_copyright ( ) ) -> setLink ( $this -> sp -> get_link ( ) ) ;
$this -> parseRssTags ( $podcast ) ; $this -> parseAtomTags ( $podcast ) ; $this -> parseSyndicationFields ( $podcast ) ; $this -> parseRawvoiceFields ( $podcast ) ;
if ( $this -> sp -> get_author ( ) ) { $podcast -> setAuthor ( $this -> sp -> get_author ( ) -> get_name ( ) ) ;
$iTunesType = $this -> sp -> get_channel_tags ( self :: NS_ITUNES , 'type' ) ; if ( $iTunesType && count ( $iTunesType ) ) { $podcast -> setType ( $iTunesType [ 0 ] [ 'data' ] ) ;
$editor = $this -> sp -> get_channel_tags ( '' , 'managingEditor' ) ; if ( $editor && count ( $editor ) ) { $podcast -> setManagingEditor ( $editor [ 0 ] [ 'data' ] ) ;
if ( $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'subtitle' ) ) { $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'subtitle' ) [ 'data' ]
if ( $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'explicit' ) ) { $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'explicit' ) [ 'data' ]
if ( $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'new-feed-url' ) ) { $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'new-feed-url' ) [ 'data' ]
$image = $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'image' ) ; $artwork = new Artwork ( ) ; $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'image' ) [ 'attribs' ] [ '' ] [ 'href' ] $podcast -> setArtwork ( $artwork ) ;
if ( $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'owner' ) ) { $ownerData = $this -> getSingleNamespacedChannelItem ( self :: NS_ITUNES , 'owner' ) ; if ( isset ( $ownerData [ 'child' ] ) && isset ( $ownerData [ 'child' ] [ self :: NS_ITUNES ] ) && isset ( $ownerData [ 'child' ] [ self :: NS_ITUNES ] [ 'name' ] ) ) { $owner -> setName ( $ownerData [ 'child' ] [ self :: NS_ITUNES ] [ 'name' ] [ 0 ] [ 'data' ] ) ; if ( isset ( $ownerData [ 'child' ] ) && isset ( $ownerData [ 'child' ] [ self :: NS_ITUNES ] ) && isset ( $ownerData [ 'child' ] [ self :: NS_ITUNES ] [ 'email' ] ) ) { $owner -> setEmail ( $ownerData [ 'child' ] [ self :: NS_ITUNES ] [ 'email' ] [ 0 ] [ 'data' ] ) ; $podcast -> setOwner ( $owner ) ;
$itunesCategories = $this -> sp -> get_channel_tags ( self :: NS_ITUNES , 'category' ) ; if ( $itunesCategories && count ( $itunesCategories ) ) { foreach ( $itunesCategories as $categoryData ) { $category = new Category ( ) ; $category -> setType ( Category :: ITUNES ) -> setName ( $categoryData [ 'attribs' ] [ '' ] [ 'text' ] ) ; if ( isset ( $categoryData [ 'child' ] ) && is_array ( $categoryData [ 'child' ] ) ) { foreach ( $categoryData [ 'child' ] [ self :: NS_ITUNES ] [ 'category' ] as $subCategoryData ) { $category -> addSubCategory ( -> setType ( Category :: ITUNES ) -> setName ( $subCategoryData [ 'attribs' ] [ '' ] [ 'text' ] ) $podcast -> addCategory ( $category ) ;
$googlePlayCategories = $this -> sp -> get_channel_tags ( self :: NS_GOOGLE_PLAY , 'category' ) ; if ( $googlePlayCategories && count ( $googlePlayCategories ) ) { foreach ( $googlePlayCategories as $categoryData ) { $category = new Category ( ) ; $category -> setType ( Category :: GOOGLE_PLAY ) -> setName ( $categoryData [ 'attribs' ] [ '' ] [ 'text' ] ) ; $podcast -> addCategory ( $category ) ;
foreach ( $this -> sp -> get_items ( ) as $item ) { $podcast -> addEpisode ( $this -> parseEpisodeItem ( $item ) ) ;
protected function parseRssTags ( Podcast $podcast ) $generator = $this -> sp -> get_channel_tags ( '' , 'generator' ) ; if ( $generator && count ( $generator ) ) { $podcast -> setGenerator ( $generator [ 0 ] [ 'data' ] ) ;
$lastBuildDate = $this -> sp -> get_channel_tags ( '' , 'lastBuildDate' ) ; if ( $lastBuildDate && count ( $lastBuildDate ) ) { $podcast -> setLastBuildDate ( ( new \ DateTime ( ) ) -> setTimestamp ( strtotime ( $lastBuildDate [ 0 ] [ 'data' ] ) ) ) ;
protected function parseAtomTags ( Podcast $podcast ) $atomLinks = $this -> sp -> get_channel_tags ( self :: NS_ATOM , 'link' ) ; if ( $atomLinks && count ( $atomLinks ) ) { foreach ( $atomLinks as $atomLink ) { $link = new Link ( $atomLink [ 'attribs' ] [ '' ] [ 'href' ] ) ; if ( isset ( $atomLink [ 'attribs' ] [ '' ] [ 'rel' ] ) ) { $link -> setRel ( $atomLink [ 'attribs' ] [ '' ] [ 'rel' ] ) ; if ( isset ( $atomLink [ 'attribs' ] [ '' ] [ 'type' ] ) ) { $link -> setType ( $atomLink [ 'attribs' ] [ '' ] [ 'type' ] ) ; $podcast -> addAtomLink ( $link ) ;
protected function parseSyndicationFields ( Podcast $podcast ) $updatePeriod = $this -> sp -> get_channel_tags ( self :: NS_SYNDICATION , 'updatePeriod' ) ; if ( $updatePeriod && count ( $updatePeriod ) ) { $podcast -> setUpdatePeriod ( $updatePeriod [ 0 ] [ 'data' ] ) ; $updateFrequency = $this -> sp -> get_channel_tags ( self :: NS_SYNDICATION , 'updateFrequency' ) ; if ( $updateFrequency && count ( $updateFrequency ) ) { $podcast -> setUpdateFrequency ( intval ( $updateFrequency [ 0 ] [ 'data' ] ) ) ; $updateBase = $this -> sp -> get_channel_tags ( self :: NS_SYNDICATION , 'updateBase' ) ; if ( $updateBase && count ( $updateBase ) ) { $podcast -> setUpdateBase ( ( new \ DateTime ( ) ) -> setTimestamp ( strtotime ( $updateBase [ 0 ] [ 'data' ] ) ) ) ;
protected function parseRawvoiceFields ( Podcast $podcast ) $rating = $this -> sp -> get_channel_tags ( self :: NS_RAWVOICE , 'rating' ) ; if ( $rating && count ( $rating ) ) { $podcast -> setRawvoiceRating ( $rating [ 0 ] [ 'data' ] ) ; $location = $this -> sp -> get_channel_tags ( self :: NS_RAWVOICE , 'location' ) ; if ( $location && count ( $location ) ) { $podcast -> setRawvoiceLocation ( $location [ 0 ] [ 'data' ] ) ; $frequency = $this -> sp -> get_channel_tags ( self :: NS_RAWVOICE , 'frequency' ) ; if ( $frequency && count ( $frequency ) ) { $podcast -> setRawvoiceFrequency ( $frequency [ 0 ] [ 'data' ] ) ; $subscribe = $this -> sp -> get_channel_tags ( self :: NS_RAWVOICE , 'subscribe' ) ; if ( $subscribe && count ( $subscribe ) ) { $links = new Subscribe ( ) ; foreach ( $subscribe [ 0 ] [ 'attribs' ] [ '' ] as $platform => $link ) { $links -> addLink ( $platform , $link ) ; $podcast -> setRawvoiceSubscribe ( $links ) ;
protected function parseEpisodeItem ( \ SimplePie_Item $item ) $episode = new Episode ( ) ; $episode -> setTitle ( $item -> get_title ( ) ) -> setDescription ( $item -> get_description ( ) ) -> setLink ( $item -> get_link ( ) ) -> setPublishedDate ( new \ DateTime ( $item -> get_date ( ) ) ) ;
$guid = $item -> get_item_tags ( '' , 'guid' ) ; if ( $guid && count ( $guid ) ) { $episode -> setGuid ( $guid [ 0 ] [ 'data' ] ) ;
$subtitle = $item -> get_item_tags ( self :: NS_ITUNES , 'subtitle' ) ; if ( $subtitle && count ( $subtitle ) ) { $episode -> setSubtitle ( $subtitle [ 0 ] [ 'data' ] ) ;
$explicit = $item -> get_item_tags ( self :: NS_ITUNES , 'explicit' ) ; if ( $explicit && count ( $explicit ) ) { $episode -> setExplicit ( $explicit [ 0 ] [ 'data' ] ) ;
$episodeNumber = $item -> get_item_tags ( self :: NS_ITUNES , 'episode' ) ; if ( $episodeNumber && count ( $episodeNumber ) ) { $episode -> setEpisodeNumber ( intval ( $episodeNumber [ 0 ] [ 'data' ] ) ) ;
$season = $item -> get_item_tags ( self :: NS_ITUNES , 'season' ) ; if ( $season && count ( $season ) ) { $episode -> setSeason ( intval ( $season [ 0 ] [ 'data' ] ) ) ;
$episodeType = $item -> get_item_tags ( self :: NS_ITUNES , 'episodeType' ) ; if ( $episodeType && count ( $episodeType ) ) { $episode -> setType ( $episodeType [ 0 ] [ 'data' ] ) ;
$image = $item -> get_item_tags ( self :: NS_ITUNES , 'image' ) ; if ( $image && count ( $image ) ) { $artwork = new Artwork ( ) ; $image [ 0 ] [ 'attribs' ] [ '' ] [ 'href' ] $episode -> setArtwork ( $artwork ) ;
$enclosure = $item -> get_enclosure ( ) ; if ( $enclosure && $enclosure -> get_link ( ) ) { $media -> setUri ( $enclosure -> get_link ( ) ) -> setMimeType ( $enclosure -> get_type ( ) ) -> setLength ( $enclosure -> get_length ( ) ) ;
$episode -> setMedia ( $this -> getFile ( $item ) ) ;
protected function getFile ( \ SimplePie_Item $item ) : Media $enclosure = $item -> get_enclosure ( ) ; $media -> setUri ( $enclosure -> get_link ( ) ) -> setMimeType ( $enclosure -> get_type ( ) ) -> setLength ( $enclosure -> get_length ( ) ) ;
protected function getSingleNamespacedChannelItem ( $namespace , $name , $item = null ) $items = $this -> sp -> get_channel_tags ( $namespace , $name ) ; if ( $items && count ( $items ) ) {
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Podcast.php.xhtml b/docs/html/source/Podcast.php.xhtml
new file mode 100644
index 0000000..8556385
--- /dev/null
+++ b/docs/html/source/Podcast.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Podcast.php Source of file Podcast.php
+ Size: 2,921 Bytes - Last Modified: 2020-12-04T01:27:26+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/ Podcast.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Rawvoice/Subscribe.php.xhtml b/docs/html/source/Rawvoice/Subscribe.php.xhtml
new file mode 100644
index 0000000..8d5eb3f
--- /dev/null
+++ b/docs/html/source/Rawvoice/Subscribe.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of Subscribe.php Source of file Subscribe.php
+ Size: 0,992 Bytes - Last Modified: 2020-12-04T01:48:29+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Rawvoice/ Subscribe.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Rawvoice/index.xhtml b/docs/html/source/Rawvoice/index.xhtml
new file mode 100644
index 0000000..fb4bef3
--- /dev/null
+++ b/docs/html/source/Rawvoice/index.xhtml
@@ -0,0 +1,84 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
+
Source of Podcast Feed Parser
+
+ This project consists of 5 directories, containing
+ a total of 24 files.
+
+
+
+
+ Name
+ Size
+ Last Modified
+
+
+
+ Subscribe.php
+
+ 992 Bytes
+
+ 2020-12-04T01:48:29+00:00
+
+
+
+
+ Total: 1 files
+
+
+
+
+
+
+
diff --git a/docs/html/source/Traits/HasArtwork.php.xhtml b/docs/html/source/Traits/HasArtwork.php.xhtml
new file mode 100644
index 0000000..c442503
--- /dev/null
+++ b/docs/html/source/Traits/HasArtwork.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasArtwork.php Source of file HasArtwork.php
+ Size: 0,480 Bytes - Last Modified: 2020-12-03T02:43:22+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasArtwork.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasAtomTags.php.xhtml b/docs/html/source/Traits/HasAtomTags.php.xhtml
new file mode 100644
index 0000000..e893e62
--- /dev/null
+++ b/docs/html/source/Traits/HasAtomTags.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasAtomTags.php Source of file HasAtomTags.php
+ Size: 0,477 Bytes - Last Modified: 2020-12-04T00:58:29+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasAtomTags.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasCategories.php.xhtml b/docs/html/source/Traits/HasCategories.php.xhtml
new file mode 100644
index 0000000..c025e92
--- /dev/null
+++ b/docs/html/source/Traits/HasCategories.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasCategories.php Source of file HasCategories.php
+ Size: 0,877 Bytes - Last Modified: 2020-12-03T04:11:30+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasCategories.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
namespace Lukaswhite \ PodcastFeedParser \ Traits ;
use Lukaswhite \ PodcastFeedParser \ Category ;
public function getCategories ( string $type = null ) return $this -> categories ; return array_values ( array_filter ( function ( Category $category ) use ( $type ) { return $category -> getType ( ) === $type ;
public function addCategory ( Category $category ) : self $this -> categories [ ] = $category ;
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasDescription.php.xhtml b/docs/html/source/Traits/HasDescription.php.xhtml
new file mode 100644
index 0000000..a196c70
--- /dev/null
+++ b/docs/html/source/Traits/HasDescription.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasDescription.php Source of file HasDescription.php
+ Size: 0,463 Bytes - Last Modified: 2020-12-03T02:42:34+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasDescription.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasExplicit.php.xhtml b/docs/html/source/Traits/HasExplicit.php.xhtml
new file mode 100644
index 0000000..927509a
--- /dev/null
+++ b/docs/html/source/Traits/HasExplicit.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasExplicit.php Source of file HasExplicit.php
+ Size: 0,444 Bytes - Last Modified: 2020-12-03T03:21:20+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasExplicit.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasItunesTags.php.xhtml b/docs/html/source/Traits/HasItunesTags.php.xhtml
new file mode 100644
index 0000000..81ef74f
--- /dev/null
+++ b/docs/html/source/Traits/HasItunesTags.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasItunesTags.php Source of file HasItunesTags.php
+ Size: 1,449 Bytes - Last Modified: 2020-12-04T00:50:45+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasItunesTags.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasLink.php.xhtml b/docs/html/source/Traits/HasLink.php.xhtml
new file mode 100644
index 0000000..43b9d9c
--- /dev/null
+++ b/docs/html/source/Traits/HasLink.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasLink.php Source of file HasLink.php
+ Size: 0,406 Bytes - Last Modified: 2020-12-03T03:34:36+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasLink.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasRawvoiceTags.php.xhtml b/docs/html/source/Traits/HasRawvoiceTags.php.xhtml
new file mode 100644
index 0000000..523c8dd
--- /dev/null
+++ b/docs/html/source/Traits/HasRawvoiceTags.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasRawvoiceTags.php Source of file HasRawvoiceTags.php
+ Size: 1,883 Bytes - Last Modified: 2020-12-04T01:26:24+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasRawvoiceTags.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
namespace Lukaswhite \ PodcastFeedParser \ Traits ;
use Lukaswhite \ PodcastFeedParser \ Rawvoice \ Subscribe ;
protected $rawvoiceRating ;
protected $rawvoiceLocation ;
protected $rawvoiceFrequency ;
protected $rawvoiceSubscribe ;
public function getRawvoiceRating ( ) return $this -> rawvoiceRating ;
public function setRawvoiceRating ( $rawvoiceRating ) $this -> rawvoiceRating = $rawvoiceRating ;
public function getRawvoiceLocation ( ) return $this -> rawvoiceLocation ;
public function setRawvoiceLocation ( $rawvoiceLocation ) $this -> rawvoiceLocation = $rawvoiceLocation ;
public function getRawvoiceFrequency ( ) return $this -> rawvoiceFrequency ;
public function setRawvoiceFrequency ( $rawvoiceFrequency ) $this -> rawvoiceFrequency = $rawvoiceFrequency ;
public function getRawvoiceSubscribe ( ) return $this -> rawvoiceSubscribe ;
public function setRawvoiceSubscribe ( $rawvoiceSubscribe ) $this -> rawvoiceSubscribe = $rawvoiceSubscribe ;
Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasSyndicationTags.php.xhtml b/docs/html/source/Traits/HasSyndicationTags.php.xhtml
new file mode 100644
index 0000000..d11c97c
--- /dev/null
+++ b/docs/html/source/Traits/HasSyndicationTags.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasSyndicationTags.php Source of file HasSyndicationTags.php
+ Size: 1,306 Bytes - Last Modified: 2020-12-04T01:19:38+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasSyndicationTags.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasTitles.php.xhtml b/docs/html/source/Traits/HasTitles.php.xhtml
new file mode 100644
index 0000000..69aacfc
--- /dev/null
+++ b/docs/html/source/Traits/HasTitles.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasTitles.php Source of file HasTitles.php
+ Size: 0,770 Bytes - Last Modified: 2020-12-03T02:41:46+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasTitles.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/HasUri.php.xhtml b/docs/html/source/Traits/HasUri.php.xhtml
new file mode 100644
index 0000000..3efaae2
--- /dev/null
+++ b/docs/html/source/Traits/HasUri.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of HasUri.php Source of file HasUri.php
+ Size: 0,437 Bytes - Last Modified: 2020-12-03T03:00:22+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ HasUri.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/IsRssFeed.php.xhtml b/docs/html/source/Traits/IsRssFeed.php.xhtml
new file mode 100644
index 0000000..670cc5d
--- /dev/null
+++ b/docs/html/source/Traits/IsRssFeed.php.xhtml
@@ -0,0 +1,3 @@
+
+phpDox - Source of IsRssFeed.php Source of file IsRssFeed.php
+ Size: 0,905 Bytes - Last Modified: 2020-12-04T00:31:05+00:00
/home/vagrant/Code/projects/podcast-feed-parser/src/Traits/ IsRssFeed.phpGenerated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
diff --git a/docs/html/source/Traits/index.xhtml b/docs/html/source/Traits/index.xhtml
new file mode 100644
index 0000000..bfa85a5
--- /dev/null
+++ b/docs/html/source/Traits/index.xhtml
@@ -0,0 +1,172 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
+
Source of Podcast Feed Parser
+
+ This project consists of 5 directories, containing
+ a total of 24 files.
+
+
+
+
+
+
+
diff --git a/docs/html/source/index.xhtml b/docs/html/source/index.xhtml
new file mode 100644
index 0000000..b5653b0
--- /dev/null
+++ b/docs/html/source/index.xhtml
@@ -0,0 +1,175 @@
+
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
+
+
+ Overview
+
+
+ Source
+
+ /home/vagrant/Code/projects/podcast-feed-parser/src
+
+
+
Source of Podcast Feed Parser
+
+ This project consists of 5 directories, containing
+ a total of 24 files.
+
+
+
+
+ Name
+ Size
+ Last Modified
+
+
+
+ Artwork.php
+
+ 135 Bytes
+
+ 2020-12-03T03:00:32+00:00
+
+
+
+ Category.php
+
+ 1.2 KB
+
+ 2020-12-03T04:11:31+00:00
+
+
+
+
+ Contracts
+
+
+
+
+
+
+
+ Episode.php
+
+ 2.5 KB
+
+ 2020-12-03T06:34:27+00:00
+
+
+
+
+ Exceptions
+
+
+
+
+
+
+
+ Link.php
+
+ 1.0 KB
+
+ 2020-12-04T01:02:28+00:00
+
+
+
+ Media.php
+
+ 766 Bytes
+
+ 2020-12-03T03:00:25+00:00
+
+
+
+ Owner.php
+
+ 725 Bytes
+
+ 2020-12-03T03:47:55+00:00
+
+
+
+ Parser.php
+
+ 12.4 KB
+
+ 2020-12-04T01:41:26+00:00
+
+
+
+ Podcast.php
+
+ 2.9 KB
+
+ 2020-12-04T01:27:26+00:00
+
+
+
+
+ Rawvoice
+
+
+
+
+
+
+
+
+ Traits
+
+
+
+
+
+
+
+
+ Total: 4 directories,8 files
+
+
+
+
+
+
+
diff --git a/docs/html/traits.xhtml b/docs/html/traits.xhtml
new file mode 100644
index 0000000..cfa26a5
--- /dev/null
+++ b/docs/html/traits.xhtml
@@ -0,0 +1,148 @@
+
+
+
+ phpDox - Overview
+
+
+
+
+
+
+
+
+
Traits
+
+
\Lukaswhite\PodcastFeedParser\Traits
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork.xhtml
new file mode 100644
index 0000000..7194cb5
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasArtwork
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasArtwork
+
+
+ Synopsis
+ trait HasArtwork
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork/getArtwork.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork/getArtwork.xhtml
new file mode 100644
index 0000000..e95baae
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork/getArtwork.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasArtwork::getArtwork
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasArtwork:: getArtwork
+
+
+
+ Signature
+
+ public function getArtwork()
+
+
+ Returns
+
+ Artwork
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork/setArtwork.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork/setArtwork.xhtml
new file mode 100644
index 0000000..e70e4c5
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork/setArtwork.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasArtwork::setArtwork
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasArtwork:: setArtwork
+
+
+
+ Signature
+
+
public function setArtwork(Artwork
+ $artwork )
+
+
+ Parameters
+
+ $artwork
+ —
+ object
+
+
+ Returns
+
+ HasArtwork
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags.xhtml
new file mode 100644
index 0000000..2059137
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags.xhtml
@@ -0,0 +1,118 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasAtomTags
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasAtomTags
+
+
+ Synopsis
+ trait HasAtomTags
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $atomLinks
+ —
+ array
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags/addAtomLink.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags/addAtomLink.xhtml
new file mode 100644
index 0000000..c6ffbaa
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags/addAtomLink.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasAtomTags::addAtomLink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasAtomTags:: addAtomLink
+
+
+
+ Signature
+
+
public function addAtomLink(Link
+ $link )
+
+
+ Parameters
+
+ $link
+ —
+ Lukaswhite\PodcastFeedParser\Link
+
+
+ Returns
+
+ HasAtomTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags/getAtomLinks.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags/getAtomLinks.xhtml
new file mode 100644
index 0000000..9f9b86c
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags/getAtomLinks.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasAtomTags::getAtomLinks
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasAtomTags:: getAtomLinks
+
+
+
+ Signature
+
+ public function getAtomLinks()
+
+
+ Returns
+
+ array
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories.xhtml
new file mode 100644
index 0000000..9158f62
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories.xhtml
@@ -0,0 +1,118 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasCategories
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasCategories
+ Trait HasCategories
+
+
+ Synopsis
+ trait HasCategories
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $categories
+ —
+ array
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories/addCategory.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories/addCategory.xhtml
new file mode 100644
index 0000000..20c7121
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories/addCategory.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasCategories::addCategory
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasCategories:: addCategory
+
+
+
+ Signature
+
+
public function addCategory(Category
+ $category )
+
+
+ Parameters
+
+ $category
+ —
+ Lukaswhite\PodcastFeedParser\Category
+
+
+ Returns
+
+ $this
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories/getCategories.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories/getCategories.xhtml
new file mode 100644
index 0000000..b488d26
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories/getCategories.xhtml
@@ -0,0 +1,101 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasCategories::getCategories
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasCategories:: getCategories
+
+
+
+ Signature
+
+ public function getCategories([string
+ $type = NULL] )
+
+
+ Parameters
+
+ $type
+ —
+ string
+
+
+ Returns
+
+ array
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription.xhtml
new file mode 100644
index 0000000..30b83d7
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasDescription
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasDescription
+
+
+ Synopsis
+ trait HasDescription
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $description
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription/getDescription.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription/getDescription.xhtml
new file mode 100644
index 0000000..a128f0a
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription/getDescription.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasDescription::getDescription
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasDescription:: getDescription
+
+
+
+ Signature
+
+ public function getDescription()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription/setDescription.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription/setDescription.xhtml
new file mode 100644
index 0000000..bf4c436
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription/setDescription.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasDescription::setDescription
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasDescription:: setDescription
+
+
+
+ Signature
+
+ public function setDescription(string
+ $description )
+
+
+ Parameters
+
+ $description
+ —
+ string
+
+
+ Returns
+
+ HasDescription
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit.xhtml
new file mode 100644
index 0000000..7ec128b
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasExplicit
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasExplicit
+
+
+ Synopsis
+ trait HasExplicit
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $explicit
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit/getExplicit.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit/getExplicit.xhtml
new file mode 100644
index 0000000..3b05f7c
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit/getExplicit.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasExplicit::getExplicit
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasExplicit:: getExplicit
+
+
+
+ Signature
+
+ public function getExplicit()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit/setExplicit.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit/setExplicit.xhtml
new file mode 100644
index 0000000..39f4a65
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit/setExplicit.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasExplicit::setExplicit
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasExplicit:: setExplicit
+
+
+
+ Signature
+
+ public function setExplicit(string
+ $explicit )
+
+
+ Parameters
+
+ $explicit
+ —
+ string
+
+
+ Returns
+
+ HasExplicit
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags.xhtml
new file mode 100644
index 0000000..d4acbf2
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags.xhtml
@@ -0,0 +1,149 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasItunesTags
+
+
+ Synopsis
+ trait HasItunesTags
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getNewFeedUrl.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getNewFeedUrl.xhtml
new file mode 100644
index 0000000..6a9b10b
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getNewFeedUrl.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::getNewFeedUrl
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: getNewFeedUrl
+
+
+
+ Signature
+
+ public function getNewFeedUrl()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getOwner.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getOwner.xhtml
new file mode 100644
index 0000000..7e4e4bb
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getOwner.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::getOwner
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: getOwner
+
+
+
+ Signature
+
+ public function getOwner()
+
+
+ Returns
+
+ Owner
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getType.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getType.xhtml
new file mode 100644
index 0000000..505c692
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/getType.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::getType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: getType
+
+
+
+ Signature
+
+ public function getType()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/isEpisodic.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/isEpisodic.xhtml
new file mode 100644
index 0000000..44e3b9c
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/isEpisodic.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::isEpisodic
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: isEpisodic
+
+
+
+ Signature
+
+ public function isEpisodic()
+
+
+ Returns
+
+ bool
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/isSerial.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/isSerial.xhtml
new file mode 100644
index 0000000..b56a399
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/isSerial.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::isSerial
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: isSerial
+
+
+
+ Signature
+
+ public function isSerial()
+
+
+ Returns
+
+ bool
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setNewFeedUrl.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setNewFeedUrl.xhtml
new file mode 100644
index 0000000..2c7aa8c
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setNewFeedUrl.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::setNewFeedUrl
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: setNewFeedUrl
+
+
+
+ Signature
+
+ public function setNewFeedUrl(string
+ $newFeedUrl )
+
+
+ Parameters
+
+ $newFeedUrl
+ —
+ string
+
+
+ Returns
+
+ HasItunesTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setOwner.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setOwner.xhtml
new file mode 100644
index 0000000..b9becf6
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setOwner.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::setOwner
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: setOwner
+
+
+
+ Signature
+
+
public function setOwner(Owner
+ $owner )
+
+
+ Parameters
+
+ $owner
+ —
+ object
+
+
+ Returns
+
+ HasItunesTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setType.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setType.xhtml
new file mode 100644
index 0000000..5343fe9
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags/setType.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasItunesTags::setType
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasItunesTags:: setType
+
+
+
+ Signature
+
+ public function setType(string
+ $type )
+
+
+ Parameters
+
+ $type
+ —
+ string
+
+
+ Returns
+
+ HasItunesTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink.xhtml
new file mode 100644
index 0000000..bdfd495
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasLink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasLink
+
+
+ Synopsis
+ trait HasLink
+ {
// members protected $link ;
+
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink/getLink.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink/getLink.xhtml
new file mode 100644
index 0000000..83e1dcf
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink/getLink.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasLink::getLink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasLink:: getLink
+
+
+
+ Signature
+
+ public function getLink()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink/setLink.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink/setLink.xhtml
new file mode 100644
index 0000000..4c0d56a
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink/setLink.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasLink::setLink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasLink:: setLink
+
+
+
+ Signature
+
+ public function setLink(string
+ $link )
+
+
+ Parameters
+
+ $link
+ —
+ string
+
+
+ Returns
+
+ HasLink
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags.xhtml
new file mode 100644
index 0000000..ec1bca7
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags.xhtml
@@ -0,0 +1,153 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasRawvoiceTags
+
+
+ Synopsis
+ trait HasRawvoiceTags
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceFrequency.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceFrequency.xhtml
new file mode 100644
index 0000000..03b4b11
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceFrequency.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::getRawvoiceFrequency
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: getRawvoiceFrequency
+
+
+
+ Signature
+
+ public function getRawvoiceFrequency()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceLocation.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceLocation.xhtml
new file mode 100644
index 0000000..45dd6ad
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceLocation.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::getRawvoiceLocation
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: getRawvoiceLocation
+
+
+
+ Signature
+
+ public function getRawvoiceLocation()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceRating.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceRating.xhtml
new file mode 100644
index 0000000..2193122
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceRating.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::getRawvoiceRating
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: getRawvoiceRating
+
+
+
+ Signature
+
+ public function getRawvoiceRating()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceSubscribe.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceSubscribe.xhtml
new file mode 100644
index 0000000..4b394f3
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/getRawvoiceSubscribe.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::getRawvoiceSubscribe
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: getRawvoiceSubscribe
+
+
+
+ Signature
+
+ public function getRawvoiceSubscribe()
+
+
+ Returns
+
+ Subscribe
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceFrequency.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceFrequency.xhtml
new file mode 100644
index 0000000..85bfcb1
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceFrequency.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::setRawvoiceFrequency
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: setRawvoiceFrequency
+
+
+
+ Signature
+
+ public function setRawvoiceFrequency(string
+ $rawvoiceFrequency )
+
+
+ Parameters
+
+ $rawvoiceFrequency
+ —
+ string
+
+
+ Returns
+
+ HasRawvoiceTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceLocation.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceLocation.xhtml
new file mode 100644
index 0000000..6e95484
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceLocation.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::setRawvoiceLocation
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: setRawvoiceLocation
+
+
+
+ Signature
+
+ public function setRawvoiceLocation(string
+ $rawvoiceLocation )
+
+
+ Parameters
+
+ $rawvoiceLocation
+ —
+ string
+
+
+ Returns
+
+ HasRawvoiceTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceRating.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceRating.xhtml
new file mode 100644
index 0000000..d23e605
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceRating.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::setRawvoiceRating
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: setRawvoiceRating
+
+
+
+ Signature
+
+ public function setRawvoiceRating(string
+ $rawvoiceRating )
+
+
+ Parameters
+
+ $rawvoiceRating
+ —
+ string
+
+
+ Returns
+
+ HasRawvoiceTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceSubscribe.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceSubscribe.xhtml
new file mode 100644
index 0000000..323e512
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags/setRawvoiceSubscribe.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags::setRawvoiceSubscribe
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags:: setRawvoiceSubscribe
+
+
+
+ Signature
+
+
public function setRawvoiceSubscribe(Subscribe
+ $rawvoiceSubscribe )
+
+
+ Parameters
+
+ $rawvoiceSubscribe
+ —
+ object
+
+
+ Returns
+
+ HasRawvoiceTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags.xhtml
new file mode 100644
index 0000000..29bbfbf
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags.xhtml
@@ -0,0 +1,141 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasSyndicationTags
+
+
+ Synopsis
+ trait HasSyndicationTags
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $updateBase
+ —
+ \DateTime
+ $updateFrequency
+ —
+ int
+ $updatePeriod
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdateBase.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdateBase.xhtml
new file mode 100644
index 0000000..c53fa49
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdateBase.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags::getUpdateBase
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags:: getUpdateBase
+
+
+
+ Signature
+
+ public function getUpdateBase()
+
+
+ Returns
+
+ DateTime
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdateFrequency.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdateFrequency.xhtml
new file mode 100644
index 0000000..ed2e77e
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdateFrequency.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags::getUpdateFrequency
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags:: getUpdateFrequency
+
+
+
+ Signature
+
+ public function getUpdateFrequency()
+
+
+ Returns
+
+ int
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdatePeriod.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdatePeriod.xhtml
new file mode 100644
index 0000000..b1eace1
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/getUpdatePeriod.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags::getUpdatePeriod
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags:: getUpdatePeriod
+
+
+
+ Signature
+
+ public function getUpdatePeriod()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdateBase.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdateBase.xhtml
new file mode 100644
index 0000000..f6a615e
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdateBase.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags::setUpdateBase
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags:: setUpdateBase
+
+
+
+ Signature
+
+
public function setUpdateBase(DateTime
+ $updateBase )
+
+
+ Parameters
+
+ $updateBase
+ —
+ \DateTime
+
+
+ Returns
+
+ HasSyndicationTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdateFrequency.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdateFrequency.xhtml
new file mode 100644
index 0000000..c40ab20
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdateFrequency.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags::setUpdateFrequency
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags:: setUpdateFrequency
+
+
+
+ Signature
+
+ public function setUpdateFrequency(int
+ $updateFrequency )
+
+
+ Parameters
+
+ $updateFrequency
+ —
+ int
+
+
+ Returns
+
+ HasSyndicationTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdatePeriod.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdatePeriod.xhtml
new file mode 100644
index 0000000..ed6a06e
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags/setUpdatePeriod.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags::setUpdatePeriod
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags:: setUpdatePeriod
+
+
+
+ Signature
+
+ public function setUpdatePeriod(string
+ $updatePeriod )
+
+
+ Parameters
+
+ $updatePeriod
+ —
+ string
+
+
+ Returns
+
+ HasSyndicationTags
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles.xhtml
new file mode 100644
index 0000000..c79f79c
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles.xhtml
@@ -0,0 +1,132 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasTitles
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasTitles
+
+
+ Synopsis
+ trait HasTitles
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $subtitle
+ —
+ string
+ $title
+ —
+ string
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/getSubtitle.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/getSubtitle.xhtml
new file mode 100644
index 0000000..0ac642e
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/getSubtitle.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasTitles::getSubtitle
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasTitles:: getSubtitle
+
+
+
+ Signature
+
+ public function getSubtitle()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/getTitle.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/getTitle.xhtml
new file mode 100644
index 0000000..5509c55
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/getTitle.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasTitles::getTitle
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasTitles:: getTitle
+
+
+
+ Signature
+
+ public function getTitle()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/setSubtitle.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/setSubtitle.xhtml
new file mode 100644
index 0000000..cde531d
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/setSubtitle.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasTitles::setSubtitle
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasTitles:: setSubtitle
+
+
+
+ Signature
+
+ public function setSubtitle(string
+ $subtitle )
+
+
+ Parameters
+
+ $subtitle
+ —
+ string
+
+
+ Returns
+
+ HasTitles
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/setTitle.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/setTitle.xhtml
new file mode 100644
index 0000000..64f3302
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles/setTitle.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasTitles::setTitle
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasTitles:: setTitle
+
+
+
+ Signature
+
+ public function setTitle(string
+ $title )
+
+
+ Parameters
+
+ $title
+ —
+ string
+
+
+ Returns
+
+ HasTitles
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri.xhtml
new file mode 100644
index 0000000..fbc05e8
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri.xhtml
@@ -0,0 +1,120 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasUri
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ HasUri
+
+
+ Synopsis
+ trait HasUri
+ {
// members protected $uri ;
+
+
+ }
+ Hierarchy
+
+ Members
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri/getUri.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri/getUri.xhtml
new file mode 100644
index 0000000..8b82638
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri/getUri.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasUri::getUri
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasUri:: getUri
+
+
+
+ Signature
+
+ public function getUri()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri/setUri.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri/setUri.xhtml
new file mode 100644
index 0000000..21c2364
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri/setUri.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\HasUri::setUri
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\HasUri:: setUri
+
+
+
+ Signature
+
+ public function setUri(string
+ $uri )
+
+
+ Parameters
+
+ $uri
+ —
+ string
+
+
+ Returns
+
+ HasUri
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed.xhtml
new file mode 100644
index 0000000..2ee9206
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed.xhtml
@@ -0,0 +1,129 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\IsRssFeed
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\ IsRssFeed
+
+
+ Synopsis
+ trait IsRssFeed
+ {
+
+ }
+ Hierarchy
+
+ Members
+
+
protected
+
+ $generator
+ —
+ string
+ $lastBuildDate
+ —
+ \DateTime
+
+
+ Methods
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/getGenerator.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/getGenerator.xhtml
new file mode 100644
index 0000000..c8f4d5d
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/getGenerator.xhtml
@@ -0,0 +1,90 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\IsRssFeed::getGenerator
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\IsRssFeed:: getGenerator
+
+
+
+ Signature
+
+ public function getGenerator()
+
+
+ Returns
+
+ string
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/getLastBuildDate.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/getLastBuildDate.xhtml
new file mode 100644
index 0000000..181f99a
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/getLastBuildDate.xhtml
@@ -0,0 +1,91 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\IsRssFeed::getLastBuildDate
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\IsRssFeed:: getLastBuildDate
+
+
+
+ Signature
+
+ public function getLastBuildDate()
+
+
+ Returns
+
+ DateTime
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/setGenerator.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/setGenerator.xhtml
new file mode 100644
index 0000000..912c435
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/setGenerator.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\IsRssFeed::setGenerator
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\IsRssFeed:: setGenerator
+
+
+
+ Signature
+
+ public function setGenerator(string
+ $generator )
+
+
+ Parameters
+
+ $generator
+ —
+ string
+
+
+ Returns
+
+ IsRssFeed
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/setLastBuildDate.xhtml b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/setLastBuildDate.xhtml
new file mode 100644
index 0000000..89a1a8f
--- /dev/null
+++ b/docs/html/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed/setLastBuildDate.xhtml
@@ -0,0 +1,102 @@
+
+
+
+
+ phpDox - Lukaswhite\PodcastFeedParser\Traits\IsRssFeed::setLastBuildDate
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Lukaswhite\PodcastFeedParser\Traits\IsRssFeed:: setLastBuildDate
+
+
+
+ Signature
+
+
public function setLastBuildDate(DateTime
+ $lastBuildDate )
+
+
+ Parameters
+
+ $lastBuildDate
+ —
+ object
+
+
+ Returns
+
+ IsRssFeed
+
+
+
+
+
+
+ Generated using phpDox 0.12.0 - Copyright (C) 2010 - 2020 by Arne Blankerts and Contributors
+
+
+
diff --git a/docs/xml/classes/Exception.xml b/docs/xml/classes/Exception.xml
new file mode 100644
index 0000000..e873e06
--- /dev/null
+++ b/docs/xml/classes/Exception.xml
@@ -0,0 +1,94 @@
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Artwork.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Artwork.xml
new file mode 100644
index 0000000..2ddc435
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Artwork.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Category.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Category.xml
new file mode 100644
index 0000000..7800c62
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Category.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Episode.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Episode.xml
new file mode 100644
index 0000000..5d94d7e
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Episode.xml
@@ -0,0 +1,304 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Exceptions_FileNotFoundException.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Exceptions_FileNotFoundException.xml
new file mode 100644
index 0000000..c8798b0
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Exceptions_FileNotFoundException.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Exceptions_InvalidXmlException.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Exceptions_InvalidXmlException.xml
new file mode 100644
index 0000000..40dee29
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Exceptions_InvalidXmlException.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+ null
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Link.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Link.xml
new file mode 100644
index 0000000..6604df9
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Link.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Media.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Media.xml
new file mode 100644
index 0000000..835d504
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Media.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Owner.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Owner.xml
new file mode 100644
index 0000000..9283ddb
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Owner.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Parser.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Parser.xml
new file mode 100644
index 0000000..36914c6
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Parser.xml
@@ -0,0 +1,182 @@
+
+
+
+
+ Parse a podcast feed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Podcast.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Podcast.xml
new file mode 100644
index 0000000..d56fe75
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Podcast.xml
@@ -0,0 +1,659 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe.xml b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe.xml
new file mode 100644
index 0000000..b36edc7
--- /dev/null
+++ b/docs/xml/classes/Lukaswhite_PodcastFeedParser_Rawvoice_Subscribe.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/index.xml b/docs/xml/index.xml
new file mode 100644
index 0000000..666c89c
--- /dev/null
+++ b/docs/xml/index.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/interfaces/Lukaswhite_PodcastFeedParser_Contracts_HasArtwork.xml b/docs/xml/interfaces/Lukaswhite_PodcastFeedParser_Contracts_HasArtwork.xml
new file mode 100644
index 0000000..b79adbc
--- /dev/null
+++ b/docs/xml/interfaces/Lukaswhite_PodcastFeedParser_Contracts_HasArtwork.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/docs/xml/source.xml b/docs/xml/source.xml
new file mode 100644
index 0000000..4676844
--- /dev/null
+++ b/docs/xml/source.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/tokens/Artwork.php.xml b/docs/xml/tokens/Artwork.php.xml
new file mode 100644
index 0000000..61dbe23
--- /dev/null
+++ b/docs/xml/tokens/Artwork.php.xml
@@ -0,0 +1,49 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasUri
+ ;
+
+
+
+ class
+
+ Artwork
+
+
+ {
+
+
+
+ use
+
+ HasUri
+ ;
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Category.php.xml b/docs/xml/tokens/Category.php.xml
new file mode 100644
index 0000000..dc44538
--- /dev/null
+++ b/docs/xml/tokens/Category.php.xml
@@ -0,0 +1,384 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ class
+
+ Category
+
+
+ {
+
+
+
+ const
+
+ ITUNES
+
+ =
+
+ 'itunes'
+ ;
+
+
+
+ const
+
+ GOOGLE_PLAY
+
+ =
+
+ 'googleplay'
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $name
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $type
+ ;
+
+
+
+
+ /**
+
+
+ * @var array
+
+
+ */
+
+
+
+ protected
+
+ $subCategories
+
+ =
+
+ [
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getName
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ name
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $name
+
+
+ * @return Category
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setName
+ (
+ $name
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ name
+
+ =
+
+ $name
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getType
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ type
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $type
+
+
+ * @return Category
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setType
+ (
+ $type
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ type
+
+ =
+
+ $type
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return array
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getSubCategories
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ subCategories
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Category $subCategory
+
+
+ * @return Category
+
+
+ */
+
+
+
+ public
+
+ function
+
+ addSubCategory
+ (
+ Category
+
+ $subCategory
+ )
+ :
+
+ Category
+
+
+
+ {
+
+
+
+ $this
+ ->
+ subCategories
+ [
+ ]
+
+ =
+
+ $subCategory
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Contracts/HasArtwork.php.xml b/docs/xml/tokens/Contracts/HasArtwork.php.xml
new file mode 100644
index 0000000..5a806cd
--- /dev/null
+++ b/docs/xml/tokens/Contracts/HasArtwork.php.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Contracts
+ ;
+
+
+
+
+ interface
+
+ HasArtwork
+
+
+ {
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Episode.php.xml b/docs/xml/tokens/Episode.php.xml
new file mode 100644
index 0000000..61491c4
--- /dev/null
+++ b/docs/xml/tokens/Episode.php.xml
@@ -0,0 +1,763 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasArtwork
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasDescription
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasExplicit
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasLink
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasTitles
+ ;
+
+
+
+ class
+
+ Episode
+
+
+ {
+
+
+
+ use
+
+ HasTitles
+
+
+
+ ,
+
+ HasDescription
+
+
+
+ ,
+
+ HasArtwork
+
+
+
+ ,
+
+ HasLink
+
+
+
+ ,
+
+ HasExplicit
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $guid
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $type
+ ;
+
+
+
+
+ /**
+
+
+ * @var int
+
+
+ */
+
+
+
+ protected
+
+ $episodeNumber
+ ;
+
+
+
+
+ /**
+
+
+ * @var int
+
+
+ */
+
+
+
+ protected
+
+ $season
+ ;
+
+
+
+
+ /**
+
+
+ * @var Media
+
+
+ */
+
+
+
+ protected
+
+ $media
+ ;
+
+
+
+
+ /**
+
+
+ * @var \DateTime
+
+
+ */
+
+
+
+ protected
+
+ $publishedDate
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getGuid
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ guid
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $guid
+
+
+ * @return Episode
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setGuid
+ (
+ $guid
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ guid
+
+ =
+
+ $guid
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getType
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ type
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $type
+
+
+ * @return Episode
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setType
+ (
+ $type
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ type
+
+ =
+
+ $type
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return int
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getEpisodeNumber
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ episodeNumber
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param int $episodeNumber
+
+
+ * @return Episode
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setEpisodeNumber
+ (
+ $episodeNumber
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ episodeNumber
+
+ =
+
+ $episodeNumber
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return int
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getSeason
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ season
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param int $season
+
+
+ * @return Episode
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setSeason
+ (
+ $season
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ season
+
+ =
+
+ $season
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return Media
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getMedia
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ media
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Media $media
+
+
+ * @return Episode
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setMedia
+ (
+ $media
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ media
+
+ =
+
+ $media
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return \DateTime
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getPublishedDate
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ publishedDate
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param \DateTime $publishedDate
+
+
+ * @return Episode
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setPublishedDate
+ (
+ $publishedDate
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ publishedDate
+
+ =
+
+ $publishedDate
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Exceptions/FileNotFoundException.php.xml b/docs/xml/tokens/Exceptions/FileNotFoundException.php.xml
new file mode 100644
index 0000000..f6b3d97
--- /dev/null
+++ b/docs/xml/tokens/Exceptions/FileNotFoundException.php.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Exceptions
+ ;
+
+
+
+
+ class
+
+ FileNotFoundException
+
+ extends
+
+ \
+ Exception
+
+
+ {
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Exceptions/InvalidXmlException.php.xml b/docs/xml/tokens/Exceptions/InvalidXmlException.php.xml
new file mode 100644
index 0000000..2c21d89
--- /dev/null
+++ b/docs/xml/tokens/Exceptions/InvalidXmlException.php.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Exceptions
+ ;
+
+
+
+
+ class
+
+ InvalidXmlException
+
+ extends
+
+ \
+ Exception
+
+
+ {
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Link.php.xml b/docs/xml/tokens/Link.php.xml
new file mode 100644
index 0000000..6e742ac
--- /dev/null
+++ b/docs/xml/tokens/Link.php.xml
@@ -0,0 +1,346 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ class
+
+ Link
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $uri
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $rel
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $type
+ ;
+
+
+
+
+ /**
+
+
+ * Link constructor.
+
+
+ *
+
+
+ * @param string $uri
+
+
+ */
+
+
+
+ public
+
+ function
+
+ __construct
+ (
+ string
+
+ $uri
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ uri
+
+ =
+
+ $uri
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getUri
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ uri
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getRel
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ rel
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $rel
+
+
+ * @return Link
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setRel
+ (
+ $rel
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ rel
+
+ =
+
+ $rel
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getType
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ type
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $type
+
+
+ * @return Link
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setType
+ (
+ $type
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ type
+
+ =
+
+ $type
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Media.php.xml b/docs/xml/tokens/Media.php.xml
new file mode 100644
index 0000000..f17cecf
--- /dev/null
+++ b/docs/xml/tokens/Media.php.xml
@@ -0,0 +1,244 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasUri
+ ;
+
+
+
+ class
+
+ Media
+
+
+ {
+
+
+
+ use
+
+ HasUri
+ ;
+
+
+
+
+ protected
+
+ $length
+ ;
+
+
+
+
+ protected
+
+ $mimeType
+ ;
+
+
+
+
+ /**
+
+
+ * @return mixed
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getLength
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ length
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param mixed $length
+
+
+ * @return Media
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setLength
+ (
+ $length
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ length
+
+ =
+
+ $length
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return mixed
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getMimeType
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ mimeType
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param mixed $mimeType
+
+
+ * @return Media
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setMimeType
+ (
+ $mimeType
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ mimeType
+
+ =
+
+ $mimeType
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Owner.php.xml b/docs/xml/tokens/Owner.php.xml
new file mode 100644
index 0000000..2bc94c2
--- /dev/null
+++ b/docs/xml/tokens/Owner.php.xml
@@ -0,0 +1,242 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ class
+
+ Owner
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $name
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $email
+ ;
+
+
+
+
+ /**
+
+
+ * @return mixed
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getName
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ name
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param mixed $name
+
+
+ * @return Owner
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setName
+ (
+ $name
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ name
+
+ =
+
+ $name
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return mixed
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getEmail
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ email
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param mixed $email
+
+
+ * @return Owner
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setEmail
+ (
+ $email
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ email
+
+ =
+
+ $email
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Parser.php.xml b/docs/xml/tokens/Parser.php.xml
new file mode 100644
index 0000000..6756134
--- /dev/null
+++ b/docs/xml/tokens/Parser.php.xml
@@ -0,0 +1,3409 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Exceptions
+ \
+ FileNotFoundException
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Exceptions
+ \
+ InvalidXmlException
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Rawvoice
+ \
+ Subscribe
+ ;
+
+
+
+ /**
+
+
+ * Class Parser
+
+
+ *
+
+
+ * Parse a podcast feed.
+
+
+ *
+
+
+ * @package Lukaswhite\PodcastFeedParser
+
+
+ */
+
+
+ class
+
+ Parser
+
+
+ {
+
+
+
+ /**
+
+
+ * Class constants for the various namespaces
+
+
+ */
+
+
+
+ const
+
+ NS_ITUNES
+
+ =
+
+ 'http://www.itunes.com/dtds/podcast-1.0.dtd'
+ ;
+
+
+
+ const
+
+ NS_GOOGLE_PLAY
+
+ =
+
+ 'http://www.google.com/schemas/play-podcasts/1.0'
+ ;
+
+
+
+ const
+
+ NS_ATOM
+
+ =
+
+ 'http://www.w3.org/2005/Atom'
+ ;
+
+
+
+ const
+
+ NS_SYNDICATION
+
+ =
+
+ 'http://purl.org/rss/1.0/modules/syndication/'
+ ;
+
+
+
+ const
+
+ NS_RAWVOICE
+
+ =
+
+ 'http://www.rawvoice.com/rawvoiceRssModule/'
+ ;
+
+
+
+
+ /**
+
+
+ * The raw feed content
+
+
+ *
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $content
+ ;
+
+
+
+
+ /**
+
+
+ * @var \SimplePie
+
+
+ */
+
+
+
+ protected
+
+ $sp
+ ;
+
+
+
+
+ /**
+
+
+ * @param string $content
+
+
+ * @return $this
+
+
+ * @throws InvalidXmlException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setContent
+ (
+ string
+
+ $content
+ )
+ :
+
+ self
+
+
+
+ {
+
+
+
+ try
+
+ {
+
+
+
+ simplexml_load_string
+ (
+ $content
+ )
+ ;
+
+
+
+ }
+
+ catch
+
+ (
+ \
+ Exception
+
+ $e
+ )
+
+ {
+
+
+
+ throw
+
+ new
+
+ InvalidXmlException
+ (
+ 'The feed does not appear to be valid XML'
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $this
+ ->
+ content
+
+ =
+
+ $content
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $filepath
+
+
+ * @return self
+
+
+ * @throws FileNotFoundException
+
+
+ * @throws InvalidXmlException
+
+
+ */
+
+
+
+ public
+
+ function
+
+ load
+ (
+ string
+
+ $filepath
+ )
+ :
+
+ self
+
+
+
+ {
+
+
+
+ if
+
+ (
+ !
+ file_exists
+ (
+ $filepath
+ )
+ )
+
+ {
+
+
+
+ throw
+
+ new
+
+ FileNotFoundException
+ (
+ 'The file could not be found'
+ )
+ ;
+
+
+
+ }
+
+
+
+ $this
+ ->
+ setContent
+ (
+ file_get_contents
+ (
+ $filepath
+ )
+ )
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * Run the parser and return an object that represents the parsed podcast.
+
+
+ *
+
+
+ * @return Podcast
+
+
+ * @throws \Exception
+
+
+ */
+
+
+
+ public
+
+ function
+
+ run
+ (
+ )
+ :
+
+ Podcast
+
+
+
+ {
+
+
+
+ $this
+ ->
+ sp
+
+ =
+
+ new
+
+ \
+ SimplePie
+ (
+ )
+ ;
+
+
+
+ $this
+ ->
+ sp
+ ->
+ set_raw_data
+ (
+ $this
+ ->
+ content
+ )
+ ;
+
+
+
+ $this
+ ->
+ sp
+ ->
+ init
+ (
+ )
+ ;
+
+
+
+
+ $podcast
+
+ =
+
+ new
+
+ Podcast
+ (
+ )
+ ;
+
+
+
+ $podcast
+ ->
+ setTitle
+ (
+ $this
+ ->
+ sp
+ ->
+ get_title
+ (
+ )
+ )
+
+
+
+ ->
+ setDescription
+ (
+ $this
+ ->
+ sp
+ ->
+ get_description
+ (
+ )
+ )
+
+
+
+ ->
+ setLanguage
+ (
+ $this
+ ->
+ sp
+ ->
+ get_language
+ (
+ )
+ )
+
+
+
+ ->
+ setCopyright
+ (
+ $this
+ ->
+ sp
+ ->
+ get_copyright
+ (
+ )
+ )
+
+
+
+ ->
+ setLink
+ (
+ $this
+ ->
+ sp
+ ->
+ get_link
+ (
+ )
+ )
+ ;
+
+
+
+
+ $this
+ ->
+ parseRssTags
+ (
+ $podcast
+ )
+ ;
+
+
+
+ $this
+ ->
+ parseAtomTags
+ (
+ $podcast
+ )
+ ;
+
+
+
+ $this
+ ->
+ parseSyndicationFields
+ (
+ $podcast
+ )
+ ;
+
+
+
+ $this
+ ->
+ parseRawvoiceFields
+ (
+ $podcast
+ )
+ ;
+
+
+
+
+ if
+
+ (
+ $this
+ ->
+ sp
+ ->
+ get_author
+ (
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setAuthor
+ (
+ $this
+ ->
+ sp
+ ->
+ get_author
+ (
+ )
+ ->
+ get_name
+ (
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $iTunesType
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'type'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $iTunesType
+
+ &&
+
+ count
+ (
+ $iTunesType
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setType
+ (
+ $iTunesType
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $editor
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ ''
+ ,
+
+ 'managingEditor'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $editor
+
+ &&
+
+ count
+ (
+ $editor
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setManagingEditor
+ (
+ $editor
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ if
+
+ (
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'subtitle'
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setSubtitle
+ (
+
+
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'subtitle'
+ )
+ [
+ 'data'
+ ]
+
+
+
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ if
+
+ (
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'explicit'
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setExplicit
+ (
+
+
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'explicit'
+ )
+ [
+ 'data'
+ ]
+
+
+
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ if
+
+ (
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'new-feed-url'
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setNewFeedUrl
+ (
+
+
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'new-feed-url'
+ )
+ [
+ 'data'
+ ]
+
+
+
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $image
+
+ =
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'image'
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $image
+
+ )
+
+ {
+
+
+
+ $artwork
+
+ =
+
+ new
+
+ Artwork
+ (
+ )
+ ;
+
+
+
+ $artwork
+ ->
+ setUri
+ (
+
+
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'image'
+ )
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'href'
+ ]
+
+
+
+ )
+ ;
+
+
+
+ $podcast
+ ->
+ setArtwork
+ (
+ $artwork
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ if
+
+ (
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'owner'
+ )
+ )
+
+ {
+
+
+
+ $ownerData
+
+ =
+
+ $this
+ ->
+ getSingleNamespacedChannelItem
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'owner'
+ )
+ ;
+
+
+
+ $owner
+
+ =
+
+ new
+
+ Owner
+ (
+ )
+ ;
+
+
+
+ if
+
+ (
+ isset
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ )
+ &&
+
+
+
+ isset
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ )
+ &&
+
+
+
+ isset
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ [
+ 'name'
+ ]
+ )
+ )
+
+ {
+
+
+
+ $owner
+ ->
+ setName
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ [
+ 'name'
+ ]
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ if
+
+ (
+ isset
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ )
+ &&
+
+
+
+ isset
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ )
+ &&
+
+
+
+ isset
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ [
+ 'email'
+ ]
+ )
+ )
+
+ {
+
+
+
+ $owner
+ ->
+ setEmail
+ (
+ $ownerData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ [
+ 'email'
+ ]
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ $podcast
+ ->
+ setOwner
+ (
+ $owner
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $itunesCategories
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'category'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $itunesCategories
+
+ &&
+
+ count
+ (
+ $itunesCategories
+ )
+ )
+
+ {
+
+
+
+ foreach
+ (
+ $itunesCategories
+
+ as
+
+ $categoryData
+ )
+
+ {
+
+
+
+ $category
+
+ =
+
+ new
+
+ Category
+ (
+ )
+ ;
+
+
+
+ $category
+ ->
+ setType
+ (
+ Category
+ ::
+ ITUNES
+ )
+
+
+
+ ->
+ setName
+ (
+ $categoryData
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'text'
+ ]
+ )
+ ;
+
+
+
+ if
+ (
+ isset
+ (
+ $categoryData
+ [
+ 'child'
+ ]
+ )
+ &&
+ is_array
+ (
+ $categoryData
+ [
+ 'child'
+ ]
+ )
+ )
+
+ {
+
+
+
+ foreach
+ (
+ $categoryData
+ [
+ 'child'
+ ]
+ [
+ self
+ ::
+ NS_ITUNES
+ ]
+ [
+ 'category'
+ ]
+
+ as
+
+ $subCategoryData
+ )
+
+ {
+
+
+
+ $category
+ ->
+ addSubCategory
+ (
+
+
+
+ (
+
+ new
+
+ Category
+ (
+ )
+
+ )
+
+
+
+ ->
+ setType
+ (
+ Category
+ ::
+ ITUNES
+ )
+
+
+
+ ->
+ setName
+ (
+ $subCategoryData
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'text'
+ ]
+ )
+
+
+
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+ $podcast
+ ->
+ addCategory
+ (
+ $category
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ $googlePlayCategories
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_GOOGLE_PLAY
+ ,
+
+ 'category'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $googlePlayCategories
+
+ &&
+
+ count
+ (
+ $googlePlayCategories
+ )
+ )
+
+ {
+
+
+
+ foreach
+ (
+ $googlePlayCategories
+
+ as
+
+ $categoryData
+ )
+
+ {
+
+
+
+ $category
+
+ =
+
+ new
+
+ Category
+ (
+ )
+ ;
+
+
+
+ $category
+ ->
+ setType
+ (
+ Category
+ ::
+ GOOGLE_PLAY
+ )
+
+
+
+ ->
+ setName
+ (
+ $categoryData
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'text'
+ ]
+ )
+ ;
+
+
+
+ $podcast
+ ->
+ addCategory
+ (
+ $category
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ // Now add the episodes
+
+
+
+ foreach
+
+ (
+ $this
+ ->
+ sp
+ ->
+ get_items
+ (
+ )
+
+ as
+
+ $item
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ addEpisode
+ (
+ $this
+ ->
+ parseEpisodeItem
+ (
+ $item
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ return
+
+ $podcast
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Podcast $podcast
+
+
+ * @throws \Exception
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ parseRssTags
+ (
+ Podcast
+
+ $podcast
+ )
+
+
+
+ {
+
+
+
+ $generator
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ ''
+ ,
+
+ 'generator'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $generator
+
+ &&
+
+ count
+ (
+ $generator
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setGenerator
+ (
+ $generator
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $lastBuildDate
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ ''
+ ,
+
+ 'lastBuildDate'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $lastBuildDate
+
+ &&
+
+ count
+ (
+ $lastBuildDate
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setLastBuildDate
+ (
+ (
+ new
+
+ \
+ DateTime
+ (
+ )
+ )
+ ->
+ setTimestamp
+ (
+ strtotime
+ (
+ $lastBuildDate
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Podcast $podcast
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ parseAtomTags
+ (
+ Podcast
+
+ $podcast
+ )
+
+
+
+ {
+
+
+
+ $atomLinks
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_ATOM
+ ,
+
+ 'link'
+ )
+ ;
+
+
+
+ if
+ (
+ $atomLinks
+
+ &&
+
+ count
+ (
+ $atomLinks
+ )
+ )
+
+ {
+
+
+
+ foreach
+
+ (
+ $atomLinks
+
+ as
+
+ $atomLink
+ )
+
+ {
+
+
+
+ $link
+
+ =
+
+ new
+
+ Link
+ (
+ $atomLink
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'href'
+ ]
+ )
+ ;
+
+
+
+ if
+
+ (
+ isset
+ (
+ $atomLink
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'rel'
+ ]
+ )
+ )
+
+ {
+
+
+
+ $link
+ ->
+ setRel
+ (
+ $atomLink
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'rel'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ if
+
+ (
+ isset
+ (
+ $atomLink
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'type'
+ ]
+ )
+ )
+
+ {
+
+
+
+ $link
+ ->
+ setType
+ (
+ $atomLink
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'type'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ $podcast
+ ->
+ addAtomLink
+ (
+ $link
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Podcast $podcast
+
+
+ * @throws \Exception
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ parseSyndicationFields
+ (
+ Podcast
+
+ $podcast
+ )
+
+
+
+ {
+
+
+
+ $updatePeriod
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_SYNDICATION
+ ,
+
+ 'updatePeriod'
+ )
+ ;
+
+
+
+ if
+ (
+ $updatePeriod
+ &&
+ count
+ (
+ $updatePeriod
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setUpdatePeriod
+ (
+ $updatePeriod
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ $updateFrequency
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_SYNDICATION
+ ,
+
+ 'updateFrequency'
+ )
+ ;
+
+
+
+ if
+ (
+ $updateFrequency
+ &&
+ count
+ (
+ $updateFrequency
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setUpdateFrequency
+ (
+ intval
+ (
+ $updateFrequency
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+ $updateBase
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_SYNDICATION
+ ,
+
+ 'updateBase'
+ )
+ ;
+
+
+
+ if
+ (
+ $updateBase
+ &&
+ count
+ (
+ $updateBase
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setUpdateBase
+ (
+ (
+ new
+
+ \
+ DateTime
+ (
+ )
+ )
+ ->
+ setTimestamp
+ (
+ strtotime
+ (
+ $updateBase
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Podcast $podcast
+
+
+ * @throws \Exception
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ parseRawvoiceFields
+ (
+ Podcast
+
+ $podcast
+ )
+
+
+
+ {
+
+
+
+ $rating
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_RAWVOICE
+ ,
+
+ 'rating'
+ )
+ ;
+
+
+
+ if
+ (
+ $rating
+ &&
+ count
+ (
+ $rating
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setRawvoiceRating
+ (
+ $rating
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ $location
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_RAWVOICE
+ ,
+
+ 'location'
+ )
+ ;
+
+
+
+ if
+ (
+ $location
+ &&
+ count
+ (
+ $location
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setRawvoiceLocation
+ (
+ $location
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ $frequency
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_RAWVOICE
+ ,
+
+ 'frequency'
+ )
+ ;
+
+
+
+ if
+ (
+ $frequency
+ &&
+ count
+ (
+ $frequency
+ )
+ )
+
+ {
+
+
+
+ $podcast
+ ->
+ setRawvoiceFrequency
+ (
+ $frequency
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+ $subscribe
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ self
+ ::
+ NS_RAWVOICE
+ ,
+
+ 'subscribe'
+ )
+ ;
+
+
+
+ if
+ (
+ $subscribe
+ &&
+ count
+ (
+ $subscribe
+ )
+ )
+
+ {
+
+
+
+ $links
+
+ =
+
+ new
+
+ Subscribe
+ (
+ )
+ ;
+
+
+
+ foreach
+ (
+ $subscribe
+ [
+ 0
+ ]
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+
+ as
+
+ $platform
+
+ =>
+
+ $link
+ )
+
+ {
+
+
+
+ $links
+ ->
+ addLink
+ (
+ $platform
+ ,
+ $link
+ )
+ ;
+
+
+
+ }
+
+
+
+ $podcast
+ ->
+ setRawvoiceSubscribe
+ (
+ $links
+ )
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param \SimplePie_Item $item
+
+
+ * @return Episode
+
+
+ * @throws \Exception
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ parseEpisodeItem
+ (
+ \
+ SimplePie_Item
+
+ $item
+ )
+
+
+
+ {
+
+
+
+ $episode
+
+ =
+
+ new
+
+ Episode
+ (
+ )
+ ;
+
+
+
+ $episode
+ ->
+ setTitle
+ (
+ $item
+ ->
+ get_title
+ (
+ )
+ )
+
+
+
+ ->
+ setDescription
+ (
+ $item
+ ->
+ get_description
+ (
+ )
+ )
+
+
+
+ ->
+ setLink
+ (
+ $item
+ ->
+ get_link
+ (
+ )
+ )
+
+
+
+ ->
+ setPublishedDate
+ (
+ new
+
+ \
+ DateTime
+ (
+ $item
+ ->
+ get_date
+ (
+ )
+ )
+ )
+ ;
+
+
+
+
+ $guid
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ ''
+ ,
+
+ 'guid'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $guid
+
+ &&
+
+ count
+ (
+ $guid
+ )
+ )
+
+ {
+
+
+
+ $episode
+ ->
+ setGuid
+ (
+ $guid
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $subtitle
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'subtitle'
+ )
+ ;
+
+
+
+ if
+
+ (
+ $subtitle
+
+ &&
+
+ count
+ (
+ $subtitle
+ )
+ )
+
+ {
+
+
+
+ $episode
+ ->
+ setSubtitle
+ (
+ $subtitle
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $explicit
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'explicit'
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $explicit
+
+ &&
+
+ count
+ (
+ $explicit
+ )
+ )
+
+ {
+
+
+
+ $episode
+ ->
+ setExplicit
+ (
+ $explicit
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $episodeNumber
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'episode'
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $episodeNumber
+
+ &&
+
+ count
+ (
+ $episodeNumber
+ )
+ )
+
+ {
+
+
+
+ $episode
+ ->
+ setEpisodeNumber
+ (
+ intval
+ (
+ $episodeNumber
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $season
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'season'
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $season
+
+ &&
+
+ count
+ (
+ $season
+ )
+ )
+
+ {
+
+
+
+ $episode
+ ->
+ setSeason
+ (
+ intval
+ (
+ $season
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $episodeType
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'episodeType'
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $episodeType
+
+ &&
+
+ count
+ (
+ $episodeType
+ )
+ )
+
+ {
+
+
+
+ $episode
+ ->
+ setType
+ (
+ $episodeType
+ [
+ 0
+ ]
+ [
+ 'data'
+ ]
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $image
+
+ =
+
+ $item
+ ->
+ get_item_tags
+ (
+ self
+ ::
+ NS_ITUNES
+ ,
+
+ 'image'
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $image
+
+ &&
+
+ count
+ (
+ $image
+ )
+ )
+
+ {
+
+
+
+ $artwork
+
+ =
+
+ new
+
+ Artwork
+ (
+ )
+ ;
+
+
+
+ $artwork
+ ->
+ setUri
+ (
+
+
+
+ $image
+ [
+ 0
+ ]
+ [
+ 'attribs'
+ ]
+ [
+ ''
+ ]
+ [
+ 'href'
+ ]
+
+
+
+ )
+ ;
+
+
+
+ $episode
+ ->
+ setArtwork
+ (
+ $artwork
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ $enclosure
+
+ =
+
+ $item
+ ->
+ get_enclosure
+ (
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $enclosure
+
+ &&
+
+ $enclosure
+ ->
+ get_link
+ (
+ )
+ )
+
+ {
+
+
+
+ $media
+
+ =
+
+ new
+
+ Media
+ (
+ )
+ ;
+
+
+
+ $media
+ ->
+ setUri
+ (
+ $enclosure
+ ->
+ get_link
+ (
+ )
+ )
+
+
+
+ ->
+ setMimeType
+ (
+ $enclosure
+ ->
+ get_type
+ (
+ )
+ )
+
+
+
+ ->
+ setLength
+ (
+ $enclosure
+ ->
+ get_length
+ (
+ )
+ )
+ ;
+
+
+
+
+ $episode
+ ->
+ setMedia
+ (
+ $this
+ ->
+ getFile
+ (
+ $item
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ return
+
+ $episode
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param \SimplePie_Item $item
+
+
+ * @return Media
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ getFile
+ (
+ \
+ SimplePie_Item
+
+ $item
+ )
+ :
+
+ Media
+
+
+
+ {
+
+
+
+ $enclosure
+
+ =
+
+ $item
+ ->
+ get_enclosure
+ (
+ )
+ ;
+
+
+
+ $media
+
+ =
+
+ new
+
+ Media
+ (
+ )
+ ;
+
+
+
+ $media
+ ->
+ setUri
+ (
+ $enclosure
+ ->
+ get_link
+ (
+ )
+ )
+
+
+
+ ->
+ setMimeType
+ (
+ $enclosure
+ ->
+ get_type
+ (
+ )
+ )
+
+
+
+ ->
+ setLength
+ (
+ $enclosure
+ ->
+ get_length
+ (
+ )
+ )
+ ;
+
+
+
+ return
+
+ $media
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param $namespace
+
+
+ * @param $name
+
+
+ * @param null $item
+
+
+ * @return mixed
+
+
+ */
+
+
+
+ protected
+
+ function
+
+ getSingleNamespacedChannelItem
+ (
+ $namespace
+ ,
+
+ $name
+ ,
+
+ $item
+
+ =
+
+ null
+
+ )
+
+
+
+ {
+
+
+
+ $items
+
+ =
+
+ $this
+ ->
+ sp
+ ->
+ get_channel_tags
+ (
+ $namespace
+ ,
+
+ $name
+ )
+ ;
+
+
+
+ if
+
+ (
+
+ $items
+
+ &&
+
+ count
+ (
+
+ $items
+
+ )
+
+ )
+
+ {
+
+
+
+ return
+
+ $items
+ [
+ 0
+ ]
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Podcast.php.xml b/docs/xml/tokens/Podcast.php.xml
new file mode 100644
index 0000000..3567c78
--- /dev/null
+++ b/docs/xml/tokens/Podcast.php.xml
@@ -0,0 +1,807 @@
+
+
+
+
+ <?php
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasArtwork
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasAtomTags
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasCategories
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasDescription
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasExplicit
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasItunesTags
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasLink
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasRawvoiceTags
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasSyndicationTags
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ HasTitles
+ ;
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ \
+ IsRssFeed
+ ;
+
+
+
+ class
+
+ Podcast
+
+ implements
+
+ \
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Contracts
+ \
+ HasArtwork
+
+
+ {
+
+
+
+ use
+
+ HasTitles
+
+
+
+ ,
+
+ HasDescription
+
+
+
+ ,
+
+ IsRssFeed
+
+
+
+ ,
+
+ HasItunesTags
+
+
+
+ ,
+
+ HasAtomTags
+
+
+
+ ,
+
+ HasSyndicationTags
+
+
+
+ ,
+
+ HasRawvoiceTags
+
+
+
+ ,
+
+ HasArtwork
+
+
+
+ ,
+
+ HasLink
+
+
+
+ ,
+
+ HasExplicit
+
+
+
+ ,
+
+ HasCategories
+ ;
+
+
+
+
+ const
+
+ EPISODIC
+
+ =
+
+ 'episodic'
+ ;
+
+
+
+ const
+
+ SERIAL
+
+ =
+
+ 'serial'
+ ;
+
+
+
+
+ /**
+
+
+ * @var array
+
+
+ */
+
+
+
+ protected
+
+ $episodes
+
+ =
+
+ [
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $language
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $author
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $managingEditor
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $copyright
+ ;
+
+
+
+
+ /**
+
+
+ * @return array
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getEpisodes
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ episodes
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Episode $episode
+
+
+ * @return $this
+
+
+ */
+
+
+
+ public
+
+ function
+
+ addEpisode
+ (
+ Episode
+
+ $episode
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ episodes
+ [
+ ]
+
+ =
+
+ $episode
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getLanguage
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ language
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $language
+
+
+ * @return Podcast
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setLanguage
+ (
+ $language
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ language
+
+ =
+
+ $language
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getAuthor
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ author
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $author
+
+
+ * @return Podcast
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setAuthor
+ (
+ $author
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ author
+
+ =
+
+ $author
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getManagingEditor
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ managingEditor
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $managingEditor
+
+
+ * @return Podcast
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setManagingEditor
+ (
+ $managingEditor
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ managingEditor
+
+ =
+
+ $managingEditor
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getCopyright
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ copyright
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $copyright
+
+
+ * @return Podcast
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setCopyright
+ (
+ $copyright
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ copyright
+
+ =
+
+ $copyright
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Rawvoice/Subscribe.php.xml b/docs/xml/tokens/Rawvoice/Subscribe.php.xml
new file mode 100644
index 0000000..208fecf
--- /dev/null
+++ b/docs/xml/tokens/Rawvoice/Subscribe.php.xml
@@ -0,0 +1,319 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Rawvoice
+ ;
+
+
+
+ /**
+
+
+ * Class Subscribe
+
+
+ *
+
+
+ * @package Lukaswhite\PodcastFeedParser\Rawvoice
+
+
+ */
+
+
+ class
+
+ Subscribe
+
+
+ {
+
+
+
+ const
+
+ FEED
+
+ =
+
+ 'feed'
+ ;
+
+
+
+ const
+
+ ITUNES
+
+ =
+
+ 'itunes'
+ ;
+
+
+
+ const
+
+ GOOGLEPLAY
+
+ =
+
+ 'googleplay'
+ ;
+
+
+
+ const
+
+ BLUBRRY
+
+ =
+
+ 'blubrry'
+ ;
+
+
+
+ const
+
+ HTML
+
+ =
+
+ 'html'
+ ;
+
+
+
+ const
+
+ STITCHER
+
+ =
+
+ 'stitcher'
+ ;
+
+
+
+ const
+
+ TUNEIN
+
+ =
+
+ 'tunein'
+ ;
+
+
+
+
+ /**
+
+
+ * @var array
+
+
+ */
+
+
+
+ protected
+
+ $links
+
+ =
+
+ [
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * @return array
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getLinks
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ links
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $platform
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getLink
+ (
+ string
+
+ $platform
+ )
+ :
+
+ ?
+ string
+
+
+
+ {
+
+
+
+ return
+
+ isset
+ (
+ $this
+ ->
+ links
+ [
+ $platform
+ ]
+ )
+
+ ?
+
+ $this
+ ->
+ links
+ [
+ $platform
+ ]
+
+ :
+
+ null
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $platform
+
+
+ * @param string $link
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ addLink
+ (
+ string
+
+ $platform
+ ,
+
+ string
+
+ $link
+ )
+ :
+
+ self
+
+
+
+ {
+
+
+
+ $this
+ ->
+ links
+ [
+ $platform
+ ]
+
+ =
+
+ $link
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasArtwork.php.xml b/docs/xml/tokens/Traits/HasArtwork.php.xml
new file mode 100644
index 0000000..c8f250c
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasArtwork.php.xml
@@ -0,0 +1,149 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Artwork
+ ;
+
+
+
+ trait
+
+ HasArtwork
+
+
+ {
+
+
+
+ /**
+
+
+ * @var Artwork
+
+
+ */
+
+
+
+ protected
+
+ $artwork
+ ;
+
+
+
+
+ /**
+
+
+ * @return Artwork
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getArtwork
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ artwork
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Artwork $artwork
+
+
+ * @return HasArtwork
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setArtwork
+ (
+ $artwork
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ artwork
+
+ =
+
+ $artwork
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasAtomTags.php.xml b/docs/xml/tokens/Traits/HasAtomTags.php.xml
new file mode 100644
index 0000000..67e6be8
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasAtomTags.php.xml
@@ -0,0 +1,158 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Link
+ ;
+
+
+
+ trait
+
+ HasAtomTags
+
+
+ {
+
+
+
+ /**
+
+
+ * @var array
+
+
+ */
+
+
+
+ protected
+
+ $atomLinks
+
+ =
+
+ [
+ ]
+ ;
+
+
+
+
+ /**
+
+
+ * @return array
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getAtomLinks
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ atomLinks
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Link $link
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ addAtomLink
+ (
+ Link
+
+ $link
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ atomLinks
+ [
+ ]
+
+ =
+
+ $link
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasCategories.php.xml b/docs/xml/tokens/Traits/HasCategories.php.xml
new file mode 100644
index 0000000..fd8fea3
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasCategories.php.xml
@@ -0,0 +1,249 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Category
+ ;
+
+
+
+ /**
+
+
+ * Trait HasCategories
+
+
+ * @package Lukaswhite\PodcastFeedParser\Traits
+
+
+ */
+
+
+ trait
+
+ HasCategories
+
+
+ {
+
+
+
+ /**
+
+
+ * @var array
+
+
+ */
+
+
+
+ protected
+
+ $categories
+ ;
+
+
+
+
+ /**
+
+
+ * @param string $type
+
+
+ * @return array
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getCategories
+ (
+ string
+
+ $type
+
+ =
+
+ null
+ )
+
+
+
+ {
+
+
+
+ if
+
+ (
+ !
+ $type
+ )
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ categories
+ ;
+
+
+
+ }
+
+
+
+ return
+
+ array_values
+ (
+ array_filter
+ (
+
+
+
+ $this
+ ->
+ categories
+ ,
+
+
+
+ function
+ (
+ Category
+
+ $category
+ )
+
+ use
+
+ (
+ $type
+ )
+ {
+
+
+
+ return
+
+ $category
+ ->
+ getType
+ (
+ )
+
+ ===
+
+ $type
+ ;
+
+
+
+ }
+
+
+
+ )
+ )
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Category $category
+
+
+ * @return $this
+
+
+ */
+
+
+
+ public
+
+ function
+
+ addCategory
+ (
+ Category
+
+ $category
+ )
+ :
+
+ self
+
+
+
+ {
+
+
+
+ $this
+ ->
+ categories
+ [
+ ]
+
+ =
+
+ $category
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasDescription.php.xml b/docs/xml/tokens/Traits/HasDescription.php.xml
new file mode 100644
index 0000000..b1505ff
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasDescription.php.xml
@@ -0,0 +1,137 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ trait
+
+ HasDescription
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $description
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getDescription
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ description
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $description
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setDescription
+ (
+ $description
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ description
+
+ =
+
+ $description
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasExplicit.php.xml b/docs/xml/tokens/Traits/HasExplicit.php.xml
new file mode 100644
index 0000000..c6e596d
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasExplicit.php.xml
@@ -0,0 +1,138 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ trait
+
+ HasExplicit
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $explicit
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getExplicit
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ explicit
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $explicit
+
+
+ * @return HasExplicit
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setExplicit
+ (
+ $explicit
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ explicit
+
+ =
+
+ $explicit
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasItunesTags.php.xml b/docs/xml/tokens/Traits/HasItunesTags.php.xml
new file mode 100644
index 0000000..3a062fb
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasItunesTags.php.xml
@@ -0,0 +1,462 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Owner
+ ;
+
+
+
+ trait
+
+ HasItunesTags
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $type
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $newFeedUrl
+ ;
+
+
+
+
+ /**
+
+
+ * @var Owner
+
+
+ */
+
+
+
+ protected
+
+ $owner
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getType
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ type
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return bool
+
+
+ */
+
+
+
+ public
+
+ function
+
+ isEpisodic
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ type
+
+ &&
+
+ $this
+ ->
+ type
+
+ ===
+
+ self
+ ::
+ EPISODIC
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return bool
+
+
+ */
+
+
+
+ public
+
+ function
+
+ isSerial
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ type
+
+ &&
+
+ $this
+ ->
+ type
+
+ ===
+
+ self
+ ::
+ SERIAL
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $type
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setType
+ (
+ $type
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ type
+
+ =
+
+ $type
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getNewFeedUrl
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ newFeedUrl
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $newFeedUrl
+
+
+ * @return HasItunesTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setNewFeedUrl
+ (
+ $newFeedUrl
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ newFeedUrl
+
+ =
+
+ $newFeedUrl
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return Owner
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getOwner
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ owner
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Owner $owner
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setOwner
+ (
+ $owner
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ owner
+
+ =
+
+ $owner
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasLink.php.xml b/docs/xml/tokens/Traits/HasLink.php.xml
new file mode 100644
index 0000000..f192a47
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasLink.php.xml
@@ -0,0 +1,140 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ trait
+
+ HasLink
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $link
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getLink
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ link
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $link
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setLink
+ (
+ $link
+ )
+ :
+
+ self
+
+
+
+ {
+
+
+
+ $this
+ ->
+ link
+
+ =
+
+ $link
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasRawvoiceTags.php.xml b/docs/xml/tokens/Traits/HasRawvoiceTags.php.xml
new file mode 100644
index 0000000..0a24a2a
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasRawvoiceTags.php.xml
@@ -0,0 +1,471 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Rawvoice
+ \
+ Subscribe
+ ;
+
+
+
+ trait
+
+ HasRawvoiceTags
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $rawvoiceRating
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $rawvoiceLocation
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $rawvoiceFrequency
+ ;
+
+
+
+
+ /**
+
+
+ * @var Subscribe
+
+
+ */
+
+
+
+ protected
+
+ $rawvoiceSubscribe
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getRawvoiceRating
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ rawvoiceRating
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $rawvoiceRating
+
+
+ * @return HasRawvoiceTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setRawvoiceRating
+ (
+ $rawvoiceRating
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ rawvoiceRating
+
+ =
+
+ $rawvoiceRating
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getRawvoiceLocation
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ rawvoiceLocation
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $rawvoiceLocation
+
+
+ * @return HasRawvoiceTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setRawvoiceLocation
+ (
+ $rawvoiceLocation
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ rawvoiceLocation
+
+ =
+
+ $rawvoiceLocation
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getRawvoiceFrequency
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ rawvoiceFrequency
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $rawvoiceFrequency
+
+
+ * @return HasRawvoiceTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setRawvoiceFrequency
+ (
+ $rawvoiceFrequency
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ rawvoiceFrequency
+
+ =
+
+ $rawvoiceFrequency
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return Subscribe
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getRawvoiceSubscribe
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ rawvoiceSubscribe
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param Subscribe $rawvoiceSubscribe
+
+
+ * @return HasRawvoiceTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setRawvoiceSubscribe
+ (
+ $rawvoiceSubscribe
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ rawvoiceSubscribe
+
+ =
+
+ $rawvoiceSubscribe
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasSyndicationTags.php.xml b/docs/xml/tokens/Traits/HasSyndicationTags.php.xml
new file mode 100644
index 0000000..516214c
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasSyndicationTags.php.xml
@@ -0,0 +1,355 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ trait
+
+ HasSyndicationTags
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $updatePeriod
+ ;
+
+
+
+
+ /**
+
+
+ * @var int
+
+
+ */
+
+
+
+ protected
+
+ $updateFrequency
+ ;
+
+
+
+
+ /**
+
+
+ * @var \DateTime
+
+
+ */
+
+
+
+ protected
+
+ $updateBase
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getUpdatePeriod
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ updatePeriod
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $updatePeriod
+
+
+ * @return HasSyndicationTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setUpdatePeriod
+ (
+ $updatePeriod
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ updatePeriod
+
+ =
+
+ $updatePeriod
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return int
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getUpdateFrequency
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ updateFrequency
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param int $updateFrequency
+
+
+ * @return HasSyndicationTags
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setUpdateFrequency
+ (
+ $updateFrequency
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ updateFrequency
+
+ =
+
+ $updateFrequency
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return \DateTime
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getUpdateBase
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ updateBase
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param \DateTime $updateBase
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setUpdateBase
+ (
+ \
+ DateTime
+
+ $updateBase
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ updateBase
+
+ =
+
+ $updateBase
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasTitles.php.xml b/docs/xml/tokens/Traits/HasTitles.php.xml
new file mode 100644
index 0000000..b0ab5f4
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasTitles.php.xml
@@ -0,0 +1,244 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ trait
+
+ HasTitles
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $title
+ ;
+
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $subtitle
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getTitle
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ title
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $title
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setTitle
+ (
+ $title
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ title
+
+ =
+
+ $title
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getSubtitle
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ subtitle
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $subtitle
+
+
+ * @return self
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setSubtitle
+ (
+ $subtitle
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ subtitle
+
+ =
+
+ $subtitle
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/HasUri.php.xml b/docs/xml/tokens/Traits/HasUri.php.xml
new file mode 100644
index 0000000..cfc8e25
--- /dev/null
+++ b/docs/xml/tokens/Traits/HasUri.php.xml
@@ -0,0 +1,149 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Artwork
+ ;
+
+
+
+ trait
+
+ HasUri
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $uri
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getUri
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ uri
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $uri
+
+
+ * @return HasUri
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setUri
+ (
+ $uri
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ uri
+
+ =
+
+ $uri
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/tokens/Traits/IsRssFeed.php.xml b/docs/xml/tokens/Traits/IsRssFeed.php.xml
new file mode 100644
index 0000000..f5bd028
--- /dev/null
+++ b/docs/xml/tokens/Traits/IsRssFeed.php.xml
@@ -0,0 +1,256 @@
+
+
+
+
+ <?php
+
+
+
+
+ namespace
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Traits
+ ;
+
+
+
+ use
+
+ Lukaswhite
+ \
+ PodcastFeedParser
+ \
+ Artwork
+ ;
+
+
+
+ trait
+
+ IsRssFeed
+
+
+ {
+
+
+
+ /**
+
+
+ * @var string
+
+
+ */
+
+
+
+ protected
+
+ $generator
+ ;
+
+
+
+
+ /**
+
+
+ * @var \DateTime
+
+
+ */
+
+
+
+ protected
+
+ $lastBuildDate
+ ;
+
+
+
+
+ /**
+
+
+ * @return string
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getGenerator
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ generator
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param string $generator
+
+
+ * @return IsRssFeed
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setGenerator
+ (
+ $generator
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ generator
+
+ =
+
+ $generator
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @return \DateTime
+
+
+ */
+
+
+
+ public
+
+ function
+
+ getLastBuildDate
+ (
+ )
+
+
+
+ {
+
+
+
+ return
+
+ $this
+ ->
+ lastBuildDate
+ ;
+
+
+
+ }
+
+
+
+
+ /**
+
+
+ * @param \DateTime $lastBuildDate
+
+
+ * @return IsRssFeed
+
+
+ */
+
+
+
+ public
+
+ function
+
+ setLastBuildDate
+ (
+ $lastBuildDate
+ )
+
+
+
+ {
+
+
+
+ $this
+ ->
+ lastBuildDate
+
+ =
+
+ $lastBuildDate
+ ;
+
+
+
+ return
+
+ $this
+ ;
+
+
+
+ }
+
+
+
+ }
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork.xml
new file mode 100644
index 0000000..d1a8bb5
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasArtwork.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags.xml
new file mode 100644
index 0000000..43d3b7a
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasAtomTags.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories.xml
new file mode 100644
index 0000000..1790baa
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasCategories.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription.xml
new file mode 100644
index 0000000..8ccd81c
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasDescription.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit.xml
new file mode 100644
index 0000000..4a35eb4
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasExplicit.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags.xml
new file mode 100644
index 0000000..fdcbc88
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasItunesTags.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink.xml
new file mode 100644
index 0000000..b0a3ed5
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasLink.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags.xml
new file mode 100644
index 0000000..a850df5
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasRawvoiceTags.xml
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags.xml
new file mode 100644
index 0000000..339f7f6
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasSyndicationTags.xml
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles.xml
new file mode 100644
index 0000000..c8d3693
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasTitles.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri.xml
new file mode 100644
index 0000000..cceeee6
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_HasUri.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed.xml b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed.xml
new file mode 100644
index 0000000..7d46819
--- /dev/null
+++ b/docs/xml/traits/Lukaswhite_PodcastFeedParser_Traits_IsRssFeed.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phpdox.xml b/phpdox.xml
new file mode 100644
index 0000000..568c204
--- /dev/null
+++ b/phpdox.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phploc.xml b/phploc.xml
new file mode 100644
index 0000000..555fe1d
--- /dev/null
+++ b/phploc.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100644
index 0000000..2d56abf
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,33 @@
+
+
+
+
+
+ tests
+
+
+
+
+
+ ./src
+
+ src/autoload.php
+ vendor
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Artwork.php b/src/Artwork.php
new file mode 100644
index 0000000..d058d57
--- /dev/null
+++ b/src/Artwork.php
@@ -0,0 +1,11 @@
+type;
+ }
+
+ /**
+ * @param string $type
+ * @return Category
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Config.php b/src/Config.php
new file mode 100644
index 0000000..da9791c
--- /dev/null
+++ b/src/Config.php
@@ -0,0 +1,52 @@
+descriptionOnly = $descriptionOnly;
+ }
+
+ /*
+ * By default, if no published date is present then it will use today's date. You can disable
+ * that here.
+ *
+ * @return void
+ */
+ public function dontDefaultToToday()
+ {
+ $this->defaultToToday = false;
+ }
+
+ public function checkDescriptionOnly(): bool
+ {
+ return $this->descriptionOnly;
+ }
+
+ public function shouldDefaultToToday()
+ {
+ return $this->defaultToToday;
+ }
+}
\ No newline at end of file
diff --git a/src/Contracts/HasArtwork.php b/src/Contracts/HasArtwork.php
new file mode 100644
index 0000000..c97a0ac
--- /dev/null
+++ b/src/Contracts/HasArtwork.php
@@ -0,0 +1,10 @@
+guid;
+ }
+
+ /**
+ * @param string $guid
+ * @return Episode
+ */
+ public function setGuid($guid)
+ {
+ $this->guid = $guid;
+ return $this;
+ }
+
+ /**
+ * @return bool
+ */
+ public function guidIsPermalink()
+ {
+ return $this->guidIsPermalink;
+ }
+
+ /**
+ * @param bool $guidIsPermalink
+ * @return Episode
+ */
+ public function setGuidIsPermalink(bool $guidIsPermalink)
+ {
+ $this->guidIsPermalink = $guidIsPermalink;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param string $type
+ * @return Episode
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getEpisodeNumber()
+ {
+ return $this->episodeNumber;
+ }
+
+ /**
+ * @param int $episodeNumber
+ * @return Episode
+ */
+ public function setEpisodeNumber($episodeNumber)
+ {
+ $this->episodeNumber = $episodeNumber;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getSeason()
+ {
+ return $this->season;
+ }
+
+ /**
+ * @param int $season
+ * @return Episode
+ */
+ public function setSeason($season)
+ {
+ $this->season = $season;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getDuration()
+ {
+ return $this->duration;
+ }
+
+ /**
+ * @param string $duration
+ * @return Episode
+ */
+ public function setDuration($duration)
+ {
+ $this->duration = $duration;
+ return $this;
+ }
+
+ /**
+ * @return Media
+ */
+ public function getMedia()
+ {
+ return $this->media;
+ }
+
+ /**
+ * @param Media $media
+ * @return Episode
+ */
+ public function setMedia($media)
+ {
+ $this->media = $media;
+ return $this;
+ }
+
+ /**
+ * @return \DateTime
+ */
+ public function getPublishedDate()
+ {
+ return $this->publishedDate;
+ }
+
+ /**
+ * @param \DateTime $publishedDate
+ * @return Episode
+ */
+ public function setPublishedDate($publishedDate)
+ {
+ $this->publishedDate = $publishedDate;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Episodes.php b/src/Episodes.php
new file mode 100644
index 0000000..d6248db
--- /dev/null
+++ b/src/Episodes.php
@@ -0,0 +1,238 @@
+items = $items;
+ }
+
+ /**
+ * @param Episode $episode
+ * @return $this
+ */
+ public function add(Episode $episode): self
+ {
+ $this->items[] = $episode;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function count()
+ {
+ return count($this->items);
+ }
+
+ /**
+ * @return \ArrayIterator|\Traversable
+ */
+ public function getIterator()
+ {
+ return new \ArrayIterator($this->items);
+ }
+
+ /**
+ * Get the first episode
+ *
+ * @return Episode|null
+ */
+ public function first(): ?Episode
+ {
+ if ( ! $this->count( ) ) {
+ return null;
+ }
+ return $this->items[0];
+ }
+
+ /**
+ * Get the most recent episode
+ *
+ * @return Episode|null
+ */
+ public function mostRecent(): ?Episode
+ {
+ $this->newestFirst();
+ return $this->first();
+ }
+
+ /**
+ * Get the last episode
+ *
+ * @return Episode|null
+ */
+ public function last(): ?Episode
+ {
+ if ( ! $this->count( ) ) {
+ return null;
+ }
+ return $this->items[$this->count()-1];
+ }
+
+ /**
+ * Find an episode by its GUID
+ *
+ * @param string $guid
+ * @return Episode
+ */
+ public function findByGuid(string $guid): ?Episode
+ {
+ $episode = current(array_filter(
+ $this->items,
+ function(Episode $episode) use ($guid) {
+ return $episode->getGuid() === $guid;
+ }
+ ));
+ if ( $episode ) {
+ return $episode;
+ }
+ return null;
+ }
+
+ /**
+ * @return self
+ */
+ public function newestFirst(): self
+ {
+ usort(
+ $this->items,
+ function(Episode $a, Episode $b) {
+ return $b->getPublishedDate()->getTimestamp() - $a->getPublishedDate()->getTimestamp();
+ }
+ );
+ return $this;
+ }
+
+ /**
+ * @return self
+ */
+ public function oldestFirst(): self
+ {
+ usort(
+ $this->items,
+ function(Episode $a, Episode $b) {
+ return $a->getPublishedDate()->getTimestamp() - $b->getPublishedDate()->getTimestamp();
+ }
+ );
+ return $this;
+ }
+
+ /**
+ * @return self
+ */
+ public function sortByEpisodeNumber(): self
+ {
+ usort(
+ $this->items,
+ function(Episode $a, Episode $b) {
+ return $a->getEpisodeNumber() - $b->getEpisodeNumber();
+ }
+ );
+ return $this;
+ }
+
+ /**
+ * @return array
+ */
+ public function getSeasons(): array
+ {
+ $seasons = [];
+ foreach($this->items as $episode) {
+ /** @ var Episode $episode */
+ if ($episode->getSeason()) {
+ if (!isset($seasons[$episode->getSeason()])) {
+ $seasons[$episode->getSeason()] = new Episodes();
+ }
+ $seasons[$episode->getSeason()]->add($episode);
+ }
+ }
+ ksort($seasons);
+ foreach($seasons as $season) {
+ /** @var Episodes $season */
+ $season->sortByEpisodeNumber();
+ }
+ return $seasons;
+ }
+
+ /**
+ * Whether a offset exists
+ * @link https://php.net/manual/en/arrayaccess.offsetexists.php
+ * @param mixed $offset
+ * An offset to check for.
+ *
+ * @return bool true on success or false on failure.
+ *
+ *
+ * The return value will be casted to boolean if non-boolean was returned.
+ * @since 5.0
+ */
+ public function offsetExists($offset)
+ {
+ return isset($this->items[$offset]);
+ }
+
+ /**
+ * Offset to retrieve
+ * @link https://php.net/manual/en/arrayaccess.offsetget.php
+ * @param mixed $offset
+ * The offset to retrieve.
+ *
+ * @return mixed Can return all value types.
+ * @since 5.0
+ */
+ public function offsetGet($offset)
+ {
+ return $this->items[$offset];
+ }
+
+ /**
+ * Offset to set
+ * @link https://php.net/manual/en/arrayaccess.offsetset.php
+ * @param mixed $offset
+ * The offset to assign the value to.
+ *
+ * @param mixed $value
+ * The value to set.
+ *
+ * @return void
+ * @since 5.0
+ */
+ public function offsetSet($offset, $value)
+ {
+ // noop
+ }
+
+ /**
+ * Offset to unset
+ * @link https://php.net/manual/en/arrayaccess.offsetunset.php
+ * @param mixed $offset
+ * The offset to unset.
+ *
+ * @return void
+ * @since 5.0
+ */
+ public function offsetUnset($offset)
+ {
+ // noop
+ }
+}
\ No newline at end of file
diff --git a/src/Exceptions/FileNotFoundException.php b/src/Exceptions/FileNotFoundException.php
new file mode 100644
index 0000000..692d27e
--- /dev/null
+++ b/src/Exceptions/FileNotFoundException.php
@@ -0,0 +1,10 @@
+uri = $uri;
+ }
+
+ /**
+ * @return string
+ */
+ public function getUri()
+ {
+ return $this->uri;
+ }
+
+ /**
+ * @return string
+ */
+ public function getRel()
+ {
+ return $this->rel;
+ }
+
+ /**
+ * @param string $rel
+ * @return Link
+ */
+ public function setRel($rel)
+ {
+ $this->rel = $rel;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * @param string $type
+ * @return Link
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Media.php b/src/Media.php
new file mode 100644
index 0000000..baecbe3
--- /dev/null
+++ b/src/Media.php
@@ -0,0 +1,52 @@
+length;
+ }
+
+ /**
+ * @param mixed $length
+ * @return Media
+ */
+ public function setLength($length)
+ {
+ $this->length = $length;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getMimeType()
+ {
+ return $this->mimeType;
+ }
+
+ /**
+ * @param mixed $mimeType
+ * @return Media
+ */
+ public function setMimeType($mimeType)
+ {
+ $this->mimeType = $mimeType;
+ return $this;
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/Owner.php b/src/Owner.php
new file mode 100644
index 0000000..d51f249
--- /dev/null
+++ b/src/Owner.php
@@ -0,0 +1,53 @@
+name;
+ }
+
+ /**
+ * @param mixed $name
+ * @return Owner
+ */
+ public function setName($name)
+ {
+ $this->name = $name;
+ return $this;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getEmail()
+ {
+ return $this->email;
+ }
+
+ /**
+ * @param mixed $email
+ * @return Owner
+ */
+ public function setEmail($email)
+ {
+ $this->email = $email;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Parser.php b/src/Parser.php
new file mode 100644
index 0000000..928434e
--- /dev/null
+++ b/src/Parser.php
@@ -0,0 +1,428 @@
+config = $config ?? new Config();
+ }
+
+ /**
+ * @param string $content
+ * @return $this
+ * @throws InvalidXmlException
+ */
+ public function setContent(string $content): self
+ {
+ try {
+ simplexml_load_string($content);
+ } catch (\Exception $e) {
+ throw new InvalidXmlException('The feed does not appear to be valid XML');
+ }
+
+ $this->content = $content;
+ return $this;
+ }
+
+ /**
+ * @param string $filepath
+ * @return self
+ * @throws FileNotFoundException
+ * @throws InvalidXmlException
+ */
+ public function load(string $filepath): self
+ {
+ if (!file_exists($filepath)) {
+ throw new FileNotFoundException('The file could not be found');
+ }
+ $this->setContent(file_get_contents($filepath));
+ return $this;
+ }
+
+ /**
+ * Run the parser and return an object that represents the parsed podcast.
+ *
+ * @return Podcast
+ * @throws \Exception
+ */
+ public function run(): Podcast
+ {
+ $this->sp = new \SimplePie();
+ $this->sp->set_raw_data($this->content);
+ $this->sp->init();
+
+ $podcast = new Podcast();
+ $podcast->setTitle($this->sp->get_title())
+ ->setLanguage($this->sp->get_language())
+ ->setCopyright($this->sp->get_copyright())
+ ->setLink($this->sp->get_link());
+
+ if ( ! $this->config->checkDescriptionOnly( ) ) {
+ $podcast->setDescription($this->sp->get_description());
+ } else {
+ $description = $this->sp->get_channel_tags('', 'description');
+ if ($description && count($description)) {
+ $podcast->setDescription($this->sp->sanitize($description[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML));
+ }
+ }
+
+ $this->parseRssTags($podcast);
+ $this->parseAtomTags($podcast);
+ $this->parseSyndicationFields($podcast);
+ $this->parseRawvoiceFields($podcast);
+
+ if ($this->sp->get_author()) {
+ $podcast->setAuthor($this->sp->get_author()->get_name());
+ }
+
+ $iTunesType = $this->sp->get_channel_tags(self::NS_ITUNES, 'type');
+ if ($iTunesType && count($iTunesType)) {
+ $podcast->setType($this->sanitize($iTunesType[0]['data']));
+ }
+
+ $editor = $this->sp->get_channel_tags('', 'managingEditor');
+ if ($editor && count($editor)) {
+ $podcast->setManagingEditor($this->sanitize($editor[0]['data']));
+ }
+
+ if ( $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'subtitle')) {
+ $podcast->setSubtitle(
+ $this->sanitize(
+ $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'subtitle')['data']
+ )
+ );
+ }
+
+ if ( $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'explicit')) {
+ $podcast->setExplicit(
+ $this->sanitize(
+ $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'explicit')['data']
+ )
+ );
+ }
+
+ if ( $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'new-feed-url')) {
+ $podcast->setNewFeedUrl(
+ $this->sanitize(
+ $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'new-feed-url')['data']
+ )
+ );
+ }
+
+ $image = $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'image');
+ if ( $image ) {
+ $artwork = new Artwork();
+ $artwork->setUri(
+ $this->sanitize(
+ $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'image')['attribs']['']['href']
+ )
+ );
+ $podcast->setArtwork($artwork);
+ }
+
+ if ( $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'owner')) {
+ $ownerData = $this->getSingleNamespacedChannelItem(self::NS_ITUNES, 'owner');
+ $owner = new Owner();
+ if (isset($ownerData['child'])&&
+ isset($ownerData['child'][self::NS_ITUNES])&&
+ isset($ownerData['child'][self::NS_ITUNES]['name'])) {
+ $owner->setName(
+ $this->sanitize($ownerData['child'][self::NS_ITUNES]['name'][0]['data'])
+ );
+ }
+ if (isset($ownerData['child'])&&
+ isset($ownerData['child'][self::NS_ITUNES])&&
+ isset($ownerData['child'][self::NS_ITUNES]['email'])) {
+ $owner->setEmail(
+ $this->sanitize(
+ $ownerData['child'][self::NS_ITUNES]['email'][0]['data']
+ ));
+ }
+ $podcast->setOwner($owner);
+ }
+
+ $itunesCategories = $this->sp->get_channel_tags(self::NS_ITUNES, 'category');
+ if ($itunesCategories && count($itunesCategories)) {
+ foreach($itunesCategories as $categoryData) {
+ $key = $this->sanitize($categoryData['attribs']['']['text']);
+ $category = new Category($key, $key);
+ $category->setType(Category::ITUNES);
+ if(isset($categoryData['child'])&&is_array($categoryData['child'])) {
+ foreach($categoryData['child'][self::NS_ITUNES]['category'] as $subCategoryData) {
+ $childKey = $this->sanitize($subCategoryData['attribs']['']['text']);
+ $category->addChild(
+ ( new Category($childKey, $childKey) )->setType(Category::ITUNES)
+ );
+ }
+ }
+ $podcast->addCategory($category);
+ }
+ }
+
+ $googlePlayCategories = $this->sp->get_channel_tags(self::NS_GOOGLE_PLAY, 'category');
+ if ($googlePlayCategories && count($googlePlayCategories)) {
+ foreach($googlePlayCategories as $categoryData) {
+ $name = $this->sanitize($categoryData['attribs']['']['text']);
+ $category = new Category($name,$name);
+ $category->setType(Category::GOOGLE_PLAY);
+ $podcast->addCategory($category);
+ }
+ }
+
+ // Now add the episodes
+ foreach ($this->sp->get_items() as $item) {
+ $podcast->addEpisode($this->parseEpisodeItem($item));
+ }
+
+ return $podcast;
+ }
+
+ /**
+ * @param Podcast $podcast
+ * @throws \Exception
+ */
+ protected function parseRssTags(Podcast $podcast)
+ {
+ $generator = $this->sp->get_channel_tags('', 'generator');
+ if ($generator && count($generator)) {
+ $podcast->setGenerator($this->sanitize($generator[0]['data']));
+ }
+
+ $lastBuildDate = $this->sp->get_channel_tags('', 'lastBuildDate');
+ if ($lastBuildDate && count($lastBuildDate)) {
+ $podcast->setLastBuildDate((new \DateTime())->setTimestamp(strtotime($lastBuildDate[0]['data'])));
+ }
+ }
+
+ /**
+ * @param Podcast $podcast
+ */
+ protected function parseAtomTags(Podcast $podcast)
+ {
+ $atomLinks = $this->sp->get_channel_tags(self::NS_ATOM, 'link');
+ if($atomLinks && count($atomLinks)) {
+ foreach ($atomLinks as $atomLink) {
+ $link = new Link($this->sanitize($atomLink['attribs']['']['href']));
+ if (isset($atomLink['attribs']['']['rel'])) {
+ $link->setRel($atomLink['attribs']['']['rel']);
+ }
+ if (isset($atomLink['attribs']['']['type'])) {
+ $link->setType($atomLink['attribs']['']['type']);
+ }
+ $podcast->addAtomLink($link);
+ }
+ }
+ }
+
+ /**
+ * @param Podcast $podcast
+ * @throws \Exception
+ */
+ protected function parseSyndicationFields(Podcast $podcast)
+ {
+ $updatePeriod = $this->sp->get_channel_tags(self::NS_SYNDICATION, 'updatePeriod');
+ if($updatePeriod&&count($updatePeriod)) {
+ $podcast->setUpdatePeriod($this->sanitize($updatePeriod[0]['data']));
+ }
+ $updateFrequency = $this->sp->get_channel_tags(self::NS_SYNDICATION, 'updateFrequency');
+ if($updateFrequency&&count($updateFrequency)) {
+ $podcast->setUpdateFrequency(intval($this->sanitize($updateFrequency[0]['data'])));
+ }
+ $updateBase = $this->sp->get_channel_tags(self::NS_SYNDICATION, 'updateBase');
+ if($updateBase&&count($updateBase)) {
+ $podcast->setUpdateBase((new \DateTime())->setTimestamp(strtotime($updateBase[0]['data'])));
+ }
+ }
+
+ /**
+ * @param Podcast $podcast
+ * @throws \Exception
+ */
+ protected function parseRawvoiceFields(Podcast $podcast)
+ {
+ $rating = $this->sp->get_channel_tags(self::NS_RAWVOICE, 'rating');
+ if($rating&&count($rating)) {
+ $podcast->setRawvoiceRating($this->sanitize($rating[0]['data']));
+ }
+ $location = $this->sp->get_channel_tags(self::NS_RAWVOICE, 'location');
+ if($location&&count($location)) {
+ $podcast->setRawvoiceLocation($this->sanitize($location[0]['data']));
+ }
+ $frequency = $this->sp->get_channel_tags(self::NS_RAWVOICE, 'frequency');
+ if($frequency&&count($frequency)) {
+ $podcast->setRawvoiceFrequency($this->sanitize($frequency[0]['data']));
+ }
+ $subscribe = $this->sp->get_channel_tags(self::NS_RAWVOICE, 'subscribe');
+ if($subscribe&&count($subscribe)) {
+ $links = new Subscribe();
+ foreach($subscribe[0]['attribs'][''] as $platform => $link) {
+ $links->addLink(
+ $platform,
+ $this->sanitize($link)
+ );
+ }
+ $podcast->setRawvoiceSubscribe($links);
+ }
+ }
+
+ /**
+ * @param \SimplePie_Item $item
+ * @return Episode
+ * @throws \Exception
+ */
+ protected function parseEpisodeItem(\SimplePie_Item $item)
+ {
+ $episode = new Episode();
+ $episode->setTitle($item->get_title())
+ ->setDescription($item->get_description())
+ ->setLink($item->get_link());
+
+ if ($this->config->shouldDefaultToToday()) {
+ $episode->setPublishedDate(new \DateTime($item->get_date()));
+ } else {
+ $pubDate = $item->get_item_tags('', 'pubDate');
+ if ($pubDate && count($pubDate)) {
+ $episode->setPublishedDate((new \DateTime())->setTimestamp(strtotime($pubDate[0]['data'])));
+ }
+ }
+
+ $guid = $item->get_item_tags('', 'guid');
+ if ($guid && count($guid)) {
+ $episode->setGuid($this->sanitize($guid[0]['data']));
+ if(count($guid[0]['attribs'][''])&&array_key_exists('isPermaLink',$guid[0]['attribs'][''])) {
+ $episode->setGuidIsPermalink($guid[0]['attribs']['']['isPermaLink']==='true');
+ }
+ }
+
+ $subtitle = $item->get_item_tags(self::NS_ITUNES, 'subtitle');
+ if ($subtitle && count($subtitle)) {
+ $episode->setSubtitle($this->sanitize($subtitle[0]['data']));
+ }
+
+ $explicit = $item->get_item_tags(self::NS_ITUNES, 'explicit');
+ if ( $explicit && count($explicit)) {
+ $episode->setExplicit($this->sanitize($explicit[0]['data']));
+ }
+
+ $episodeNumber = $item->get_item_tags(self::NS_ITUNES, 'episode');
+ if ( $episodeNumber && count($episodeNumber)) {
+ $episode->setEpisodeNumber(intval($episodeNumber[0]['data']));
+ }
+
+ $season = $item->get_item_tags(self::NS_ITUNES, 'season');
+ if ( $season && count($season)) {
+ $episode->setSeason(intval($season[0]['data']));
+ }
+
+ $episodeType = $item->get_item_tags(self::NS_ITUNES, 'episodeType');
+ if ( $episodeType && count($episodeType)) {
+ $episode->setType($this->sanitize($episodeType[0]['data']));
+ }
+
+ $duration = $item->get_item_tags(self::NS_ITUNES, 'duration');
+ if ( $duration && count($duration)) {
+ $episode->setDuration($this->sanitize($duration[0]['data']));
+ }
+
+ $image = $item->get_item_tags(self::NS_ITUNES, 'image');
+ if ( $image && count($image)) {
+ $artwork = new Artwork();
+ $artwork->setUri(
+ $this->sanitize($image[0]['attribs']['']['href'])
+ );
+ $episode->setArtwork($artwork);
+ }
+
+ $enclosure = $item->get_enclosure();
+ if ( $enclosure && $enclosure->get_link()) {
+ $media = new Media();
+ $media->setUri($enclosure->get_link())
+ ->setMimeType($enclosure->get_type())
+ ->setLength($enclosure->get_length());
+
+ $episode->setMedia($this->getFile($item));
+ }
+
+ return $episode;
+ }
+
+ /**
+ * @param \SimplePie_Item $item
+ * @return Media
+ */
+ protected function getFile(\SimplePie_Item $item): Media
+ {
+ $enclosure = $item->get_enclosure();
+ $media = new Media();
+ $media->setUri($enclosure->get_link())
+ ->setMimeType($enclosure->get_type())
+ ->setLength($enclosure->get_length());
+ return $media;
+ }
+
+ /**
+ * @param $namespace
+ * @param $name
+ * @param null $item
+ * @return mixed
+ */
+ protected function getSingleNamespacedChannelItem($namespace, $name, $item = null )
+ {
+ $items = $this->sp->get_channel_tags($namespace, $name);
+ if ( $items && count( $items ) ) {
+ return $items[0];
+ }
+ }
+
+ protected function sanitize(string $text): string
+ {
+ return $this->sp->sanitize($text, SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/Podcast.php b/src/Podcast.php
new file mode 100644
index 0000000..940c404
--- /dev/null
+++ b/src/Podcast.php
@@ -0,0 +1,157 @@
+episodes = new Episodes();
+ }
+
+ /**
+ * @return Episodes
+ */
+ public function getEpisodes(): Episodes
+ {
+ return $this->episodes;
+ }
+
+ /**
+ * @param Episode $episode
+ * @return $this
+ */
+ public function addEpisode(Episode $episode)
+ {
+ $this->episodes->add($episode);
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLanguage()
+ {
+ return $this->language;
+ }
+
+ /**
+ * @param string $language
+ * @return Podcast
+ */
+ public function setLanguage($language)
+ {
+ $this->language = $language;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getAuthor()
+ {
+ return $this->author;
+ }
+
+ /**
+ * @param string $author
+ * @return Podcast
+ */
+ public function setAuthor($author)
+ {
+ $this->author = $author;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getManagingEditor()
+ {
+ return $this->managingEditor;
+ }
+
+ /**
+ * @param string $managingEditor
+ * @return Podcast
+ */
+ public function setManagingEditor($managingEditor)
+ {
+ $this->managingEditor = $managingEditor;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCopyright()
+ {
+ return $this->copyright;
+ }
+
+ /**
+ * @param string $copyright
+ * @return Podcast
+ */
+ public function setCopyright($copyright)
+ {
+ $this->copyright = $copyright;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Rawvoice/Subscribe.php b/src/Rawvoice/Subscribe.php
new file mode 100644
index 0000000..84a58b7
--- /dev/null
+++ b/src/Rawvoice/Subscribe.php
@@ -0,0 +1,54 @@
+links;
+ }
+
+ /**
+ * @param string $platform
+ * @return string
+ */
+ public function getLink(string $platform): ?string
+ {
+ return isset($this->links[$platform]) ? $this->links[$platform] : null;
+ }
+
+ /**
+ * @param string $platform
+ * @param string $link
+ * @return self
+ */
+ public function addLink(string $platform, string $link): self
+ {
+ $this->links[$platform] = $link;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Traits/HasArtwork.php b/src/Traits/HasArtwork.php
new file mode 100644
index 0000000..02383e3
--- /dev/null
+++ b/src/Traits/HasArtwork.php
@@ -0,0 +1,33 @@
+artwork;
+ }
+
+ /**
+ * @param Artwork $artwork
+ * @return HasArtwork
+ */
+ public function setArtwork($artwork)
+ {
+ $this->artwork = $artwork;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Traits/HasAtomTags.php b/src/Traits/HasAtomTags.php
new file mode 100644
index 0000000..5991b7c
--- /dev/null
+++ b/src/Traits/HasAtomTags.php
@@ -0,0 +1,33 @@
+atomLinks;
+ }
+
+ /**
+ * @param Link $link
+ * @return self
+ */
+ public function addAtomLink(Link $link)
+ {
+ $this->atomLinks[] = $link;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Traits/HasCategories.php b/src/Traits/HasCategories.php
new file mode 100644
index 0000000..2c0a435
--- /dev/null
+++ b/src/Traits/HasCategories.php
@@ -0,0 +1,45 @@
+categories;
+ }
+ return array_values(array_filter(
+ $this->categories,
+ function(Category $category) use ($type){
+ return $category->getType() === $type;
+ }
+ ));
+ }
+
+ /**
+ * @param Category $category
+ * @return $this
+ */
+ public function addCategory(Category $category): self
+ {
+ $this->categories[] = $category;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Traits/HasDescription.php b/src/Traits/HasDescription.php
new file mode 100644
index 0000000..efc89ab
--- /dev/null
+++ b/src/Traits/HasDescription.php
@@ -0,0 +1,30 @@
+description;
+ }
+
+ /**
+ * @param string $description
+ * @return self
+ */
+ public function setDescription($description)
+ {
+ $this->description = $description;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Traits/HasExplicit.php b/src/Traits/HasExplicit.php
new file mode 100644
index 0000000..8995a42
--- /dev/null
+++ b/src/Traits/HasExplicit.php
@@ -0,0 +1,31 @@
+explicit;
+ }
+
+ /**
+ * @param string $explicit
+ * @return HasExplicit
+ */
+ public function setExplicit($explicit)
+ {
+ $this->explicit = $explicit;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Traits/HasItunesTags.php b/src/Traits/HasItunesTags.php
new file mode 100644
index 0000000..da92cbb
--- /dev/null
+++ b/src/Traits/HasItunesTags.php
@@ -0,0 +1,94 @@
+type;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isEpisodic()
+ {
+ return $this->type && $this->type === self::EPISODIC;
+ }
+
+ /**
+ * @return bool
+ */
+ public function isSerial()
+ {
+ return $this->type && $this->type === self::SERIAL;
+ }
+
+ /**
+ * @param string $type
+ * @return self
+ */
+ public function setType($type)
+ {
+ $this->type = $type;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getNewFeedUrl()
+ {
+ return $this->newFeedUrl;
+ }
+
+ /**
+ * @param string $newFeedUrl
+ * @return HasItunesTags
+ */
+ public function setNewFeedUrl($newFeedUrl)
+ {
+ $this->newFeedUrl = $newFeedUrl;
+ return $this;
+ }
+
+ /**
+ * @return Owner
+ */
+ public function getOwner()
+ {
+ return $this->owner;
+ }
+
+ /**
+ * @param Owner $owner
+ * @return self
+ */
+ public function setOwner($owner)
+ {
+ $this->owner = $owner;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Traits/HasLink.php b/src/Traits/HasLink.php
new file mode 100644
index 0000000..dcdfd8a
--- /dev/null
+++ b/src/Traits/HasLink.php
@@ -0,0 +1,30 @@
+link;
+ }
+
+ /**
+ * @param string $link
+ * @return self
+ */
+ public function setLink($link): self
+ {
+ $this->link = $link;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Traits/HasRawvoiceTags.php b/src/Traits/HasRawvoiceTags.php
new file mode 100644
index 0000000..07c7cd8
--- /dev/null
+++ b/src/Traits/HasRawvoiceTags.php
@@ -0,0 +1,101 @@
+rawvoiceRating;
+ }
+
+ /**
+ * @param string $rawvoiceRating
+ * @return HasRawvoiceTags
+ */
+ public function setRawvoiceRating($rawvoiceRating)
+ {
+ $this->rawvoiceRating = $rawvoiceRating;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getRawvoiceLocation()
+ {
+ return $this->rawvoiceLocation;
+ }
+
+ /**
+ * @param string $rawvoiceLocation
+ * @return HasRawvoiceTags
+ */
+ public function setRawvoiceLocation($rawvoiceLocation)
+ {
+ $this->rawvoiceLocation = $rawvoiceLocation;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getRawvoiceFrequency()
+ {
+ return $this->rawvoiceFrequency;
+ }
+
+ /**
+ * @param string $rawvoiceFrequency
+ * @return HasRawvoiceTags
+ */
+ public function setRawvoiceFrequency($rawvoiceFrequency)
+ {
+ $this->rawvoiceFrequency = $rawvoiceFrequency;
+ return $this;
+ }
+
+ /**
+ * @return Subscribe
+ */
+ public function getRawvoiceSubscribe()
+ {
+ return $this->rawvoiceSubscribe;
+ }
+
+ /**
+ * @param Subscribe $rawvoiceSubscribe
+ * @return HasRawvoiceTags
+ */
+ public function setRawvoiceSubscribe($rawvoiceSubscribe)
+ {
+ $this->rawvoiceSubscribe = $rawvoiceSubscribe;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Traits/HasSyndicationTags.php b/src/Traits/HasSyndicationTags.php
new file mode 100644
index 0000000..ea8209b
--- /dev/null
+++ b/src/Traits/HasSyndicationTags.php
@@ -0,0 +1,77 @@
+updatePeriod;
+ }
+
+ /**
+ * @param string $updatePeriod
+ * @return HasSyndicationTags
+ */
+ public function setUpdatePeriod($updatePeriod)
+ {
+ $this->updatePeriod = $updatePeriod;
+ return $this;
+ }
+
+ /**
+ * @return int
+ */
+ public function getUpdateFrequency()
+ {
+ return $this->updateFrequency;
+ }
+
+ /**
+ * @param int $updateFrequency
+ * @return HasSyndicationTags
+ */
+ public function setUpdateFrequency($updateFrequency)
+ {
+ $this->updateFrequency = $updateFrequency;
+ return $this;
+ }
+
+ /**
+ * @return \DateTime
+ */
+ public function getUpdateBase()
+ {
+ return $this->updateBase;
+ }
+
+ /**
+ * @param \DateTime $updateBase
+ * @return self
+ */
+ public function setUpdateBase(\DateTime $updateBase)
+ {
+ $this->updateBase = $updateBase;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Traits/HasTitles.php b/src/Traits/HasTitles.php
new file mode 100644
index 0000000..564d3d3
--- /dev/null
+++ b/src/Traits/HasTitles.php
@@ -0,0 +1,53 @@
+title;
+ }
+
+ /**
+ * @param string $title
+ * @return self
+ */
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ return $this;
+ }
+
+ /**
+ * @return string
+ */
+ public function getSubtitle()
+ {
+ return $this->subtitle;
+ }
+
+ /**
+ * @param string $subtitle
+ * @return self
+ */
+ public function setSubtitle($subtitle)
+ {
+ $this->subtitle = $subtitle;
+ return $this;
+ }
+}
\ No newline at end of file
diff --git a/src/Traits/HasUri.php b/src/Traits/HasUri.php
new file mode 100644
index 0000000..8a9cd1a
--- /dev/null
+++ b/src/Traits/HasUri.php
@@ -0,0 +1,33 @@
+uri;
+ }
+
+ /**
+ * @param string $uri
+ * @return HasUri
+ */
+ public function setUri($uri)
+ {
+ $this->uri = $uri;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/Traits/IsRssFeed.php b/src/Traits/IsRssFeed.php
new file mode 100644
index 0000000..0bcf9e5
--- /dev/null
+++ b/src/Traits/IsRssFeed.php
@@ -0,0 +1,56 @@
+generator;
+ }
+
+ /**
+ * @param string $generator
+ * @return IsRssFeed
+ */
+ public function setGenerator($generator)
+ {
+ $this->generator = $generator;
+ return $this;
+ }
+
+ /**
+ * @return \DateTime
+ */
+ public function getLastBuildDate()
+ {
+ return $this->lastBuildDate;
+ }
+
+ /**
+ * @param \DateTime $lastBuildDate
+ * @return IsRssFeed
+ */
+ public function setLastBuildDate($lastBuildDate)
+ {
+ $this->lastBuildDate = $lastBuildDate;
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/tests/EpisodesTest.php b/tests/EpisodesTest.php
new file mode 100644
index 0000000..ab41514
--- /dev/null
+++ b/tests/EpisodesTest.php
@@ -0,0 +1,231 @@
+getEpisodes();
+ $this->assertEquals(3, count($episodes));
+ }
+
+ public function test_is_iterable()
+ {
+ $episodes = new \Lukaswhite\PodcastFeedParser\Episodes();
+ $this->assertInstanceOf(ArrayIterator::class,$episodes->getIterator());
+ }
+
+ public function test_can_access_as_array()
+ {
+ $episodes = $this->getEpisodes();
+ $this->assertTrue(isset($episodes[1]));
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episode::class,$episodes[1]);
+ }
+
+ public function test_cannot_unset_items()
+ {
+ $episodes = $this->getEpisodes();
+ unset($episodes[1]);
+ $this->assertEquals(3, count($episodes));
+ }
+
+ public function test_cannot_replace_items()
+ {
+ $episodes = $this->getEpisodes();
+ $this->assertEquals('Episode Two',$episodes[1]->getTitle());
+ $episodes[1] = (new \Lukaswhite\PodcastFeedParser\Episode())->setTitle('Episode Twelve');
+ $this->assertEquals('Episode Two',$episodes[1]->getTitle());
+ }
+
+ public function test_can_get_first_episode()
+ {
+ $episodes = $this->getEpisodes();
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episode::class,$episodes->first());
+ $this->assertEquals('Episode One',$episodes->first()->getTitle());
+ }
+
+ public function test_first_returns_null_if_empty()
+ {
+ $episodes = new \Lukaswhite\PodcastFeedParser\Episodes();
+ $this->assertNull($episodes->first());
+ }
+
+ public function test_last_returns_null_if_empty()
+ {
+ $episodes = new \Lukaswhite\PodcastFeedParser\Episodes();
+ $this->assertNull($episodes->last());
+ }
+
+ public function test_can_get_last_episode()
+ {
+ $episodes = $this->getEpisodes();
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episode::class,$episodes->last());
+ $this->assertEquals('Episode Three',$episodes->last()->getTitle());
+ }
+
+ public function test_can_find_episode_by_guid()
+ {
+ $episodes = $this->getEpisodes();
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episode::class,$episodes->findByGuid('two'));
+ $this->assertEquals('Episode Two',$episodes->findByGuid('two')->getTitle());
+ }
+
+ public function test_find_episode_by_guid_returns_null_if_not_found()
+ {
+ $episodes = $this->getEpisodes();
+ $this->assertNull($episodes->findByGuid('xyz'));
+ }
+
+ public function test_can_sort_by_episode_number()
+ {
+ $episodes = $this->getEpisodesWithEpisodeNumbers();
+ $episodes->sortByEpisodeNumber();
+ $this->assertEquals('Episode One',$episodes->first()->getTitle());
+ $this->assertEquals('Episode Four',$episodes->last()->getTitle());
+ }
+
+ public function test_can_split_into_seasons()
+ {
+ $episodes = $this->getEpisodesInSeasons();
+ $seasons = $episodes->getSeasons();
+ $this->assertTrue(is_array($seasons));
+ $this->assertEquals(3,count($seasons));
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episodes::class,$seasons[1]);
+ $this->assertEquals(4,$seasons[1]->count());
+ $this->assertEquals('s01e01',$seasons[1]->first()->getGuid());
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episodes::class,$seasons[2]);
+ $this->assertEquals(3,$seasons[2]->count());
+ $this->assertEquals('s02e01',$seasons[2]->first()->getGuid());
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episodes::class,$seasons[3]);
+ $this->assertEquals(1,$seasons[3]->count());
+ $this->assertEquals('s03e01',$seasons[3]->first()->getGuid());
+ }
+
+
+
+ protected function getEpisodes()
+ {
+ $episodes = new \Lukaswhite\PodcastFeedParser\Episodes();
+ $episode = new \Lukaswhite\PodcastFeedParser\Episode();
+ $episode->setTitle('Episode One');
+
+ $episodes
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode One')
+ ->setGuid('one')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode Two')
+ ->setGuid('two')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode Three')
+ ->setGuid('three')
+ );
+ return $episodes;
+ }
+
+ protected function getEpisodesInSeasons()
+ {
+ $episodes = new \Lukaswhite\PodcastFeedParser\Episodes();
+ $episode = new \Lukaswhite\PodcastFeedParser\Episode();
+ $episode->setTitle('Episode One');
+
+ $episodes
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season One, Episode One')
+ ->setSeason(1)
+ ->setEpisodeNumber(1)
+ ->setGuid('s01e01')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season One, Episode Two')
+ ->setSeason(1)
+ ->setEpisodeNumber(2)
+ ->setGuid('s01e02')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season Three, Episode One')
+ ->setSeason(3)
+ ->setEpisodeNumber(1)
+ ->setGuid('s03e01')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season One, Episode Three')
+ ->setSeason(1)
+ ->setEpisodeNumber(3)
+ ->setGuid('s01e03')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season One, Episode Four')
+ ->setSeason(1)
+ ->setEpisodeNumber(4)
+ ->setGuid('s01e04')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season Two, Episode Two')
+ ->setSeason(2)
+ ->setEpisodeNumber(2)
+ ->setGuid('s01e01')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season Two, Episode Three')
+ ->setSeason(2)
+ ->setEpisodeNumber(3)
+ ->setGuid('s02e03')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Season Two, Episode One')
+ ->setSeason(2)
+ ->setEpisodeNumber(1)
+ ->setGuid('s02e01')
+ );
+ return $episodes;
+ }
+
+ protected function getEpisodesWithEpisodeNumbers()
+ {
+ $episodes = new \Lukaswhite\PodcastFeedParser\Episodes();
+ $episode = new \Lukaswhite\PodcastFeedParser\Episode();
+ $episode->setTitle('Episode One');
+
+ $episodes
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode Two')
+ ->setEpisodeNumber(2)
+ ->setGuid('two')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode Three')
+ ->setEpisodeNumber(3)
+ ->setGuid('three')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode One')
+ ->setEpisodeNumber(1)
+ ->setGuid('one')
+ )
+ ->add(
+ (new \Lukaswhite\PodcastFeedParser\Episode())
+ ->setTitle('Episode Four')
+ ->setEpisodeNumber(4)
+ ->setGuid('four')
+ );
+ return $episodes;
+ }
+
+}
\ No newline at end of file
diff --git a/tests/ParserTest.php b/tests/ParserTest.php
new file mode 100644
index 0000000..5391fba
--- /dev/null
+++ b/tests/ParserTest.php
@@ -0,0 +1,384 @@
+setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Podcast::class,$podcast);
+ $this->assertEquals('Podcast Help Desk™',$podcast->getTitle());
+ $this->assertEquals('Podcasting tips, opinions, gear, technology and news',$podcast->getSubtitle());
+ $this->assertEquals(
+ 'Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.',
+ $podcast->getDescription()
+ );
+ $this->assertEquals('en',$podcast->getLanguage());
+ $this->assertEquals('© 2012-2020 Podcast Help Desk',$podcast->getCopyright());
+ $this->assertEquals('https://www.podcasthelpdesk.com/',$podcast->getLink());
+ $this->assertEquals('Mike Dell',$podcast->getAuthor());
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Owner::class,$podcast->getOwner());
+ $this->assertEquals('Mike Dell',$podcast->getOwner()->getName());
+ $this->assertEquals('mike@mikedell.com',$podcast->getOwner()->getEmail());
+ $this->assertEquals('mike@mikedell.com (Mike Dell)', $podcast->getManagingEditor());
+ $this->assertEquals('clean',$podcast->getExplicit());
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Artwork::class,$podcast->getArtwork());
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/wp-content/uploads/powerpress/phd1400_2020.jpg',
+ $podcast->getArtwork()->getUri()
+ );
+
+ $this->assertTrue(is_array($podcast->getCategories()));
+ $this->assertEquals(4, count($podcast->getCategories()));
+ $this->assertEquals(3, count($podcast->getCategories(\Lukaswhite\PodcastFeedParser\Category::ITUNES)));
+ $this->assertEquals(1, count($podcast->getCategories(\Lukaswhite\PodcastFeedParser\Category::GOOGLE_PLAY)));
+
+ /** @var \Lukaswhite\PodcastFeedParser\Category $technology */
+ $technology = $podcast->getCategories(\Lukaswhite\PodcastFeedParser\Category::ITUNES)[0];
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Category::class,$technology);
+ $this->assertEquals('Technology',$technology->getName());
+ $this->assertEquals(\Lukaswhite\PodcastFeedParser\Category::ITUNES,$technology->getType());
+ $this->assertEquals(0,count($technology->getChildren()));
+
+ /** @var \Lukaswhite\PodcastFeedParser\Category $business */
+ $business = $podcast->getCategories(\Lukaswhite\PodcastFeedParser\Category::ITUNES)[1];
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Category::class,$business);
+ $this->assertEquals('Business',$business->getName());
+ $this->assertEquals(\Lukaswhite\PodcastFeedParser\Category::ITUNES,$business->getType());
+ $this->assertEquals(1,count($business->getChildren()));
+ /** @var \Lukaswhite\PodcastFeedParser\Category $marketing */
+ $marketing = $business->getChild('Marketing');
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Category::class,$marketing);
+ $this->assertEquals('Marketing',$marketing->getName());
+ $this->assertEquals(\Lukaswhite\PodcastFeedParser\Category::ITUNES,$marketing->getType());
+ $this->assertEquals(0,count($marketing->getChildren()));
+
+ /** @var \Lukaswhite\PodcastFeedParser\Category $gpTechnology */
+ $gpTechnology = $podcast->getCategories(\Lukaswhite\PodcastFeedParser\Category::GOOGLE_PLAY)[0];
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Category::class,$gpTechnology);
+ $this->assertEquals('Technology',$gpTechnology->getName());
+ $this->assertEquals(\Lukaswhite\PodcastFeedParser\Category::GOOGLE_PLAY,$gpTechnology->getType());
+ $this->assertEquals(0,count($gpTechnology->getChildren()));
+
+ }
+
+ public function test_can_get_standard_rss_fields()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+ $this->assertEquals('https://wordpress.org/?v=5.5.1', $podcast->getGenerator());
+ $this->assertInstanceOf(\DateTime::class,$podcast->getLastBuildDate());
+ $this->assertEquals('2020-11-30 21:57:33',$podcast->getLastBuildDate()->format('Y-m-d H:i:s'));
+ $this->assertEquals('episodic',$podcast->getType());
+ $this->assertTrue($podcast->isEpisodic());
+ }
+
+ public function test_can_get_atom_fields()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+ $this->assertTrue(is_array($podcast->getAtomLinks()));
+ $this->assertEquals(2, count($podcast->getAtomLinks()));
+
+ /** @var \Lukaswhite\PodcastFeedParser\Link $link */
+ $link = $podcast->getAtomLinks()[0];
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Link::class,$link);
+ $this->assertEquals('https://www.podcasthelpdesk.com/feed/podcast/',$link->getUri());
+ $this->assertEquals('self',$link->getRel());
+ $this->assertEquals('application/rss+xml',$link->getType());
+ }
+
+ public function test_can_get_syndication_fields()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+ $this->assertEquals('hourly',$podcast->getUpdatePeriod());
+ $this->assertEquals(1,$podcast->getUpdateFrequency());
+ $this->assertInstanceOf(\DateTime::class,$podcast->getUpdateBase());
+ $this->assertEquals('2020-01-01 12:00:00',$podcast->getUpdateBase()->format('Y-m-d H:i:s'));
+ }
+
+ public function test_can_get_itunes_fields()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+ $this->assertEquals('https://www.podcasthelpdesk.com/feed/podcast/', $podcast->getNewFeedUrl());
+ }
+
+ public function test_can_get_rawvoice_fields()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+ $this->assertEquals('TV-G', $podcast->getRawvoiceRating());
+ $this->assertEquals('Traverse City, Michigan', $podcast->getRawvoiceLocation());
+ $this->assertEquals('Twice Weekly', $podcast->getRawvoiceFrequency());
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::class,$podcast->getRawvoiceSubscribe());
+ $links = $podcast->getRawvoiceSubscribe();
+ $this->assertTrue(is_array($links->getLinks()));
+ $this->assertArrayHasKey(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::FEED, $links->getLinks());
+ $this->assertArrayHasKey(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::HTML, $links->getLinks());
+ $this->assertArrayHasKey(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::ITUNES, $links->getLinks());
+ $this->assertArrayHasKey(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::BLUBRRY, $links->getLinks());
+ $this->assertArrayHasKey(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::TUNEIN, $links->getLinks());
+ $this->assertArrayHasKey(\Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::STITCHER, $links->getLinks());
+ $this->assertEquals('https://www.podcasthelpdesk.com/feed/podcast/',$links->getLink(
+ \Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::FEED
+ ));
+ $this->assertEquals('https://www.podcasthelpdesk.com/subscribe-to-podcast/',$links->getLink(
+ \Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::HTML
+ ));
+ $this->assertEquals('https://itunes.apple.com/us/podcast/podcast-help-desk/id939440023?mt=2',$links->getLink(
+ \Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::ITUNES
+ ));
+ $this->assertEquals('https://www.blubrry.com/phd/',$links->getLink(
+ \Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::BLUBRRY
+ ));
+ $this->assertEquals('http://tunein.com/radio/Podcast-Help-Desk-p615263/',$links->getLink(
+ \Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::TUNEIN
+ ));
+ $this->assertEquals('https://www.stitcher.com/show/podcasting-tech-coach',$links->getLink(
+ \Lukaswhite\PodcastFeedParser\Rawvoice\Subscribe::STITCHER
+ ));
+ }
+
+ public function test_can_get_episodes()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/feed.rss'));
+ $podcast = $parser->run();
+
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episodes::class, $podcast->getEpisodes());
+ $this->assertEquals(6,count($podcast->getEpisodes()));
+
+ /** @var \Lukaswhite\PodcastFeedParser\Episode $episode */
+ $episode = $podcast->getEpisodes()[0];
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episode::class,$episode);
+
+
+ $this->assertEquals('https://www.podcasthelpdesk.com/?p=775', $episode->getGuid());
+ $this->assertTrue($episode->guidIsPermalink());
+
+ $this->assertEquals(
+ 'Podcast Help Desk going 2 times weekly starting December 16th – PHD151',
+ $episode->getTitle()
+ );
+
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/podcast-help-desk-going-2-times-weekly-starting-december-16th-phd151/',
+ $episode->getLink()
+ );
+
+ $this->assertEquals(
+ 'I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.',
+ $episode->getDescription()
+ );
+
+ $this->assertEquals('clean',$episode->getExplicit());
+
+ $this->assertEquals('7:10',$episode->getDuration());
+
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Media::class,$episode->getMedia());
+ $this->assertEquals(
+ 'https://media.blubrry.com/phd/ins.blubrry.com/phd/phd151.mp3',
+ $episode->getMedia()->getUri()
+ );
+ $this->assertEquals(
+ 'audio/mpeg',
+ $episode->getMedia()->getMimeType()
+ );
+ $this->assertEquals(
+ 6893874,
+ $episode->getMedia()->getLength()
+ );
+
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Artwork::class,$episode->getArtwork());
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/wp-content/uploads/powerpress/phd1400_2020.jpg',
+ $episode->getArtwork()->getUri()
+ );
+
+ $this->assertInstanceOf(\DateTime::class,$episode->getPublishedDate());
+ $this->assertEquals('2020-11-30 21:57:00',$episode->getPublishedDate()->format('Y-m-d H:i:s'));
+
+ }
+
+ public function test_can_get_episodes_with_episode_numbers_seasons_and_types()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/seasons.rss'));
+ $podcast = $parser->run();
+
+ $this->assertTrue($podcast->isSerial());
+
+ /** @var \Lukaswhite\PodcastFeedParser\Episode $episode */
+ $episode = $podcast->getEpisodes()[0];
+ $this->assertEquals(5,$episode->getEpisodeNumber());
+ $this->assertEquals(2,$episode->getSeason());
+ $this->assertEquals('full',$episode->getType());
+
+ }
+
+ public function test_does_not_break_if_podcast_metadata_missing()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/minimal.rss'));
+ $podcast = $parser->run();
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Podcast::class,$podcast);
+ $this->assertEquals('Podcast Help Desk™',$podcast->getTitle());
+ $this->assertNull($podcast->getSubtitle());
+ $this->assertEquals(
+ 'Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.',
+ $podcast->getDescription()
+ );
+ $this->assertNull($podcast->getLanguage());
+ $this->assertNull($podcast->getCopyright());
+ $this->assertEquals('https://www.podcasthelpdesk.com/',$podcast->getLink());
+ $this->assertNull($podcast->getAuthor());
+ $this->assertNull($podcast->getOwner());
+ $this->assertNull($podcast->getManagingEditor());
+ $this->assertNull($podcast->getExplicit());
+ $this->assertNull($podcast->getArtwork());
+ }
+
+ public function test_does_not_break_if_episode_data_missing()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->setContent(file_get_contents('./tests/fixtures/minimal.rss'));
+ $podcast = $parser->run();
+
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episodes::class,$podcast->getEpisodes());
+ $this->assertEquals(1,count($podcast->getEpisodes()));
+
+ /** @var \Lukaswhite\PodcastFeedParser\Episode $episode */
+ $episode = $podcast->getEpisodes()[0];
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Episode::class,$episode);
+
+
+ $this->assertNull($episode->getGuid());
+
+ $this->assertEquals(
+ 'Podcast Help Desk going 2 times weekly starting December 16th – PHD151',
+ $episode->getTitle()
+ );
+
+ $this->assertNull($episode->getLink());
+ $this->assertNull($episode->getDescription());
+ $this->assertNull($episode->getExplicit());
+
+ $this->assertNull($episode->getMedia());
+
+ $this->assertNull($episode->getArtwork());
+ }
+
+ public function test_can_sort_by_most_recent()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->load('./tests/fixtures/feed.rss');
+ $podcast = $parser->run();
+ $podcast->getEpisodes()->newestFirst();
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/?p=775',
+ $podcast->getEpisodes()->first()->getGuid()
+ );
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/?p=749',
+ $podcast->getEpisodes()->last()->getGuid()
+ );
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/?p=775',
+ $podcast->getEpisodes()->mostRecent()->getGuid()
+ );
+ }
+
+ public function test_can_sort_by_oldest()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->load('./tests/fixtures/feed.rss');
+ $podcast = $parser->run();
+ $podcast->getEpisodes()->oldestFirst();
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/?p=749',
+ $podcast->getEpisodes()->first()->getGuid()
+ );
+ $this->assertEquals(
+ 'https://www.podcasthelpdesk.com/?p=775',
+ $podcast->getEpisodes()->last()->getGuid()
+ );
+ }
+
+ public function test_can_override_description_behavior()
+ {
+ $config = new \Lukaswhite\PodcastFeedParser\Config();
+ $config->descriptionOnly();
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser($config);
+ $parser->load('./tests/fixtures/no-description.rss');
+ $podcast = $parser->run();
+ $this->assertNull($podcast->getDescription());
+ }
+
+ public function test_overriding_description_behavior_doesnt_affect_description()
+ {
+ $config = new \Lukaswhite\PodcastFeedParser\Config();
+ $config->descriptionOnly();
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser($config);
+ $parser->load('./tests/fixtures/feed.rss');
+ $podcast = $parser->run();
+ $this->assertEquals(
+ 'Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.',
+ $podcast->getDescription()
+ );
+ }
+
+ public function test_can_override_pub_date_behavior()
+ {
+ $config = new \Lukaswhite\PodcastFeedParser\Config();
+ $config->dontDefaultToToday();
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser($config);
+ $parser->load('./tests/fixtures/episode-with-no-pub-date.rss');
+ $podcast = $parser->run();
+ $this->assertNull($podcast->getEpisodes()->first()->getPublishedDate());
+ }
+
+ public function test_overriding_pub_date_behavior_does_not_affect_pub_date()
+ {
+ $config = new \Lukaswhite\PodcastFeedParser\Config();
+ $config->dontDefaultToToday();
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser($config);
+ $parser->load('./tests/fixtures/feed.rss');
+ $podcast = $parser->run();
+ $this->assertInstanceOf(\DateTime::class,$podcast->getEpisodes()->first()->getPublishedDate());
+ $this->assertEquals('2020-11-30 21:57',$podcast->getEpisodes()->first()->getPublishedDate()->format('Y-m-d H:i'));
+ }
+
+ public function test_can_load_from_file()
+ {
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->load('./tests/fixtures/feed.rss');
+ $podcast = $parser->run();
+ $this->assertInstanceOf(\Lukaswhite\PodcastFeedParser\Podcast::class,$podcast);
+ $this->assertEquals('Podcast Help Desk™',$podcast->getTitle());
+ }
+
+ public function test_throws_exception_if_file_not_found()
+ {
+ $this->expectException(\Lukaswhite\PodcastFeedParser\Exceptions\FileNotFoundException::class);
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->load('./tests/fixtures/i-do-not-exist.rss');
+ }
+
+ public function test_throws_exception_if_file_not_xml()
+ {
+ $this->expectException(\Lukaswhite\PodcastFeedParser\Exceptions\InvalidXmlException::class);
+ $parser = new \Lukaswhite\PodcastFeedParser\Parser();
+ $parser->load('./tests/fixtures/not-xml.rss');
+ $podcast = $parser->run();
+ }
+}
\ No newline at end of file
diff --git a/tests/fixtures/episode-with-no-pub-date.rss b/tests/fixtures/episode-with-no-pub-date.rss
new file mode 100644
index 0000000..64c572c
--- /dev/null
+++ b/tests/fixtures/episode-with-no-pub-date.rss
@@ -0,0 +1,211 @@
+
+
+
+ Podcast Help Desk™
+
+ https://www.podcasthelpdesk.com
+ Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ Mon, 30 Nov 2020 21:57:33 +0000
+ en
+ hourly
+ 1
+ 2020-01-01T12:00+00:00
+ https://wordpress.org/?v=5.5.1
+
+
+ https://www.podcasthelpdesk.com/feed/podcast/
+ Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ Mike Dell
+ clean
+
+ episodic
+
+ Mike Dell
+ mike@mikedell.com
+
+ mike@mikedell.com (Mike Dell)
+ © 2012-2020 Podcast Help Desk
+ Podcasting tips, opinions, gear, technology and news
+
+
+
+
+
+
+
+
+ TV-G
+ Traverse City, Michigan
+ Twice Weekly
+
+ -
+
Podcast Help Desk going 2 times weekly starting December 16th – PHD151
+ https://www.podcasthelpdesk.com/podcast-help-desk-going-2-times-weekly-starting-december-16th-phd151/
+ https://www.podcasthelpdesk.com/?p=775
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the “big” announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+As the unofficial companion show to Podcast Insider – Blubry’s Official Podcast and Blog, I will be putting out short 10-15 minute (most of the time) episodes of Podcast Help Desk on Wednesday and Friday, Every single week! It’s my “Get Mike to take podcasting more seriously” project. I’ve always preached that being constant is one key way to grow a show. The only show I’ve ever been able to do that on was Podcast Insider. Now I want to add Podcast Help Desk to that success schedule-keeping. Call it my “Podcast Improvement Plan”.
+Another thing I’ve been told (and believed) that 1 time a week is good, 2 times a week is better. I want to put that to the test.
+Also, recently, I’ve been hearing that people prefer shorter episodes. We will be testing that theory as well.
+If you would like to have me cover a topic, have a general podcasting question or just want to make a comment, hit the “leave a voicemail” tab on PodcastHelpDesk.com or send me an email, podcasthelpdesk@gmail.com and I will put it in Queue.
+Be sure to subscribe to Podcast Insider as well at PodcastInsider.com
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+***Note: I had a slight noise issue on this recording. Rather than re-record it, here it is in all it’s glory! 🙂
+]]>
+
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way. The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way. <br />
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ Mike Dell
+
+ 151
+ Podcast Help Desk going 2 times weekly starting December 16th
+ 7:10
+ clean
+
+ -
+
My 8 Favorite Podcasts – PHD150
+ https://www.podcasthelpdesk.com/my-8-favorite-podcasts-phd150/
+ Sat, 21 Nov 2020 09:20:08 +0000
+ https://www.podcasthelpdesk.com/?p=764
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ I’m not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don’t subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order. Just that these 8 are listened to nearly as soon as they come in.
+ Lehto’s Law
+Steve Lehto is a Lawyer in Michigan and an author. He specializes in Lemon Law cases. He has been doing a YouTube channel for a 5 or 6 years and then takes the audio and puts it out as a podcast. He does 2 Episodes a day, 7 days a week! At the end of 2020 he will have posted 732 episodes in this year ALONE! DANG!.
+They are short episodes. Normally between 9 and 15 minutes each. He covers most any law stories. Sometimes car related stories. But I have to say, almost all of his episodes are funny, well produced and to the point. I never miss an episode.
+Website – Podcast
+ Airline Pilot Guy
+Airline Pilot Guy is an aviation podcast hosted by Capt. Jeff, Dr. Steph, Capt. Nick, and Miami Rick (Also a Capt.) along with sometimes co-host Capt. Dana. Produced by Liz Pyper. It’s a weekly 3 HOUR SHOW all about the Aviation Profession and Hobby. The hosts are current or former Airline Pilots (other than Dr. Steph who is commercial pilot rated but plays a Doctor in real life).
+It’s broken it segments for News, “Getting to Know You” where the crew tells what they have been up to the week before, The Coffee Fund (which is Jeff begging for money 🙂 ) and the ever popular “Plane Tales” by “The Old Pilot (who is really Capt. Nick) and of course FEEDBACK. It’s the show with the most feedback than any I’ve ever heard of. Jeff and the crew answer about 2 hours of questions every week and the audience participation is the best. You might even hear me on there once in a while 🙂 .
+Website – Podcast
+ ARRL Audio News
+This is a weekly podcast from the American Radio Relay League (Amateur Radio or Ham Radio). Gives the latest news around the world for Amateur Radio. Hosted by the league employees.
+Website – Podcast
+
+ Podnews
+This is a Daily (Monday-Friday) podcast of the Podnews.net newsletter by James Cridland. Gives a daily round up of podcasting news and opinions from the editor (James). Sometimes a bit snarky and James has a very cool aloof British Accent 🙂
+You should really sign up for the newsletter AND listen to the podcast. Very informative about the podcast industry.
+Webiste – Podcast
+ Podcasting 2.0
+Podcasting 2.0 is Adam Curry and Dave Jones, the guys behind the Podcast Index. Adam, of course, is the Podfather and former MTV VJ (One of the guys that invented podcasting) and Dave is a “dude named Ben” (developer and I.T. Guy). They call this podcast the “Board Meeting” for Podcast Index LLC. This one is a bit geeky, and fun because it’s more Adam.
+They talk about what is going on in the Podcast Index and the new “Podcast” namespace for RSS.
+Website – Podcast
+A few more I don’t miss.
+Dave Rubin’s “The Rubin Report “
+Adam Curry and John C. Dvorak’s “No Agenda “
+Todd Cochrane and Rob Greenlee’s “New Media Show “
+AND of course there are my other shows.
+Podcast Insider and Mike Dell’s World
+There are quite a few more that I like. But these 8 are my must listen (or watch) podcasts.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ Mike Dell
+
+ 150
+ My 8 Favorite Podcasts
+ 19:52
+
+ -
+
The beauty of Simple (Part 2) – PHD149
+ https://www.podcasthelpdesk.com/the-beauty-of-simple-part-2-phd149/
+ Tue, 17 Nov 2020 22:00:01 +0000
+ https://www.podcasthelpdesk.com/?p=759
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don’t have a lot of time.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Mike Dell
+
+ 149
+ The beauty of Simple (Part 2)
+ 5:07
+
+ -
+
Do not look at your stats for the first 3 months – PHD148
+ https://www.podcasthelpdesk.com/do-not-look-at-your-stats-for-the-first-3-months-phd148/
+ Mon, 16 Nov 2020 09:20:38 +0000
+ https://www.podcasthelpdesk.com/?p=757
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ YES, I really did just say don’t look at your stats for 3 months. People can get so obsessed with their numbers that they forget to put their energy into the podcast episodes themselves. Your show will grow if it’s good and you keep doing it. So focus on that. It WILL grow, but sometimes it’s much slower than we want it to be.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ Mike Dell
+
+ 148
+ Do not look at your stats for the first 3 months
+ 3:47
+
+ -
+
Who Is Your Show For? – PHD147
+ https://www.podcasthelpdesk.com/who-is-your-shoe-for-phd147/
+ Sun, 15 Nov 2020 22:03:19 +0000
+ https://www.podcasthelpdesk.com/?p=753
+ So, who exactly is your show for?
+
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ So, who exactly is your show for?
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+
+]]>
+
+ So, who exactly is your show for? - When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ So, who exactly is your show for? <br />
+<br />
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ Mike Dell
+
+ 147
+ Who Is Your Show For?
+ 8:02
+
+ -
+
8 Things YOU Need To Know (or learn) About YOUR Podcast – PHD146
+ https://www.podcasthelpdesk.com/8-things-you-need-to-know-or-learn-about-your-podcast-phd146/
+ Thu, 12 Nov 2020 18:48:38 +0000
+ https://www.podcasthelpdesk.com/?p=749
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it's a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+ There are many things about a podcast that a podcaster needs to know even if you don’t do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it’s a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+Here is my checklist of things I suggest you Know or Learn about your show so that you are able to take care of what needs to be taken care of if something goes wrong.
+
+RSS feed address. The WHOLE address.
+The Title of your show as it appears in the directories. This may seem silly, but sometimes people call a show by a shortened name or a ‘nickname’ of sorts. It’s always good to KNOW the title.
+The email address for the feed.
+Apple Podcasts listing URL (mainly the ID# at the end)
+Where is the website hosted. (and address)
+Where is the Podcast Media hosted.
+Logins to Website, Media Host, Web Host, Apple Podcasts and any other logins to manage listings on directories and apps,
+Media Encoding (This is a little geeky but it will help if you need to hire an editor)
+
+]]>
+
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it.
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it's a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+ Mike Dell
+
+ 146
+ 8 Things YOU Need To Know (or learn) About YOUR Podcast
+ 10:57
+
+
+
diff --git a/tests/fixtures/feed.rss b/tests/fixtures/feed.rss
new file mode 100644
index 0000000..c52e16d
--- /dev/null
+++ b/tests/fixtures/feed.rss
@@ -0,0 +1,212 @@
+
+
+
+ Podcast Help Desk™
+
+ https://www.podcasthelpdesk.com
+ Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ Mon, 30 Nov 2020 21:57:33 +0000
+ en
+ hourly
+ 1
+ 2020-01-01T12:00+00:00
+ https://wordpress.org/?v=5.5.1
+
+
+ https://www.podcasthelpdesk.com/feed/podcast/
+ Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ Mike Dell
+ clean
+
+ episodic
+
+ Mike Dell
+ mike@mikedell.com
+
+ mike@mikedell.com (Mike Dell)
+ © 2012-2020 Podcast Help Desk
+ Podcasting tips, opinions, gear, technology and news
+
+
+
+
+
+
+
+
+ TV-G
+ Traverse City, Michigan
+ Twice Weekly
+
+ -
+
Podcast Help Desk going 2 times weekly starting December 16th – PHD151
+ https://www.podcasthelpdesk.com/podcast-help-desk-going-2-times-weekly-starting-december-16th-phd151/
+ Mon, 30 Nov 2020 21:57:33 +0000
+ https://www.podcasthelpdesk.com/?p=775
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the “big” announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+As the unofficial companion show to Podcast Insider – Blubry’s Official Podcast and Blog, I will be putting out short 10-15 minute (most of the time) episodes of Podcast Help Desk on Wednesday and Friday, Every single week! It’s my “Get Mike to take podcasting more seriously” project. I’ve always preached that being constant is one key way to grow a show. The only show I’ve ever been able to do that on was Podcast Insider. Now I want to add Podcast Help Desk to that success schedule-keeping. Call it my “Podcast Improvement Plan”.
+Another thing I’ve been told (and believed) that 1 time a week is good, 2 times a week is better. I want to put that to the test.
+Also, recently, I’ve been hearing that people prefer shorter episodes. We will be testing that theory as well.
+If you would like to have me cover a topic, have a general podcasting question or just want to make a comment, hit the “leave a voicemail” tab on PodcastHelpDesk.com or send me an email, podcasthelpdesk@gmail.com and I will put it in Queue.
+Be sure to subscribe to Podcast Insider as well at PodcastInsider.com
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+***Note: I had a slight noise issue on this recording. Rather than re-record it, here it is in all it’s glory! 🙂
+]]>
+
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way. The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way. <br />
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ Mike Dell
+
+ 151
+ Podcast Help Desk going 2 times weekly starting December 16th
+ 7:10
+ clean
+
+ -
+
My 8 Favorite Podcasts – PHD150
+ https://www.podcasthelpdesk.com/my-8-favorite-podcasts-phd150/
+ Sat, 21 Nov 2020 09:20:08 +0000
+ https://www.podcasthelpdesk.com/?p=764
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ I’m not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don’t subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order. Just that these 8 are listened to nearly as soon as they come in.
+ Lehto’s Law
+Steve Lehto is a Lawyer in Michigan and an author. He specializes in Lemon Law cases. He has been doing a YouTube channel for a 5 or 6 years and then takes the audio and puts it out as a podcast. He does 2 Episodes a day, 7 days a week! At the end of 2020 he will have posted 732 episodes in this year ALONE! DANG!.
+They are short episodes. Normally between 9 and 15 minutes each. He covers most any law stories. Sometimes car related stories. But I have to say, almost all of his episodes are funny, well produced and to the point. I never miss an episode.
+Website – Podcast
+ Airline Pilot Guy
+Airline Pilot Guy is an aviation podcast hosted by Capt. Jeff, Dr. Steph, Capt. Nick, and Miami Rick (Also a Capt.) along with sometimes co-host Capt. Dana. Produced by Liz Pyper. It’s a weekly 3 HOUR SHOW all about the Aviation Profession and Hobby. The hosts are current or former Airline Pilots (other than Dr. Steph who is commercial pilot rated but plays a Doctor in real life).
+It’s broken it segments for News, “Getting to Know You” where the crew tells what they have been up to the week before, The Coffee Fund (which is Jeff begging for money 🙂 ) and the ever popular “Plane Tales” by “The Old Pilot (who is really Capt. Nick) and of course FEEDBACK. It’s the show with the most feedback than any I’ve ever heard of. Jeff and the crew answer about 2 hours of questions every week and the audience participation is the best. You might even hear me on there once in a while 🙂 .
+Website – Podcast
+ ARRL Audio News
+This is a weekly podcast from the American Radio Relay League (Amateur Radio or Ham Radio). Gives the latest news around the world for Amateur Radio. Hosted by the league employees.
+Website – Podcast
+
+ Podnews
+This is a Daily (Monday-Friday) podcast of the Podnews.net newsletter by James Cridland. Gives a daily round up of podcasting news and opinions from the editor (James). Sometimes a bit snarky and James has a very cool aloof British Accent 🙂
+You should really sign up for the newsletter AND listen to the podcast. Very informative about the podcast industry.
+Webiste – Podcast
+ Podcasting 2.0
+Podcasting 2.0 is Adam Curry and Dave Jones, the guys behind the Podcast Index. Adam, of course, is the Podfather and former MTV VJ (One of the guys that invented podcasting) and Dave is a “dude named Ben” (developer and I.T. Guy). They call this podcast the “Board Meeting” for Podcast Index LLC. This one is a bit geeky, and fun because it’s more Adam.
+They talk about what is going on in the Podcast Index and the new “Podcast” namespace for RSS.
+Website – Podcast
+A few more I don’t miss.
+Dave Rubin’s “The Rubin Report “
+Adam Curry and John C. Dvorak’s “No Agenda “
+Todd Cochrane and Rob Greenlee’s “New Media Show “
+AND of course there are my other shows.
+Podcast Insider and Mike Dell’s World
+There are quite a few more that I like. But these 8 are my must listen (or watch) podcasts.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ Mike Dell
+
+ 150
+ My 8 Favorite Podcasts
+ 19:52
+
+ -
+
The beauty of Simple (Part 2) – PHD149
+ https://www.podcasthelpdesk.com/the-beauty-of-simple-part-2-phd149/
+ Tue, 17 Nov 2020 22:00:01 +0000
+ https://www.podcasthelpdesk.com/?p=759
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don’t have a lot of time.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Mike Dell
+
+ 149
+ The beauty of Simple (Part 2)
+ 5:07
+
+ -
+
Do not look at your stats for the first 3 months – PHD148
+ https://www.podcasthelpdesk.com/do-not-look-at-your-stats-for-the-first-3-months-phd148/
+ Mon, 16 Nov 2020 09:20:38 +0000
+ https://www.podcasthelpdesk.com/?p=757
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ YES, I really did just say don’t look at your stats for 3 months. People can get so obsessed with their numbers that they forget to put their energy into the podcast episodes themselves. Your show will grow if it’s good and you keep doing it. So focus on that. It WILL grow, but sometimes it’s much slower than we want it to be.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ Mike Dell
+
+ 148
+ Do not look at your stats for the first 3 months
+ 3:47
+
+ -
+
Who Is Your Show For? – PHD147
+ https://www.podcasthelpdesk.com/who-is-your-shoe-for-phd147/
+ Sun, 15 Nov 2020 22:03:19 +0000
+ https://www.podcasthelpdesk.com/?p=753
+ So, who exactly is your show for?
+
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ So, who exactly is your show for?
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+
+]]>
+
+ So, who exactly is your show for? - When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ So, who exactly is your show for? <br />
+<br />
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ Mike Dell
+
+ 147
+ Who Is Your Show For?
+ 8:02
+
+ -
+
8 Things YOU Need To Know (or learn) About YOUR Podcast – PHD146
+ https://www.podcasthelpdesk.com/8-things-you-need-to-know-or-learn-about-your-podcast-phd146/
+ Thu, 12 Nov 2020 18:48:38 +0000
+ https://www.podcasthelpdesk.com/?p=749
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it's a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+ There are many things about a podcast that a podcaster needs to know even if you don’t do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it’s a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+Here is my checklist of things I suggest you Know or Learn about your show so that you are able to take care of what needs to be taken care of if something goes wrong.
+
+RSS feed address. The WHOLE address.
+The Title of your show as it appears in the directories. This may seem silly, but sometimes people call a show by a shortened name or a ‘nickname’ of sorts. It’s always good to KNOW the title.
+The email address for the feed.
+Apple Podcasts listing URL (mainly the ID# at the end)
+Where is the website hosted. (and address)
+Where is the Podcast Media hosted.
+Logins to Website, Media Host, Web Host, Apple Podcasts and any other logins to manage listings on directories and apps,
+Media Encoding (This is a little geeky but it will help if you need to hire an editor)
+
+]]>
+
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it.
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it's a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+ Mike Dell
+
+ 146
+ 8 Things YOU Need To Know (or learn) About YOUR Podcast
+ 10:57
+
+
+
diff --git a/tests/fixtures/minimal.rss b/tests/fixtures/minimal.rss
new file mode 100644
index 0000000..ee929cf
--- /dev/null
+++ b/tests/fixtures/minimal.rss
@@ -0,0 +1,21 @@
+
+
+
+ Podcast Help Desk™
+ https://www.podcasthelpdesk.com
+ Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ -
+
Podcast Help Desk going 2 times weekly starting December 16th – PHD151
+
+
+
diff --git a/tests/fixtures/no-description.rss b/tests/fixtures/no-description.rss
new file mode 100644
index 0000000..186b181
--- /dev/null
+++ b/tests/fixtures/no-description.rss
@@ -0,0 +1,211 @@
+
+
+
+ Podcast Help Desk™
+
+ https://www.podcasthelpdesk.com
+ Mon, 30 Nov 2020 21:57:33 +0000
+ en
+ hourly
+ 1
+ 2020-01-01T12:00+00:00
+ https://wordpress.org/?v=5.5.1
+
+
+ https://www.podcasthelpdesk.com/feed/podcast/
+ SMRY Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ Mike Dell
+ clean
+
+ episodic
+
+ Mike Dell
+ mike@mikedell.com
+
+ mike@mikedell.com (Mike Dell)
+ © 2012-2020 Podcast Help Desk
+ ST Podcasting tips, opinions, gear, technology and news
+
+
+
+
+
+
+
+
+ TV-G
+ Traverse City, Michigan
+ Twice Weekly
+
+ -
+
Podcast Help Desk going 2 times weekly starting December 16th – PHD151
+ https://www.podcasthelpdesk.com/podcast-help-desk-going-2-times-weekly-starting-december-16th-phd151/
+ Mon, 30 Nov 2020 21:57:33 +0000
+ https://www.podcasthelpdesk.com/?p=775
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way.
+The Good News and part of the “big” announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+As the unofficial companion show to Podcast Insider – Blubry’s Official Podcast and Blog, I will be putting out short 10-15 minute (most of the time) episodes of Podcast Help Desk on Wednesday and Friday, Every single week! It’s my “Get Mike to take podcasting more seriously” project. I’ve always preached that being constant is one key way to grow a show. The only show I’ve ever been able to do that on was Podcast Insider. Now I want to add Podcast Help Desk to that success schedule-keeping. Call it my “Podcast Improvement Plan”.
+Another thing I’ve been told (and believed) that 1 time a week is good, 2 times a week is better. I want to put that to the test.
+Also, recently, I’ve been hearing that people prefer shorter episodes. We will be testing that theory as well.
+If you would like to have me cover a topic, have a general podcasting question or just want to make a comment, hit the “leave a voicemail” tab on PodcastHelpDesk.com or send me an email, podcasthelpdesk@gmail.com and I will put it in Queue.
+Be sure to subscribe to Podcast Insider as well at PodcastInsider.com
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+***Note: I had a slight noise issue on this recording. Rather than re-record it, here it is in all it’s glory! 🙂
+]]>
+
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way. The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ I failed miserably at completing the NaPodPoMo 30 episodes in 30 days this year. OH well, Such is life getting in the way. <br />
+The Good News and part of the "big" announcement I teased is this show is going 2 times weekly starting on Dec. 16, 2020.
+ Mike Dell
+
+ 151
+ Podcast Help Desk going 2 times weekly starting December 16th
+ 7:10
+ clean
+
+ -
+
My 8 Favorite Podcasts – PHD150
+ https://www.podcasthelpdesk.com/my-8-favorite-podcasts-phd150/
+ Sat, 21 Nov 2020 09:20:08 +0000
+ https://www.podcasthelpdesk.com/?p=764
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ I’m not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don’t subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order. Just that these 8 are listened to nearly as soon as they come in.
+ Lehto’s Law
+Steve Lehto is a Lawyer in Michigan and an author. He specializes in Lemon Law cases. He has been doing a YouTube channel for a 5 or 6 years and then takes the audio and puts it out as a podcast. He does 2 Episodes a day, 7 days a week! At the end of 2020 he will have posted 732 episodes in this year ALONE! DANG!.
+They are short episodes. Normally between 9 and 15 minutes each. He covers most any law stories. Sometimes car related stories. But I have to say, almost all of his episodes are funny, well produced and to the point. I never miss an episode.
+Website – Podcast
+ Airline Pilot Guy
+Airline Pilot Guy is an aviation podcast hosted by Capt. Jeff, Dr. Steph, Capt. Nick, and Miami Rick (Also a Capt.) along with sometimes co-host Capt. Dana. Produced by Liz Pyper. It’s a weekly 3 HOUR SHOW all about the Aviation Profession and Hobby. The hosts are current or former Airline Pilots (other than Dr. Steph who is commercial pilot rated but plays a Doctor in real life).
+It’s broken it segments for News, “Getting to Know You” where the crew tells what they have been up to the week before, The Coffee Fund (which is Jeff begging for money 🙂 ) and the ever popular “Plane Tales” by “The Old Pilot (who is really Capt. Nick) and of course FEEDBACK. It’s the show with the most feedback than any I’ve ever heard of. Jeff and the crew answer about 2 hours of questions every week and the audience participation is the best. You might even hear me on there once in a while 🙂 .
+Website – Podcast
+ ARRL Audio News
+This is a weekly podcast from the American Radio Relay League (Amateur Radio or Ham Radio). Gives the latest news around the world for Amateur Radio. Hosted by the league employees.
+Website – Podcast
+
+ Podnews
+This is a Daily (Monday-Friday) podcast of the Podnews.net newsletter by James Cridland. Gives a daily round up of podcasting news and opinions from the editor (James). Sometimes a bit snarky and James has a very cool aloof British Accent 🙂
+You should really sign up for the newsletter AND listen to the podcast. Very informative about the podcast industry.
+Webiste – Podcast
+ Podcasting 2.0
+Podcasting 2.0 is Adam Curry and Dave Jones, the guys behind the Podcast Index. Adam, of course, is the Podfather and former MTV VJ (One of the guys that invented podcasting) and Dave is a “dude named Ben” (developer and I.T. Guy). They call this podcast the “Board Meeting” for Podcast Index LLC. This one is a bit geeky, and fun because it’s more Adam.
+They talk about what is going on in the Podcast Index and the new “Podcast” namespace for RSS.
+Website – Podcast
+A few more I don’t miss.
+Dave Rubin’s “The Rubin Report “
+Adam Curry and John C. Dvorak’s “No Agenda “
+Todd Cochrane and Rob Greenlee’s “New Media Show “
+AND of course there are my other shows.
+Podcast Insider and Mike Dell’s World
+There are quite a few more that I like. But these 8 are my must listen (or watch) podcasts.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ I'm not only a podcaster, but an avid podcast listener. I have something like 30 shows that I subscribe to plus I listen to a lot of one-off shows that I don't subscribe to. Here is my top 8 (as of late November 2020) Also, not in Rank order.
+ Mike Dell
+
+ 150
+ My 8 Favorite Podcasts
+ 19:52
+
+ -
+
The beauty of Simple (Part 2) – PHD149
+ https://www.podcasthelpdesk.com/the-beauty-of-simple-part-2-phd149/
+ Tue, 17 Nov 2020 22:00:01 +0000
+ https://www.podcasthelpdesk.com/?p=759
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don’t have a lot of time.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Keeping it simple makes it easy for you to produce your podcast and not worry about waisting a lot of time if you don't have a lot of time.
+ Mike Dell
+
+ 149
+ The beauty of Simple (Part 2)
+ 5:07
+
+ -
+
Do not look at your stats for the first 3 months – PHD148
+ https://www.podcasthelpdesk.com/do-not-look-at-your-stats-for-the-first-3-months-phd148/
+ Mon, 16 Nov 2020 09:20:38 +0000
+ https://www.podcasthelpdesk.com/?p=757
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ YES, I really did just say don’t look at your stats for 3 months. People can get so obsessed with their numbers that they forget to put their energy into the podcast episodes themselves. Your show will grow if it’s good and you keep doing it. So focus on that. It WILL grow, but sometimes it’s much slower than we want it to be.
+This podcast is posted on PodcastHelpDesk.com. Go there and subscribe!
+]]>
+
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ YES, I really did just say don't look at your stats for 3 months! THIS MEANS YOU!
+ Mike Dell
+
+ 148
+ Do not look at your stats for the first 3 months
+ 3:47
+
+ -
+
Who Is Your Show For? – PHD147
+ https://www.podcasthelpdesk.com/who-is-your-shoe-for-phd147/
+ Sun, 15 Nov 2020 22:03:19 +0000
+ https://www.podcasthelpdesk.com/?p=753
+ So, who exactly is your show for?
+
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ So, who exactly is your show for?
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+
+]]>
+
+ So, who exactly is your show for? - When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ So, who exactly is your show for? <br />
+<br />
+When you try to make a podcast for EVERYONE, you really are making a show for NOBODY.
+ Mike Dell
+
+ 147
+ Who Is Your Show For?
+ 8:02
+
+ -
+
8 Things YOU Need To Know (or learn) About YOUR Podcast – PHD146
+ https://www.podcasthelpdesk.com/8-things-you-need-to-know-or-learn-about-your-podcast-phd146/
+ Thu, 12 Nov 2020 18:48:38 +0000
+ https://www.podcasthelpdesk.com/?p=749
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it's a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+ There are many things about a podcast that a podcaster needs to know even if you don’t do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it’s a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+Here is my checklist of things I suggest you Know or Learn about your show so that you are able to take care of what needs to be taken care of if something goes wrong.
+
+RSS feed address. The WHOLE address.
+The Title of your show as it appears in the directories. This may seem silly, but sometimes people call a show by a shortened name or a ‘nickname’ of sorts. It’s always good to KNOW the title.
+The email address for the feed.
+Apple Podcasts listing URL (mainly the ID# at the end)
+Where is the website hosted. (and address)
+Where is the Podcast Media hosted.
+Logins to Website, Media Host, Web Host, Apple Podcasts and any other logins to manage listings on directories and apps,
+Media Encoding (This is a little geeky but it will help if you need to hire an editor)
+
+]]>
+
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it.
+ There are many things about a podcast that a podcaster needs to know even if you don't do everything for your show. A lot of indie podcasters do everything. Prep, Talent, Recording, Editing, Producing, Publishing, Booking guests and ALL of it. Some only do the parts of it. Sometimes it's a whole team. BUT, YOU as the owner of your show, need to know some things no matter if you do them or not.
+ Mike Dell
+
+ 146
+ 8 Things YOU Need To Know (or learn) About YOUR Podcast
+ 10:57
+
+
+
diff --git a/tests/fixtures/not-xml.rss b/tests/fixtures/not-xml.rss
new file mode 100644
index 0000000..c757804
--- /dev/null
+++ b/tests/fixtures/not-xml.rss
@@ -0,0 +1 @@
+i am not xml
\ No newline at end of file
diff --git a/tests/fixtures/seasons.rss b/tests/fixtures/seasons.rss
new file mode 100644
index 0000000..bef277d
--- /dev/null
+++ b/tests/fixtures/seasons.rss
@@ -0,0 +1,25 @@
+
+
+
+ Podcast Help Desk™
+ https://www.podcasthelpdesk.com
+ Podcasting tips, opinions, gear, technology and news from a Veteran podcaster of over 15 years. Have a podcasting question? Ask here at the Podcast Help Desk.
+ serial
+ -
+
Podcast Help Desk going 2 times weekly starting December 16th – PHD151
+ full
+ 5
+ 2
+
+
+