import groovy.json.JsonSlurper import org.serviio.library.metadata.* import org.serviio.library.online.* import org.serviio.util.* /******************************************************************** * einthusan plugin for Serviio * * @author * * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=tamil * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=telugu * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=hindi * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=malayalam * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=hindi&organize=Year&filtered=2013&org_type=Year * URL to use as video webresource: http://www.einthusan.com/movies/index.php?lang=tamil&organize=Year&filtered=2013&org_type=Year * * Version: * V1.2: - May 13, 2013 * ********************************************************************/ class einthusan extends WebResourceUrlExtractor { final VALID_RESOURCE_URL = '(.*?)www.einthusan.com(.*?)movies(.*?)(index|watch).php(.*?)' final TITLE = 'EINTHUSAN.COM' final BASE_URL = '' final MOVIE_PAGE_EXTRACTOR = '
0) { return true } else { return false } } /**/ void write_to_log( String text ) { log(TITLE + ' - ' + text) } /**/ public int getVersion() { return 1.2 } Boolean URLExists(URL fileURL){ if(((HttpURLConnection) fileURL.openConnection()).getResponseCode() == 404){ return false } return true } WebResourceContainer extractItems(URL resourceURL, int maxItemsToRetrieve) { List items = [] log(String.format("extractItems - %s", resourceURL)) if (URLExists(resourceURL) == false) { write_to_log("Invalid Resource URL") return null } if (resourceURL.toString().find('&') != '&') { resourceURL = (resourceURL.toString() + "&organize=Activity&filtered=RecentlyPosted&org_type=Activity").toURL() } def LINK_PAGE_EXTRACTOR = resourceURL.toString()[resourceURL.toString().indexOf('?') + 1..resourceURL.toString().length() - 1] + '&page=(.*?)"' def resource_text = openURL(resourceURL, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.1" ) resource_text = resource_text.replaceAll("\n","") resource_text = resource_text.replaceAll("\r","") def page_count_var = resource_text =~ LINK_PAGE_EXTRACTOR def page_count = page_count_var.count log(String.format("extractItems page_count - %d", page_count)) log(String.format("extractItems page_count_var - %d", page_count_var.count)) if (page_count > 5) { page_count = 5 } for (page_in in 1..page_count) { def resourceURL1 = (resourceURL.toString() + "&page="+ page_in).toURL() log(String.format("extractItems resourceURL1 - %s", resourceURL1.toString())) resource_text = openURL(resourceURL1, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.1" ) resource_text = resource_text.replaceAll("\n","") resource_text = resource_text.replaceAll("\r","") def movie_count_var = resource_text =~ MOVIE_PAGE_EXTRACTOR def movie_count = movie_count_var.count for (movie_in in 1..movie_count) { def resourceURL2 = ("http://www.einthusan.com" + movie_count_var[movie_in - 1][1].toString() ).toURL() log(String.format("extractItems resourceURL2 - %s", resourceURL2.toString())) resource_text = openURL(resourceURL2, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.1" ) resource_text = resource_text.replaceAll("\n","") resource_text = resource_text.replaceAll("\r","") def channel_link_matcher = resource_text =~ CHANNEL_LINK_EXTRACTOR def channel_title_matcher = resource_text =~ CHANNEL_TITLE_EXTRACTOR def thumb_link_matcher = resource_text =~ THUMB_LINK_EXTRACTOR def channel_count = channel_link_matcher.count def channel_url = channel_link_matcher[0][1] def channel_title = channel_title_matcher[0][1].substring(0,channel_title_matcher[0][1].lastIndexOf(" ")) def channel_image = "http://www.einthusan.com" + thumb_link_matcher[0][2].substring(2) def channel_cache_key = channel_title items << new WebResourceItem(title: channel_title, additionalInfo: [channelURL: channel_url, thumbnailURL: channel_image, cacheKey: TITLE + '_' + channel_cache_key ]) } } log(String.format("extractItems b4 return items.size()=[%d]\n", items.size())) return new WebResourceContainer(title: TITLE, items: items) } protected ContentURLContainer extractUrl(WebResourceItem webResourceItem, PreferredQuality preferredQuality) { log(String.format("extractUrl ")) if(log.isDebugEnabled()){ log(String.format("Staring video URL extraction for %s",webResourceItem.getAdditionalInfo().get("videoPageURL"))) } try{ return new ContentURLContainer(contentUrl: webResourceItem.getAdditionalInfo().get("channelURL"), thumbnailUrl: webResourceItem.getAdditionalInfo().get("thumbnailURL"), expiresImmediately: false, cacheKey : webResourceItem.getAdditionalInfo().get("cacheKey"), live: false ) }catch (IndexOutOfBoundsException e){ log.error(String.format("%s , Filed to create resource item for URL: %s",getExtractorName(), webResourceItem.getAdditionalInfo().get("videoPageURL")), log.isDebugEnabled()? e:null) } return null } static void main(args) { def extractor = new einthusan() //WebResourceContainer container = extractor.extractItems( new URL("http://www.einthusan.com/movies/index.php?lang=tamil"), 5) WebResourceContainer container = extractor.extractItems( new URL("http://www.einthusan.com/movies/index.php?lang=telugu&organize=Alphabetical&filtered=D&org_type=Alphabetical"), 5) /**/ container.getItems().each { ContentURLContainer result = extractor.extractUrl(it, PreferredQuality.HIGH) println result } /**/ } }