Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * NHL Live streams
- * Add Web Resource: .m3u8 links containing "http://nlds" for your game
- * How to get vlc links reddit post: http://www.reddit.com/r/hockey/comments/1q58xv/how_to_get_vlc_links/
- * Try the text link: http://dnalloheoj.com/nhl/log.txt
- *
- * @author CowMix
- * @Edited by Kaphis
- * @Edited by Exist2Inspire02
- * - Removed the automatically scheduling and turned it into a user-agent decryption script for those that can find the links to the games.
- * - Fixed Regex
- * - Added in new USER_AGENT which will allow for streams to work on the PS3 once again.
- * @Edited by DarkSpoon
- * - Added in new USER_AGENT which will allow for streams to work on the PS3 once again.
- */
- import groovy.util.XmlParser
- import java.text.SimpleDateFormat
- import org.serviio.library.metadata.*
- import org.serviio.library.online.*
- import java.util.logging.Logger
- import java.util.regex.*
- class NHLLive extends WebResourceUrlExtractor {
- final TITLE = 'NHL Live'
- final NHL_LOGO = 'http://www.nhl.com/images/default/nhl_thumbnail.jpg'
- final USER_AGENT = 'Roku/DVP-5.0 (025.00E08043A)' /*'iTunes-AppleTV/4.1'*/
- final QUALITIES = ["4500", "3000", "1600", "1200", "800", "400"]
- final DEFAULT_QUALITY_HIGH = "4500"
- final DEFAULT_QUALITY_MEDIUM = "3000"
- final DEFAULT_QUALITY_LOW = "1600"
- final DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss'
- final DATE_TIMEZONE = 'America/New_York'
- final DATE_DISPLAY_FORMAT = 'h:mma z'
- String getExtractorName() {
- return TITLE
- }
- int getVersion() {
- return 4
- }
- boolean extractorMatches(URL feedUrl) {
- String re1="(http)"; // Word 1
- String re2="(:)"; // Any Single Character 1
- String re3="(\\/)"; // Any Single Character 2
- String re4="(\\/)"; // Any Single Character 3
- String re5="((?:[a-z][a-z]*[0-9]+[a-z0-9]*))"; // Alphanum 1
- String re6="(\\.)"; // Any Single Character 4
- String re7="(cdnak)"; // Word 2
- String re8="(\\.)"; // Any Single Character 5
- String re9="(neulion)"; // Word 3
- String re10="(\\.)"; // Any Single Character 6
- String re11="(com)"; // Word 4
- String re12="(\\/)"; // Any Single Character 7
- String re13="(nlds)"; // Word 5
- String re14="(\\/)"; // Any Single Character 8
- String re15="(nhl)"; // Word 6
- String re16="(\\/)"; // Any Single Character 9
- String re17="((?:[a-z][a-z]+))"; // Word 7
- String re18="(.)"; // Any Single Character 10
- String re19="((?:[a-z][a-z0-9_]*))"; // Variable Name 1
- String re20="(.)"; // Any Single Character 11
- String re21="((?:[a-z][a-z]+))"; // Word 8
- String re22="(.)"; // Any Single Character 12
- String re23="((?:[a-z][a-z0-9_]*))"; // Variable Name 2
- String re24="(.)"; // Any Single Character 13
- String re25="(m3u8)"; // Alphanum 2
- Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11+re12+re13+re14+re15+re16+re17+re18+re19+re20+re21+re22+re23+re24+re25,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
- Matcher m = p.matcher(feedUrl.toString());
- if (m.find())
- {
- return true
- }
- else
- {
- return false
- }
- }
- Boolean URLExists(URL fileURL) {
- try {
- HttpURLConnection connection = (HttpURLConnection) fileURL.openConnection()
- connection.setRequestProperty("User-Agent", USER_AGENT)
- if (connection.getResponseCode() == 404) {
- return false
- }
- } catch (Exception e) {
- log(e.toString())
- e.printStackTrace()
- return false
- }
- return true
- }
- WebResourceContainer extractItems(URL resourceUrl, int maxItemsToRetrieve) {
- List < WebResourceItem > items = []
- String linkUrl = resourceUrl
- WebResourceItem item = new WebResourceItem(title: 'Live Stream', additionalInfo: ['linkUrl': linkUrl])
- items << item
- return new WebResourceContainer(title: TITLE, thumbnailUrl: NHL_LOGO, items: items)
- }
- ContentURLContainer extractUrl(WebResourceItem item, PreferredQuality requestedQuality) {
- String linkUrl = item.getAdditionalInfo()['linkUrl']
- String url = linkUrl
- String quality
- switch (requestedQuality) {
- case PreferredQuality.HIGH:
- quality = DEFAULT_QUALITY_HIGH
- break
- case PreferredQuality.MEDIUM:
- quality = DEFAULT_QUALITY_MEDIUM
- break
- case PreferredQuality.LOW:
- default:
- quality = DEFAULT_QUALITY_LOW
- }
- boolean start = false
- for (int i = 0; i < QUALITIES.size(); i++) {
- String q = QUALITIES[i]
- if (q == quality) {
- start = true
- }
- if (start) {
- String testUrl = linkUrl.replaceAll('ipad', q)
- if (URLExists(new URL(testUrl))) {
- url = testUrl
- start = false
- break
- }
- }
- }
- String cacheKey = url.substring(url.lastIndexOf('/') + 1, url.length())
- ContentURLContainer urlContainer = new ContentURLContainer(fileType: MediaFileType.VIDEO, contentUrl: url, live: true, expiresImmediately: true, cacheKey: cacheKey, userAgent: USER_AGENT)
- return urlContainer
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement