import org.serviio.library.metadata.*
import org.serviio.library.online.*
import org.serviio.util.*
/********************************************************************
* Content URL extractor for Deutsche Welle
*
* @author Tuareg64ve
*
* Must be installed as a Video WebResource
* URLs:
* Live TV: http://www.dw.com/en/media-center/live-tv/s-100825
* Version:
* V1: 23 August 2015 - Initial Release
*
********************************************************************/
class DWLive extends WebResourceUrlExtractor {
final VALID_FEED_URL = '^http://www.dw.com/en/media-center/live-tv/s-100825.*$'
final METAFILE_GENERATOR = 'http://www.metafilegenerator.de/DWelle/tv-asia/flv/tv.smil'
// Catching the following line
//
final MFG_PATTERN_MEDIUM = ''
final MFG_PATTERN_HIGH = ''
final MFG_PATTERN_LOW = ''
final USER_AGENT = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'
final SWF_URL = 'http://www.dw.com/js/jwplayer/player.swf'
final DW_THUMB_URL = 'http://www.dw.com/image/0%2C%2C18452774_302%2C00.jpg'
final DEBUG = 1
String getExtractorName() {
return 'DWLive'
}
boolean extractorMatches(URL feedUrl) {
return feedUrl ==~ VALID_FEED_URL
}
public int getVersion() {
return 1;
}
@Override
WebResourceContainer extractItems(URL resourceUrl, int maxItemsToRetrieve) {
maxItemsToRetrieve = 1
List items = []
def rUrl = "rtmp://cp135358.live.edgefcs.net/live/"
WebResourceItem item = new WebResourceItem(title: 'DWLive', additionalInfo: ['resourceUrl':rUrl, 'thumbUrl':DW_THUMB_URL])
items.add(item)
def containerThumbnailUrl = items?.find { it -> it.additionalInfo['thumbUrl'] != null }?.additionalInfo['thumbUrl']
return new WebResourceContainer(items: items, thumbnailUrl: containerThumbnailUrl)
}
@Override
protected ContentURLContainer extractUrl(WebResourceItem wrItem, PreferredQuality requestedQuality) {
def keyDW
def matcher
log ("[DWLive] Entered extractUrl");
if ( DEBUG > 10 ) { println ("[DWLive] Entered extractUrl"); }
else if ( DEBUG > 0 ) { log ("[DWLive] Entered extractUrl"); }
def metaUrl = new URL(METAFILE_GENERATOR);
if ( DEBUG > 10 ) { println "[DWLive] Metafile Gen url: " + metaUrl; }
else if ( DEBUG > 0 ) { log ("[DWLive] Metafile Gen url: " + metaUrl); }
def metaResponse = openURL(metaUrl, USER_AGENT);
if ( DEBUG > 10 ) { println "[DWLive] Get web page: "+ metaResponse; }
else if ( DEBUG > 0 ) { log ("[DWLive] Get web page: "+ metaResponse); }
if ( DEBUG > 10 ) { println "[DWLive] requested quality: "+ requestedQuality; }
else if ( DEBUG > 0 ) { log ("[DWLive] requested quality: "+ requestedQuality); }
switch (requestedQuality){
case requestedQuality.HIGH:
matcher = metaResponse =~ MFG_PATTERN_HIGH;
break
case requestedQuality.MEDIUM:
matcher = metaResponse =~ MFG_PATTERN_MEDIUM;
break
case requestedQuality.LOW:
matcher = metaResponse =~ MFG_PATTERN_LOW;
break
}
matcher.each { matched, kDW ->
keyDW = kDW;
if ( DEBUG > 10) { println "[DWLive] Key found :" + keyDW; }
else if ( DEBUG > 0 ) { log("[DWLive] Key found :" + keyDW); }
}
def resourceUrl = "rtmp://cp135358.live.edgefcs.net/live/"
def cacheKey = "DW_" + keyDW
def playPath = keyDW
def swfUrl = SWF_URL
def swfVfy = 1
def contentUrl = resourceUrl + keyDW + " playpath=" + keyDW + " swfUrl=" + SWF_URL + " swfVfy=1"
if ( DEBUG > 10 ) { println "[DWLive] contentUrl: "+ contentUrl; }
else if ( DEBUG > 0 ) { log ("[DWLive] contentUrl: "+ contentUrl); }
return new ContentURLContainer(fileType: MediaFileType.VIDEO, contentUrl: contentUrl, thumbnailUrl: DW_THUMB_URL, expiresImmediately: true, cacheKey: cacheKey)
}
static void main(args) {
// this is just to test
DWLive extractor = new DWLive()
assert extractor.extractorMatches( new URL("http://www.dw.com/en/media-center/live-tv/s-100825") )
assert !extractor.extractorMatches( new URL("http://google.com/feeds/api/standardfeeds/top_rated?time=today") )
WebResourceContainer container = extractor.extractItems( new URL("http://www.dw.com/en/media-center/live-tv/s-100825"), 1)
println container
ContentURLContainer result = extractor.extractUrl(container.getItems()[1], PreferredQuality.MEDIUM)
println result
ContentURLContainer result2 = extractor.extractUrl(container.getItems()[1], PreferredQuality.HIGH)
println result2
}
}