Jamendocom.php 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace Muzich\CoreBundle\Factory\Elements;
  3. use Muzich\CoreBundle\Factory\ElementFactory;
  4. use Muzich\CoreBundle\Entity\Element;
  5. use Muzich\CoreBundle\Factory\UrlMatchs;
  6. /**
  7. *
  8. *
  9. * @author bux
  10. */
  11. class Jamendocom extends ElementFactory
  12. {
  13. public function __construct(Element $element, Container $container, EntityManager $entity_manager)
  14. {
  15. parent::__construct($element, $container, $entity_manager);
  16. $this->url_matchs = UrlMatchs::$jamendo;
  17. }
  18. public function getStreamData()
  19. {
  20. // On determine le type et l'url
  21. $this->proceedTypeAndId();
  22. $type = $this->element->getData(Element::DATA_TYPE);
  23. $ref_id = $this->element->getData(Element::DATA_REF_ID);
  24. // Récupération de données avec l'API
  25. $api_url = null;
  26. switch ($type)
  27. {
  28. case 'track':
  29. $api_url = "http://api.jamendo.com/get2/name+stream/track/json/?track_id=".$ref_id;
  30. break;
  31. case 'album':
  32. $api_url = "http://api.jamendo.com/get2/name+stream/track/json/?album_id=".$ref_id;
  33. break;
  34. }
  35. if ($api_url)
  36. {
  37. $ch = curl_init($api_url);
  38. $options = array(
  39. CURLOPT_RETURNTRANSFER => true,
  40. CURLOPT_HTTPHEADER => array('Content-type: text/plain')
  41. );
  42. curl_setopt_array( $ch, $options );
  43. $result = json_decode(curl_exec($ch), true);
  44. if (count($result))
  45. {
  46. $data_return = array();
  47. foreach ($result as $song)
  48. {
  49. $data_return[] = array(
  50. 'name' => $song['name'],
  51. 'url' => $song['stream'],
  52. );
  53. }
  54. return $data_return;
  55. }
  56. }
  57. }
  58. /**
  59. * ALBUM = http://www.jamendo.com/fr/album/30661
  60. * TRACK = http://www.jamendo.com/fr/track/207079
  61. *
  62. * API: http://developer.jamendo.com/fr/wiki/Musiclist2ApiFields
  63. */
  64. public function retrieveDatas()
  65. {
  66. $type = $this->element->getData(Element::DATA_TYPE);
  67. $ref_id = $this->element->getData(Element::DATA_REF_ID);
  68. // Récupération de données avec l'API
  69. $api_url = null;
  70. switch ($type)
  71. {
  72. case 'album':
  73. $api_url = "http://api.jamendo.com/get2/"
  74. ."id+name+url+image+artist_name+artist_url/album/json/?album_id=".$ref_id;
  75. $api_tag_url = "http://api.jamendo.com/get2/name+weight/tag/json/album_tag/?album_id=".$ref_id;
  76. break;
  77. case 'track':
  78. $api_url = "http://api.jamendo.com/get2/"
  79. ."id+name+url+image+artist_name+artist_url+track_name/album/json/?track_id=".$ref_id;
  80. $api_tag_url = "http://api.jamendo.com/get2/name+weight/tag/json/track_tag/?track_id=".$ref_id;
  81. break;
  82. }
  83. if ($api_url)
  84. {
  85. $ch = curl_init($api_url);
  86. $options = array(
  87. CURLOPT_RETURNTRANSFER => true,
  88. CURLOPT_HTTPHEADER => array('Content-type: text/plain')
  89. );
  90. curl_setopt_array( $ch, $options );
  91. $result = json_decode(curl_exec($ch), true);
  92. if (count($result))
  93. {
  94. // Thumb
  95. if (array_key_exists('image', $result[0]))
  96. {
  97. $this->element->setData(Element::DATA_THUMB_URL, $result[0]['image']);
  98. }
  99. // Album name
  100. if (array_key_exists('name', $result[0]) && $type == 'album')
  101. {
  102. $this->element->setData(Element::DATA_TITLE, $result[0]['name']);
  103. }
  104. // Artist name
  105. if (array_key_exists('artist_name', $result[0]))
  106. {
  107. $this->element->setData(Element::DATA_ARTIST, $result[0]['artist_name']);
  108. }
  109. // track name
  110. if (array_key_exists('track_name', $result[0]) && $type == 'track')
  111. {
  112. $this->element->setData(Element::DATA_TITLE, $result[0]['track_name']);
  113. }
  114. // Maintenant au tour des tags (deuxième requete a l'api)
  115. $ch = curl_init($api_tag_url);
  116. $options = array(
  117. CURLOPT_RETURNTRANSFER => true,
  118. CURLOPT_HTTPHEADER => array('Content-type: text/plain')
  119. );
  120. curl_setopt_array( $ch, $options );
  121. $result = json_decode(curl_exec($ch), true);
  122. if (count($result))
  123. {
  124. $tags = array();
  125. foreach ($result as $tag)
  126. {
  127. $tags[] = $tag['name'];
  128. }
  129. $this->element->setData(Element::DATA_TAGS, $tags);
  130. }
  131. }
  132. }
  133. // Un contenu jamendo est toujours téléchargeable
  134. $this->element->setData(Element::DATA_DOWNLOAD, true);
  135. }
  136. public function proceedEmbedCode()
  137. {
  138. if (($ref_id = $this->element->getData(Element::DATA_REF_ID))
  139. && ($type = $this->element->getData(Element::DATA_TYPE)))
  140. {
  141. $height = $this->container->getParameter('jamendo_player_height');
  142. $width = $this->container->getParameter('jamendo_player_width');
  143. $embed_url = "http://widgets.jamendo.com/fr/$type/?".$type."_id=$ref_id&playertype=2008";
  144. $this->element->setEmbed(
  145. '<object width="'.$width.'" height="'.$height.'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"'
  146. .' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" align="middle">
  147. <param name="allowScriptAccess" value="always" />
  148. <param name="wmode" value="transparent" />
  149. <param name="movie" value="'.$embed_url.'" />
  150. <param name="quality" value="high" />
  151. <param name="bgcolor" value="#FFFFFF" />
  152. <embed src="'.$embed_url.'" quality="high" wmode="transparent" bgcolor="#FFFFFF"'
  153. .' width="'.$width.'" height="'.$height.'" align="middle" allowScriptAccess="always"'
  154. .' type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
  155. &nbsp;
  156. </embed>
  157. &nbsp;
  158. </object>'
  159. );
  160. }
  161. }
  162. public function proceedThumbnailUrl()
  163. {
  164. if (($thumb = $this->element->getData(Element::DATA_THUMB_URL)))
  165. {
  166. $this->element->setThumbnailUrl($thumb);
  167. }
  168. }
  169. }