import groovy.util.XmlParser
import groovy.json.JsonSlurper
import org.serviio.library.metadata.*
import org.serviio.library.online.*
import org.serviio.util.*
/********************************************************************
* zonytvcom.info plugin for Serviio
*
* @author X S Inattar
*
* URL to use as video webresource: http://icricket.tv
*
* Version:
* V1: August 12, 2012 - Initial Release
* V2: August 27, 2012 - Added support for http://icricket.tv
*
********************************************************************/
class ICricket extends WebResourceUrlExtractor {
final VALID_RESOURCE_URL = '^(?:http://)?(?:www\\.)?icricket.tv/'
final BASE_URL = 'http://icricket.tv'
final TITLE = 'iCricket'
final CHANNEL_LIST_EXTRACTOR = '
) (.*?) | '
final TOKEN_1 = "#ed%h*ibuntu*0#w@1"
final PAGE_URL = 'http://icricket.tv'
final SWF_URL = 'http://icricket.tv/player.swf'
String getExtractorName() {
return 'icricket.tv'
}
boolean extractorMatches(URL resourceURL) {
return resourceURL ==~ VALID_RESOURCE_URL
}
/**/
void write_to_log(
String text
) {
log(TITLE + ' - ' + text)
}
/**/
Boolean URLExists(URL fileURL){
if(((HttpURLConnection) fileURL.openConnection()).getResponseCode() == 404){
return false
}
return true
}
String process_for_URL(
String htmlText,
String rgxMatcher,
String baseURL
) {
def return_val = '-NOTFOUND-'
def matcher = htmlText =~ rgxMatcher
if (matcher.count > 0) {
return_val = '-URL-' + baseURL + matcher[0][1]
}
return return_val
}
String process_for_STREAMER_PLAYPATH(
String htmlText,
String rgxMatcher,
String pageUrl
) {
def return_val = '-NOTFOUND-'
def matcher = htmlText =~ rgxMatcher
if (matcher.count > 0) {
def stream = matcher[0][1]
def playpath = matcher[0][2]
return_val = '-STREAM-' + stream
return_val = return_val + ' playpath=' + playpath
return_val = return_val + ' token=' + TOKEN_1
return_val = return_val + ' pageUrl=' + pageUrl
return_val = return_val + ' swfUrl=' + SWF_URL
return_val = return_val + ' live=true'
}
return return_val
}
String process_for_PLAYPATH_STREAMER(
String htmlText,
String rgxMatcher,
String pageUrl,
String swfUrl
) {
def return_val = '-NOTFOUND-'
def matcher = htmlText =~ rgxMatcher
if (matcher.count > 0) {
def playpath = matcher[0][1]
def stream = matcher[0][2]
return_val = '-STREAM-' + stream
return_val = return_val + ' playpath=' + playpath
return_val = return_val + ' pageUrl=' + pageUrl
return_val = return_val + ' swfUrl=' + swfUrl
return_val = return_val + ' live=true'
}
return return_val
}
String processChannel(
String channel_url
)
{
def log_text = ''
def error = ''
if (!URLExists(new URL(channel_url))) {
error = '-DEADLINK-'
log_text = log_text + error
print error
write_to_log(log_text)
return error
}
def channel_src_text = new URL(channel_url).getText()
channel_src_text = channel_src_text.replaceAll('%3A',':')
channel_src_text = channel_src_text.replaceAll('%2F','/')
channel_src_text = channel_src_text.replaceAll('&','&')
channel_src_text = channel_src_text.replaceAll('"','"')
channel_src_text = channel_src_text.replaceAll('<','<')
channel_src_text = channel_src_text.replaceAll('>','>')
channel_src_text = channel_src_text.replaceAll('%2D','-')
def channel_stream_url_text = channel_src_text
def url_found = 0
def loop = 0
def base_url = ''
def current_url = channel_url //channel_src
def rtmp_url = ''
while (url_found == 0) {
def returned_url = '-NOTFOUND-'
if (returned_url == '-NOTFOUND-' ) {
returned_url = process_for_STREAMER_PLAYPATH(
channel_stream_url_text,
'flashvars="streamer=(.*?)&file=(.*?)&autostart',
PAGE_URL
)
}
if (returned_url == '-NOTFOUND-' ) {
returned_url = process_for_PLAYPATH_STREAMER(
channel_stream_url_text,
'(.*?).*?(.*?)',
PAGE_URL,
"http://icricket.tv/player.swf"
)
}
if (returned_url == '-NOTFOUND-') {
returned_url = process_for_URL(
channel_stream_url_text,
'',
'http://icricket.tv'
)
}
if (returned_url == '-NOTFOUND-') {
returned_url = process_for_URL(
channel_stream_url_text,
'')
}
else if (returned_url.contains("-STREAM-")) {
rtmp_url = returned_url
url_found = 1
}
}
write_to_log(log_text)
return rtmp_url
}
WebResourceContainer extractItems(URL resourceURL, int maxItemsToRetrieve) {
List items = []
if (URLExists(resourceURL) == false) {
write_to_log("Invalid Resource URL")
return null
}
def resource_text = resourceURL.getText()
def channel_list_matcher = resource_text =~ CHANNEL_LIST_EXTRACTOR
def channel_count = channel_list_matcher.count
//for (channel_number in 36..<40) {
for (channel_number in 0..