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

+
+

\

+ + + + + + + + + + + + + + +
NameDescription +
+ Exception + + No description available + EMPTY +
+
+
+

\Lukaswhite\PodcastFeedParser

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription +
+ 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 ParserEMPTY +
+ Podcast + + No description available + EMPTY +
+
+
+

\Lukaswhite\PodcastFeedParser\Exceptions

+ + + + + + + + + + + + + + + + + + + +
NameDescription +
+ FileNotFoundException + + No description available + EMPTY +
+ InvalidXmlException + + No description available + EMPTY +
+
+
+

\Lukaswhite\PodcastFeedParser\Rawvoice

+ + + + + + + + + + + + + + +
NameDescription +
+ Subscribe + Class SubscribeEMPTY +
+
+
+ + + 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 + — + int
    The exception code
  • +
  • $file + — + string
    The filename where the exception was created
  • +
  • $line + — + int
    The line where the exception was created
  • +
  • $message + — + string
    The exception message
  • +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +
+
+ + + 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

+

+

+
+
+ 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +
+
+ + + 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

+
+

protected

+
    +
  • $uri + — + string
  • +
+
+

Methods

+
+

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasUri

+

public

+ +
+
+
+ + + 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

+ + + + + + + + + + + + + + + + + +
NameValue
ITUNES'itunes'
GOOGLE_PLAY'googleplay'
+

Members

+
+

protected

+
    +
  • $name + — + string
  • +
  • $subCategories + — + array
  • +
  • $type + — + string
  • +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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

+

+

+

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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 HasArtwork
  • public Artwork getArtwork() +
  • public HasArtwork setArtwork() +
  • // Inherited methods from HasLink
  • public string getLink() +
  • public HasLink setLink() +
+ + }
+

Hierarchy

+ +

Members

+
+

protected

+ +
+

Methods

+ +
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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 + {
  • // Inherited members from Exception
  • protected  $message; +
  • protected  $code; +
  • protected  $file; +
  • protected  $line; +
+ + }
+

Hierarchy

+
+

Extends

+ +
+

Members

+
+

protected

+
    +
  • $code + — + int
    The exception code
  • +
  • $file + — + string
    The filename where the exception was created
  • +
  • $line + — + int
    The line where the exception was created
  • +
  • $message + — + string
    The exception message
  • +
+
+

Methods

+
+

Inherited from Exception

+

public

+ +
+
+
+ + + 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 + {
  • // Inherited members from Exception
  • protected  $message; +
  • protected  $code; +
  • protected  $file; +
  • protected  $line; +
+ + }
+

Hierarchy

+
+

Extends

+ +
+

Members

+
+

protected

+
    +
  • $code + — + int
    The exception code
  • +
  • $file + — + string
    The filename where the exception was created
  • +
  • $line + — + int
    The line where the exception was created
  • +
  • $message + — + string
    The exception message
  • +
+
+

Methods

+
+

Inherited from Exception

+

public

+ +
+
+
+ + + 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

+
class Link + {
  • // members
  • protected  $uri; +
  • protected  $rel; +
  • protected  $type; +
+ + }
+

Members

+
+

protected

+
    +
  • $rel + — + string
  • +
  • $type + — + string
  • +
  • $uri + — + string
  • +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasUri

+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
class Owner + {
  • // members
  • protected  $name; +
  • protected  $email; +
+ + }
+

Members

+
+

protected

+
    +
  • $email + — + string
  • +
  • $name + — + string
  • +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameValue
    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 + — + string
      The raw feed content
    • +
    • $sp + — + \SimplePie
    • +
    +
    +

    Methods

    +
    +

    protected

    + +

    public

    +
      +
    • + load() +
    • +
    • run() + — Run the parser and return an object that represents the parsed podcast.
    • +
    • + setContent() +
    • +
    +
    +
+
+ + + 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

    +
    + protected function getFile(SimplePie_Item + $item ) + +
    +

    Parameters

    +
    +
    $item + — + \SimplePie_Item
    +



    +
    +

    Returns

    +
    +
    Media
    +

    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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 + +
    +
    +
    +

+
+ + + 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 + + + + + +
+
+ +
+ +
+

Lukaswhite\PodcastFeedParser\Parser::parseAtomTags

+

+

+

+
+ + + 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

    +
    + protected function parseEpisodeItem(SimplePie_Item + $item ) + +
    +

    Parameters

    +
    +
    $item + — + \SimplePie_Item
    +



    +
    +

    Returns

    +
    +
    Episode
    +

    +
    +
    +

    Errors/Exceptions

    +
    +
    + + Exception + +
    +
    +
    +

+
+ + + 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

+

+

+

+
+ + + 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 + + + + + +
+
+ +
+ +
+

Lukaswhite\PodcastFeedParser\Parser::parseRssTags

+

+

+

+
+ + + 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

+

+

+

+
+ + + 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 + +
    +
    +
    +
+
+ + + 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 + +
    +
    +
    +

