import java.text.SimpleDateFormat; import org.serviio.library.metadata.* import org.serviio.library.online.* import org.apache.commons.lang.* import groovy.json.* /** * Web resource plugin for Serviio Media Server * Targeted at MTG sites tv3play, tv6play, tv8play, tv10play in different top domains * * Add individual shows as Web Resource feeds, e.g.: * http://www.tv3play.se/program/blacklist * * ############################################## * Credits * ############################################## * * @author Otto Dandenell */ class Tv3_6_8_10_Play extends org.serviio.library.online.WebResourceUrlExtractor { final boolean debug = false; Tv3_6_8_10_PlayCommon mtgPlayCommon = new Tv3_6_8_10_PlayCommon(debug) final VALID_RESOURCE_URL = '^http(?:s)?://www\\.(?:tv(?:3|6|8|10)|viasat4)play\\.[a-z.]*?[a-z]{2,}/.*$' final RSS_RESOURCE_URL = '^http(?:s)?://www\\.tv(?:3|6|8|10)play\\.[a-z.]*?[a-z]{2,}/rss/.*$' final int VERSION = 2; private static SimpleDateFormat dfHourMinute = new SimpleDateFormat( "HH:mm" ) static main(args) { def TestUrlSe = new URL("http://www.tv3play.se/program/blacklist") def TestUrlEe = new URL("http://www.tv3play.ee/sisu/suure-paugu-teooria") def TestUrlLt = new URL("http://www.tv3play.lt/programos/adrenalinas") def TestUrlNo = new URL("http://www.viasat4play.no/programmer/seinfeld") def TestUrlDk = new URL("http://www.tv3play.dk/programmer/aktionen") def TestUrlRtmp = new URL("http://www.tv3play.se/program/svenska-hollywoodfruar/229271") def TestUrlRss = new URL("http://www.tv8play.se/rss/recent") def TestUrlRss2 = new URL("http://legacy.tv3play.se/rss/recent") def TestUrlExternal = new URL("http://google.com/feeds/api/standardfeeds/top_rated?time=today") Tv3_6_8_10_Play extractor = new Tv3_6_8_10_Play() assert extractor.extractorMatches( TestUrlSe ) assert extractor.extractorMatches( TestUrlEe ) assert extractor.extractorMatches( TestUrlLt ) assert extractor.extractorMatches( TestUrlNo ) assert extractor.extractorMatches( TestUrlDk ) assert extractor.extractorMatches( TestUrlRtmp ) assert !extractor.extractorMatches( TestUrlRss ) assert !extractor.extractorMatches( TestUrlRss2 ) assert !extractor.extractorMatches( TestUrlExternal ) println "PluginName : " + extractor.getExtractorName(); println "Plugin version : " + extractor.getVersion(); WebResourceContainer containerHttp = extractor.extractItems(TestUrlSe, -1); println 'containerHttp.getItems().size(): ' + containerHttp.getItems().size() ContentURLContainer result1Http = null if (containerHttp.getItems().size() > 0) { println ' containerHttp.getItems()[0].releaseDate: ' + containerHttp.getItems()[0].releaseDate result1Http = extractor.extractUrl(containerHttp.getItems()[0], PreferredQuality.HIGH) println ' result1Http: ' + result1Http assert (result1Http != null) for (int index = 0; index < containerHttp.getItems().size(); index++) { println 'http item #' + index + ': ' + containerHttp.getItems()[index].title + ', episodeUrl: ' + containerHttp.getItems()[index].getAdditionalInfo()['episodeUrl'] } } containerHttp = extractor.extractItems(TestUrlEe, 4); WebResourceContainer containerNo = extractor.extractItems(TestUrlNo, -1); println 'containerNo.getItems().size(): ' + containerNo.getItems().size() ContentURLContainer resultNo = null if (containerNo.getItems().size() > 0) { println ' containerNo.getItems()[0].releaseDate: ' + containerNo.getItems()[0].releaseDate resultNo = extractor.extractUrl(containerNo.getItems()[0], PreferredQuality.MEDIUM) // Geo restrictions will make this fail in Sweden // println 'resultNo.contentUrl: ' + resultNo.contentUrl } WebResourceContainer containerRtmp = extractor.extractItems(TestUrlRtmp, -1); println 'containerRtmp.getItems().size(): ' + containerRtmp.getItems().size() ContentURLContainer resultRtmp = null if (containerRtmp.getItems().size() > 0) { println ' containerRtmp.getItems()[0].releaseDate: ' + containerRtmp.getItems()[0].releaseDate resultRtmp = extractor.extractUrl(containerRtmp.getItems()[0], PreferredQuality.MEDIUM) println ' resultRtmp: ' + resultRtmp } if (containerRtmp.getItems().size() > 1) { println ' containerRtmp.getItems()[1].releaseDate: ' + containerRtmp.getItems()[1].releaseDate resultRtmp = extractor.extractUrl(containerRtmp.getItems()[1], PreferredQuality.LOW) println ' resultRtmp: ' + resultRtmp } } String getExtractorName() { return getClass().getName() } int getVersion() { return VERSION } boolean extractorMatches(URL resourceUrl) { return (resourceUrl ==~ VALID_RESOURCE_URL) && !(resourceUrl ==~ RSS_RESOURCE_URL) } WebResourceContainer extractItems(URL resourceUrl, int maxItemsToRetrieve) { log( getExtractorName() + ': extracting items for url: ' + resourceUrl + ' , maxItemsToRetrieve: ' + maxItemsToRetrieve) def resourceHtml def connection = resourceUrl.openConnection() if(connection.responseCode == 200){ resourceHtml = connection.content.text } else{ return null } // find out the title def title //