YoutubeContentGenerator.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace PicoFeed\Generator;
  3. use PicoFeed\Base;
  4. use PicoFeed\Parser\Item;
  5. /**
  6. * Youtube Content Generator
  7. *
  8. * @package PicoFeed\Generator
  9. * @author Frederic Guillot
  10. */
  11. class YoutubeContentGenerator extends Base implements ContentGeneratorInterface
  12. {
  13. /**
  14. * Execute Content Generator
  15. *
  16. * @access public
  17. * @param Item $item
  18. * @return boolean
  19. */
  20. public function execute(Item $item)
  21. {
  22. if ($item->hasNamespace('yt')) {
  23. return $this->generateHtmlFromXml($item);
  24. }
  25. return $this->generateHtmlFromUrl($item);
  26. }
  27. /**
  28. * Generate HTML
  29. *
  30. * @access public
  31. * @param Item $item
  32. * @return boolean
  33. */
  34. private function generateHtmlFromXml(Item $item)
  35. {
  36. $videoId = $item->getTag('yt:videoId');
  37. if (! empty($videoId)) {
  38. $item->setContent('<iframe width="560" height="315" src="//www.youtube.com/embed/'.$videoId[0].'" frameborder="0"></iframe>');
  39. return true;
  40. }
  41. return false;
  42. }
  43. /**
  44. * Generate HTML from item URL
  45. *
  46. * @access public
  47. * @param Item $item
  48. * @return bool
  49. */
  50. public function generateHtmlFromUrl(Item $item)
  51. {
  52. if (preg_match('/youtube\.com\/watch\?v=(.*)/', $item->getUrl(), $matches)) {
  53. $item->setContent('<iframe width="560" height="315" src="//www.youtube.com/embed/'.$matches[1].'" frameborder="0"></iframe>');
  54. return true;
  55. }
  56. return false;
  57. }
  58. }