+
+ + + 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 HasArtwork
  • public Artwork getArtwork() +
  • public HasArtwork setArtwork() +
  • // Inherited methods from HasLink
  • public string getLink() +
  • public HasLink setLink() +
+ + }
+

Hierarchy

+ +

Constants

+ + + + + + + + + + + + + + + + + +
NameValue
EPISODIC'episodic'
SERIAL'serial'
+

Members

+
+

protected

+
    +
  • $artwork + — + Lukaswhite\PodcastFeedParser\Artwork
  • + +
  • $author + — + string
  • +
  • $categories + — + array
  • + +
  • $description + — + string
  • +
  • $episodes + — + array
  • +
  • $explicit + — + string
  • +
  • $generator + — + string
  • +
  • $language + — + string
  • +
  • $lastBuildDate + — + \DateTime
  • + +
  • $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

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasTitles

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasDescription

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\IsRssFeed

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasItunesTags

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasAtomTags

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasSyndicationTags

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasRawvoiceTags

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasArtwork

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasLink

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasExplicit

+

public

+ +

Inherited from Lukaswhite\PodcastFeedParser\Traits\HasCategories

+

public

+ +
+
+
+ + + 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

+

+

+

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameValue
    FEED'feed'
    ITUNES'itunes'
    GOOGLEPLAY'googleplay'
    BLUBRRY'blubrry'
    HTML'html'
    STITCHER'stitcher'
    TUNEIN'tunein'
    +

    Members

    +
    +

    protected

    +
      + +
    +
    +

    Methods

    +
    +

    public

    + +
    +
+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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 LengthNaN +
Average Method LengthNaN +
Functions + (0%)
Average Function LengthNaN +
Not in classes or functions + (0%)
+
+
+

Complexity

+ + + + + + + + + +
Cyclomatic Complexity / LLOC0 +
Cyclomatic Complexity / Number of Methods0 +
+
+
+

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%)
+
+
+
+ + + 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

+ + + + + + + + + + + + + +
NameDescription
+ HasArtwork + + No description available +
+
+
+ + + 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 + {
+ + }
+
+
+ + + 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameInterfacesClassesTraits
\0 + 1 + 0
\Lukaswhite\PodcastFeedParser0 + 8 + 0
\Lukaswhite\PodcastFeedParser\Contracts + 1 + 00
\Lukaswhite\PodcastFeedParser\Exceptions0 + 2 + 0
\Lukaswhite\PodcastFeedParser\Rawvoice0 + 1 + 0
\Lukaswhite\PodcastFeedParser\Traits00 + 12 +
+
+
+ + + 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.php

1234567891011
<?php

namespace Lukaswhite\PodcastFeedParser;

use Lukaswhite\PodcastFeedParser\Traits\HasUri;

class Artwork
{
    use     HasUri;

}
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.php

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
<?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/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.php

12345678910
<?php


namespace Lukaswhite\PodcastFeedParser\Contracts;


interface HasArtwork
{

}
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. +

+ + + + + + + + + + + + + + + +
NameSizeLast 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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
<?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/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.php

12345678910
<?php


namespace Lukaswhite\PodcastFeedParser\Exceptions;


class FileNotFoundException extends \Exception
{

}
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.php

12345678910
<?php


namespace Lukaswhite\PodcastFeedParser\Exceptions;


class InvalidXmlException extends \Exception
{

}
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. +

+ + + + + + + + + + + + + + + + + + + + +
NameSizeLast Modified
+ FileNotFoundException.php + 112 Bytes + 2020-12-03T04:16:53+00:00
+ InvalidXmlException.php + 110 Bytes + 2020-12-03T04:23:35+00:00
+ + Total: 2 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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
<?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/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.php

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
<?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/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.php

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
<?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/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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
<?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/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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
<?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/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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
<?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/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. +

+ + + + + + + + + + + + + + + +
NameSizeLast 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.php

123456789101112131415161718192021222324252627282930313233
<?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/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.php

123456789101112131415161718192021222324252627282930313233
<?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/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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445
<?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/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.php

123456789101112131415161718192021222324252627282930
<?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/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.php

12345678910111213141516171819202122232425262728293031
<?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/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.php

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
<?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/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.php

123456789101112131415161718192021222324252627282930
<?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/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.php

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
<?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/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.php

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
<?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/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.php

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
<?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/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.php

