DailymotionBridge.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. class DailymotionBridge extends BridgeAbstract{
  3. private $request;
  4. public function loadMetadatas() {
  5. $this->maintainer = "mitsukarenai";
  6. $this->name = "Dailymotion Bridge";
  7. $this->uri = "https://www.dailymotion.com/";
  8. $this->description = "Returns the 5 newest videos by username/playlist or search";
  9. $this->parameters["By username"] = array(
  10. 'u'=>array('name'=>'username')
  11. );
  12. $this->parameters["By playlist id"] = array(
  13. 'p'=>array(
  14. 'name'=>'playlist id',
  15. 'type'=>'text')
  16. );
  17. $this->parameters["From search results"] = array(
  18. 's'=>array('name'=>'Search keyword'),
  19. 'pa'=>array(
  20. 'name'=>'Page',
  21. 'type'=>'number'
  22. )
  23. );
  24. }
  25. function getMetadata($id) {
  26. $metadata=array();
  27. $html2 = $this->getSimpleHTMLDOM('http://www.dailymotion.com/video/'.$id) or $this->returnServerError('Could not request Dailymotion.');
  28. $metadata['title'] = $html2->find('meta[property=og:title]', 0)->getAttribute('content');
  29. $metadata['timestamp'] = strtotime($html2->find('meta[property=video:release_date]', 0)->getAttribute('content') );
  30. $metadata['thumbnailUri'] = $html2->find('meta[property=og:image]', 0)->getAttribute('content');
  31. $metadata['uri'] = $html2->find('meta[property=og:url]', 0)->getAttribute('content');
  32. return $metadata;
  33. }
  34. public function collectData(array $param){
  35. $html = '';
  36. $limit = 5;
  37. $count = 0;
  38. if (isset($param['u'])) { // user timeline mode
  39. $this->request = $param['u'];
  40. $html = $this->getSimpleHTMLDOM('http://www.dailymotion.com/user/'.urlencode($this->request).'/1') or $this->returnServerError('Could not request Dailymotion.');
  41. }
  42. else if (isset($param['p'])) { // playlist mode
  43. $this->request = strtok($param['p'], '_');
  44. $html = $this->getSimpleHTMLDOM('http://www.dailymotion.com/playlist/'.urlencode($this->request).'') or $this->returnServerError('Could not request Dailymotion.');
  45. }
  46. else if (isset($param['s'])) { // search mode
  47. $this->request = $param['s']; $page = 1; if (isset($param['pa'])) $page = (int)preg_replace("/[^0-9]/",'', $param['pa']);
  48. $html = $this->getSimpleHTMLDOM('http://www.dailymotion.com/search/'.urlencode($this->request).'/'.$page.'') or $this->returnServerError('Could not request Dailymotion.');
  49. }
  50. else {
  51. $this->returnClientError('You must either specify a Dailymotion username (?u=...) or a playlist id (?p=...) or search (?s=...)');
  52. }
  53. foreach($html->find('div.media a.preview_link') as $element) {
  54. if($count < $limit) {
  55. $item = array();
  56. $item['id'] = str_replace('/video/', '', strtok($element->href, '_'));
  57. $metadata = $this->getMetadata($item['id']);
  58. $item['uri'] = $metadata['uri'];
  59. $item['title'] = $metadata['title'];
  60. $item['timestamp'] = $metadata['timestamp'];
  61. $item['content'] = '<a href="' . $item['uri'] . '"><img src="' . $metadata['thumbnailUri'] . '" /></a><br><a href="' . $item['uri'] . '">' . $item['title'] . '</a>';
  62. $this->items[] = $item;
  63. $count++;
  64. }
  65. }
  66. }
  67. public function getName(){
  68. return (!empty($this->request) ? $this->request .' - ' : '') .'Dailymotion Bridge';
  69. }
  70. public function getCacheDuration(){
  71. return 3600*3; // 3 hours
  72. }
  73. }