Skip to content

Commit

Permalink
[DailymotionBridge] Use API for playlist and user account feeds (RSS-…
Browse files Browse the repository at this point in the history
  • Loading branch information
VerifiedJoseph authored and teromene committed Sep 7, 2019
1 parent 9cef1da commit 459ca3a
Showing 1 changed file with 114 additions and 38 deletions.
152 changes: 114 additions & 38 deletions bridges/DailymotionBridge.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class DailymotionBridge extends BridgeAbstract {
const MAINTAINER = 'mitsukarenai';
const NAME = 'Dailymotion Bridge';
const URI = 'https://www.dailymotion.com/';
const CACHE_TIMEOUT = 10800; // 3h
const CACHE_TIMEOUT = 3600; // 1h
const DESCRIPTION = 'Returns the 5 newest videos by username/playlist or search';

const PARAMETERS = array (
Expand All @@ -27,101 +27,177 @@ class DailymotionBridge extends BridgeAbstract {
),
'pa' => array(
'name' => 'Page',
'type' => 'number'
'type' => 'number',
'defaultValue' => 1,
)
)
);

protected function getMetadata($id){
$metadata = array();
$html2 = getSimpleHTMLDOM(self::URI . 'video/' . $id);
if(!$html2) {
return $metadata;
}
private $feedName = '';

$metadata['title'] = $html2->find('meta[property=og:title]', 0)->getAttribute('content');
$metadata['timestamp'] = strtotime(
$html2->find('meta[property=video:release_date]', 0)->getAttribute('content')
);
$metadata['thumbnailUri'] = $html2->find('meta[property=og:image]', 0)->getAttribute('content');
$metadata['uri'] = $html2->find('meta[property=og:url]', 0)->getAttribute('content');
return $metadata;
}
private $apiUrl = 'https://api.dailymotion.com';
private $apiFields = 'created_time,description,id,owner.screenname,tags,thumbnail_url,title,url';

public function getIcon() {
return 'https://static1-ssl.dmcdn.net/images/neon/favicons/android-icon-36x36.png.vf806ca4ed0deed812';
}

public function collectData(){
$html = '';
$limit = 5;
$count = 0;
public function collectData() {

if ($this->queriedContext === 'By username' || $this->queriedContext === 'By playlist id') {

$apiJson = getContents($this->getApiUrl())
or returnServerError('Could not request: ' . $this->getApiUrl());

$apiData = json_decode($apiJson, true);

$this->feedName = $this->getPlaylistTitle($this->getInput('p'));

foreach ($apiData['list'] as $apiItem) {
$item = array();

$item['uri'] = $apiItem['url'];
$item['uid'] = $apiItem['id'];
$item['title'] = $apiItem['title'];
$item['timestamp'] = $apiItem['created_time'];
$item['author'] = $apiItem['owner.screenname'];
$item['content'] = '<p><a href="' . $apiItem['url'] . '">
<img src="' . $apiItem['thumbnail_url'] . '"></a></p><p>' . $apiItem['description'] . '</p>';
$item['categories'] = $apiItem['tags'];
$item['enclosures'][] = $apiItem['thumbnail_url'];

$html = getSimpleHTMLDOM($this->getURI())
or returnServerError('Could not request Dailymotion.');
$this->items[] = $item;
}
}

foreach($html->find('div.media a.preview_link') as $element) {
if($count < $limit) {
if ($this->queriedContext === 'From search results') {

$html = getSimpleHTMLDOM($this->getURI())
or returnServerError('Could not request Dailymotion.');

foreach($html->find('div.media a.preview_link') as $element) {
$item = array();

$item['id'] = str_replace('/video/', '', strtok($element->href, '_'));
$metadata = $this->getMetadata($item['id']);

if(empty($metadata)) {
continue;
}

$item['uri'] = $metadata['uri'];
$item['title'] = $metadata['title'];
$item['timestamp'] = $metadata['timestamp'];

$item['content'] = '<a href="'
. $item['uri']
. '"><img src="'
. $metadata['thumbnailUri']
. '" /></a><br><a href="'
. $item['uri']
. '">'
. $item['title']
. '</a>';
. $item['uri']
. '"><img src="'
. $metadata['thumbnailUri']
. '" /></a><br><a href="'
. $item['uri']
. '">'
. $item['title']
. '</a>';

$this->items[] = $item;
$count++;

if (count($this->items) >= 5) {
break;
}
}
}
}

public function getName(){
public function getName() {
switch($this->queriedContext) {
case 'By username':
$specific = $this->getInput('u');
break;
case 'By playlist id':
$specific = strtok($this->getInput('p'), '_');

if ($this->feedName) {
$specific = $this->feedName;
}

break;
case 'From search results':
$specific = $this->getInput('s');
break;
default: return parent::getName();
}

return $specific . ' : Dailymotion Bridge';
return $specific . ' : Dailymotion';
}

public function getURI(){
$uri = self::URI;
switch($this->queriedContext) {
case 'By username':
$uri .= 'user/' . urlencode($this->getInput('u')) . '/1';
$uri .= 'user/' . urlencode($this->getInput('u'));
break;
case 'By playlist id':
$uri .= 'playlist/' . urlencode(strtok($this->getInput('p'), '_'));
break;
case 'From search results':
$uri .= 'search/' . urlencode($this->getInput('s'));
if($this->getInput('pa')) {
$uri .= '/' . $this->getInput('pa');

if(!is_null($this->getInput('pa'))) {
$pa = $this->getInput('pa');

if ($this->getInput('pa') < 1) {
$pa = 1;
}

$uri .= '/' . $pa;
}
break;
default: return parent::getURI();
}
return $uri;
}

private function getMetadata($id) {
$metadata = array();

$html = getSimpleHTMLDOM(self::URI . 'video/' . $id);

if(!$html) {
return $metadata;
}

$metadata['title'] = $html->find('meta[property=og:title]', 0)->getAttribute('content');
$metadata['timestamp'] = strtotime(
$html->find('meta[property=video:release_date]', 0)->getAttribute('content')
);
$metadata['thumbnailUri'] = $html->find('meta[property=og:image]', 0)->getAttribute('content');
$metadata['uri'] = $html->find('meta[property=og:url]', 0)->getAttribute('content');
return $metadata;
}

private function getPlaylistTitle($id) {
$title = '';

$url = self::URI . 'playlist/' . $id;

$html = getSimpleHTMLDOM($url)
or returnServerError('Could not request: ' . $url);

$title = $html->find('meta[property=og:title]', 0)->getAttribute('content');
return $title;
}

private function getApiUrl() {

switch($this->queriedContext) {
case 'By username':
return $this->apiUrl . '/user/' . $this->getInput('u')
. '/videos?fields=' . urlencode($this->apiFields) . '&availability=1&sort=recent&limit=5';
break;
case 'By playlist id':
return $this->apiUrl . '/playlist/' . $this->getInput('p')
. '/videos?fields=' . urlencode($this->apiFields) . '&limit=5';
break;
}
}
}

0 comments on commit 459ca3a

Please sign in to comment.