123456789101112131415161718192021222324252627282930313233
<?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/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.php

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
<?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/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. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameSizeLast Modified
+ HasArtwork.php + 480 Bytes + 2020-12-03T02:43:22+00:00
+ HasAtomTags.php + 477 Bytes + 2020-12-04T00:58:29+00:00
+ HasCategories.php + 877 Bytes + 2020-12-03T04:11:30+00:00
+ HasDescription.php + 463 Bytes + 2020-12-03T02:42:34+00:00
+ HasExplicit.php + 444 Bytes + 2020-12-03T03:21:20+00:00
+ HasItunesTags.php + 1.4 KB + 2020-12-04T00:50:45+00:00
+ HasLink.php + 406 Bytes + 2020-12-03T03:34:36+00:00
+ HasRawvoiceTags.php + 1.8 KB + 2020-12-04T01:26:24+00:00
+ HasSyndicationTags.php + 1.3 KB + 2020-12-04T01:19:38+00:00
+ HasTitles.php + 770 Bytes + 2020-12-03T02:41:46+00:00
+ HasUri.php + 437 Bytes + 2020-12-03T03:00:22+00:00
+ IsRssFeed.php + 905 Bytes + 2020-12-04T00:31:05+00:00
+ + Total: 12 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 + + + + + +
+
+ +
+

Source of Podcast Feed Parser

+

+ This project consists of 5 directories, containing + a total of 24 files. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameSizeLast 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescription
+ HasArtwork + + No description available +
+ HasAtomTags + + No description available +
+ HasCategories + Trait HasCategories
+ HasDescription + + No description available +
+ HasExplicit + + No description available +
+ HasItunesTags + + No description available +
+ HasLink + + No description available +
+ HasRawvoiceTags + + No description available +
+ HasSyndicationTags + + No description available +
+ HasTitles + + No description available +
+ HasUri + + No description available +
+ IsRssFeed + + No description available +
+
+
+ + + 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 + {
  • // members
  • protected Artwork $artwork; +
+ + }
+

Hierarchy

+ +

Members

+
+

protected

+ +
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

Used by

+ +
+

Members

+
+

protected

+
    + +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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

+

+

+

+
+ + + 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
    +
    +
    +

+
+ + + 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

+

+

+
+ + + 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

+

+

+

+
+ + + 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
    +
    +
    +

+
+ + + 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

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

Used by

+ +
+

Members

+
+

protected

+ +
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

protected

+
    + +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

Used by

+ +
+

Members

+
+

protected

+ +
+

Methods

+ +
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

Used by

+ +
+

Members

+
+

protected

+
    +
  • $updateBase + — + \DateTime
  • +
  • $updateFrequency + — + int
  • +
  • $updatePeriod + — + string
  • +
+
+

Methods

+ +
+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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; +
  • // methods
  • public string getUri() +
  • public HasUri setUri() +
+ + }
+

Hierarchy

+ +

Members

+
+

protected

+
    +
  • $uri + — + string
  • +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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

+
+

Used by

+ +
+

Members

+
+

protected

+
    +
  • $generator + — + string
  • +
  • $lastBuildDate + — + \DateTime
  • +
+
+

Methods

+
+

public

+ +
+
+
+ + + 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
    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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
    +

    +
    +
    +

+
+ + + 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.

+

WebsitePodcast

+

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 🙂 .

+

WebsitePodcast

+

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.

+

WebsitePodcast

+

 

+

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.

+

WebistePodcast

+

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.

+
    +
  1. RSS feed address. The WHOLE address.
  2. +
  3. 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.
  4. +
  5. The email address for the feed.
  6. +
  7. Apple Podcasts listing URL (mainly the ID# at the end)
  8. +
  9. Where is the website hosted. (and address)
  10. +
  11. Where is the Podcast Media hosted.
  12. +
  13. Logins to Website, Media Host, Web Host, Apple Podcasts and any other logins to manage listings on directories and apps,
  14. +
  15. Media Encoding (This is a little geeky but it will help if you need to hire an editor)
  16. +
+]]>
+ + 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.

+

WebsitePodcast

+

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 🙂 .

+

WebsitePodcast

+

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.

+

WebsitePodcast

+

 

+

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.

+

WebistePodcast

+

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.

+
    +
  1. RSS feed address. The WHOLE address.
  2. +
  3. 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.
  4. +
  5. The email address for the feed.
  6. +
  7. Apple Podcasts listing URL (mainly the ID# at the end)
  8. +
  9. Where is the website hosted. (and address)
  10. +
  11. Where is the Podcast Media hosted.
  12. +
  13. Logins to Website, Media Host, Web Host, Apple Podcasts and any other logins to manage listings on directories and apps,
  14. +
  15. Media Encoding (This is a little geeky but it will help if you need to hire an editor)
  16. +
+]]>
+ + 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.

+

WebsitePodcast

+

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 🙂 .

+

WebsitePodcast

+

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.

+

WebsitePodcast

+

 

+

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.

+

WebistePodcast

+

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.

+
    +
  1. RSS feed address. The WHOLE address.
  2. +
  3. 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.
  4. +
  5. The email address for the feed.
  6. +
  7. Apple Podcasts listing URL (mainly the ID# at the end)
  8. +
  9. Where is the website hosted. (and address)
  10. +
  11. Where is the Podcast Media hosted.
  12. +
  13. Logins to Website, Media Host, Web Host, Apple Podcasts and any other logins to manage listings on directories and apps,
  14. +
  15. Media Encoding (This is a little geeky but it will help if you need to hire an editor)
  16. +
+]]>
+ + 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 + + +