import org.serviio.library.online.WebResourceUrlExtractor
import org.serviio.library.online.WebResourceContainer
import org.serviio.library.online.ContentURLContainer
import org.serviio.library.online.WebResourceItem
import org.serviio.library.online.PreferredQuality
import org.serviio.library.metadata.MediaFileType
/**
* WebResource extractor Serviio plugin for TELEFE
* version 1.0
*
* @author Hernan Bazan
* @since JDK 1.6, Groovy 1.8.6
*/
class TELEFE extends WebResourceUrlExtractor{
////////////////////////////////////////////[Constants]////////////////////////////////////////////
final static VALID_WEB_RESOURCE_URL = '^(?:http?://)?(?:www\\.)?telefe.com.*'
final static DEFAULT_EPISODE_DOMAIN = "http://telefe.com.ar"
final static DEFAULT_VIDEO_DOMAIN = "http://repositoriovideo-streaming.educ.ar"
final static USER_AGENT = 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1'
final static NODEID_REGEX = /(?s)nodeId = "(.*?)"/
final static EPISODE_REGEX = /ImageURL\\":\\"(.[^\\]*)\\",\\"Title\\":\\"(.[^\\]*)\\",\\"Link\\":\\"(.[^\\]*)\\",\\"Content/
final static VIDEO_URL_REGEX = /file\s:'(.[^']*)'},\{file\s:'(.[^']*)/
/////////////////////////////////////////////[Methods]/////////////////////////////////////////////
@Override
protected WebResourceContainer extractItems(URL url, int i) {
def videoURLsSet = retrieveURLs(url);
return new WebResourceContainer(title: url.toString(), items: videoURLsSet)
}
List retrieveURLs(URL url) {
Set pages = new HashSet();
List items = []
String pageSource = openURL(url, USER_AGENT)
String nodeId = ((pageSource=~NODEID_REGEX))[0][1].toString().trim();
URL jsnUri = new URL("http://telefe.com/umbraco/surface/TelefeMicrositiosSurface/GetVerMas?categoryId=11&nodeId="+nodeId+"&page=1")
String jsn = openURL(jsnUri, USER_AGENT)
(jsn=~EPISODE_REGEX).each {
Map additionalInfo = new HashMap();
additionalInfo.put("thumbnailURL",it[1])
URL episodeUrl = new URL(it[3])
String episode = openURL(episodeUrl, USER_AGENT)
additionalInfo.put("videoURL",((episode=~VIDEO_URL_REGEX))[0][2].toString().trim());
items << new WebResourceItem(title: it[2], additionalInfo: additionalInfo)
}
return items;
}
@Override
protected ContentURLContainer extractUrl(WebResourceItem webResourceItem, PreferredQuality preferredQuality) {
log(String.format("[%s] Starting video URL extraction for %s",getExtractorName(), webResourceItem))
ContentURLContainer contentURLContainer = new ContentURLContainer();
try{
contentURLContainer.setContentUrl(webResourceItem.getAdditionalInfo().get("videoURL"))
contentURLContainer.setThumbnailUrl(webResourceItem.getAdditionalInfo().get("thumbnailURL"))
return contentURLContainer
}catch (IndexOutOfBoundsException e){
log.error(String.format("%s , Failed to create resource item for URL: %s",getExtractorName(), it), log.isDebugEnabled()? e:null)
}
return null
}
@Override
boolean extractorMatches(URL url) {
return url ==~ VALID_WEB_RESOURCE_URL
}
@Override
String getExtractorName() {
return getClass().getName()
}
static void main(args) {
//def TestUrl = new URL("http://telefe.com/avenida-brasil/capitulos-completos")
def TestUrl = new URL("http://telefe.com/peligro-sin-codificar/capitulos-completos/")
TELEFE extractor = new TELEFE()
WebResourceContainer container = extractor.extractItems(TestUrl, -1);
println "PluginName : " + extractor.getExtractorName();
println "TestMatch : " + extractor.extractorMatches(TestUrl);
container.getItems().each {
println "URL : " + extractor.extractUrl(it, PreferredQuality.HIGH)
}
}
}