Advertisement
Guest User

Untitled

a guest
Jan 21st, 2014
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.32 KB | None | 0 0
  1. /**
  2. * NHL Live streams
  3. * Add Web Resource: .m3u8 links containing "http://nlds" for your game
  4. * How to get vlc links reddit post: http://www.reddit.com/r/hockey/comments/1q58xv/how_to_get_vlc_links/
  5. * Try the text link: http://dnalloheoj.com/nhl/log.txt
  6. *
  7. * @author CowMix
  8. * @Edited by Kaphis
  9. * @Edited by Exist2Inspire02
  10. * - Removed the automatically scheduling and turned it into a user-agent decryption script for those that can find the links to the games.
  11. * - Fixed Regex
  12. * - Added in new USER_AGENT which will allow for streams to work on the PS3 once again.
  13. * @Edited by DarkSpoon
  14. * - Added in new USER_AGENT which will allow for streams to work on the PS3 once again.
  15. */
  16. import groovy.util.XmlParser
  17. import java.text.SimpleDateFormat
  18. import org.serviio.library.metadata.*
  19. import org.serviio.library.online.*
  20. import java.util.logging.Logger
  21. import java.util.regex.*
  22.  
  23. class NHLLive extends WebResourceUrlExtractor {
  24.  
  25. final TITLE = 'NHL Live'
  26. final NHL_LOGO = 'http://www.nhl.com/images/default/nhl_thumbnail.jpg'
  27. final USER_AGENT = 'Roku/DVP-5.0 (025.00E08043A)' /*'iTunes-AppleTV/4.1'*/
  28. final QUALITIES = ["4500", "3000", "1600", "1200", "800", "400"]
  29. final DEFAULT_QUALITY_HIGH = "4500"
  30. final DEFAULT_QUALITY_MEDIUM = "3000"
  31. final DEFAULT_QUALITY_LOW = "1600"
  32. final DATE_FORMAT = 'yyyy-MM-dd HH:mm:ss'
  33. final DATE_TIMEZONE = 'America/New_York'
  34. final DATE_DISPLAY_FORMAT = 'h:mma z'
  35.  
  36. String getExtractorName() {
  37. return TITLE
  38. }
  39.  
  40. int getVersion() {
  41. return 4
  42. }
  43.  
  44.  
  45. boolean extractorMatches(URL feedUrl) {
  46.  
  47. String re1="(http)"; // Word 1
  48. String re2="(:)"; // Any Single Character 1
  49. String re3="(\\/)"; // Any Single Character 2
  50. String re4="(\\/)"; // Any Single Character 3
  51. String re5="((?:[a-z][a-z]*[0-9]+[a-z0-9]*))"; // Alphanum 1
  52. String re6="(\\.)"; // Any Single Character 4
  53. String re7="(cdnak)"; // Word 2
  54. String re8="(\\.)"; // Any Single Character 5
  55. String re9="(neulion)"; // Word 3
  56. String re10="(\\.)"; // Any Single Character 6
  57. String re11="(com)"; // Word 4
  58. String re12="(\\/)"; // Any Single Character 7
  59. String re13="(nlds)"; // Word 5
  60. String re14="(\\/)"; // Any Single Character 8
  61. String re15="(nhl)"; // Word 6
  62. String re16="(\\/)"; // Any Single Character 9
  63. String re17="((?:[a-z][a-z]+))"; // Word 7
  64. String re18="(.)"; // Any Single Character 10
  65. String re19="((?:[a-z][a-z0-9_]*))"; // Variable Name 1
  66. String re20="(.)"; // Any Single Character 11
  67. String re21="((?:[a-z][a-z]+))"; // Word 8
  68. String re22="(.)"; // Any Single Character 12
  69. String re23="((?:[a-z][a-z0-9_]*))"; // Variable Name 2
  70. String re24="(.)"; // Any Single Character 13
  71. String re25="(m3u8)"; // Alphanum 2
  72.  
  73. 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);
  74. Matcher m = p.matcher(feedUrl.toString());
  75. if (m.find())
  76. {
  77.  
  78. return true
  79.  
  80. }
  81. else
  82. {
  83. return false
  84. }
  85. }
  86.  
  87.  
  88. Boolean URLExists(URL fileURL) {
  89. try {
  90. HttpURLConnection connection = (HttpURLConnection) fileURL.openConnection()
  91. connection.setRequestProperty("User-Agent", USER_AGENT)
  92. if (connection.getResponseCode() == 404) {
  93. return false
  94. }
  95. } catch (Exception e) {
  96. log(e.toString())
  97. e.printStackTrace()
  98. return false
  99. }
  100. return true
  101. }
  102.  
  103.  
  104. WebResourceContainer extractItems(URL resourceUrl, int maxItemsToRetrieve) {
  105. List < WebResourceItem > items = []
  106. String linkUrl = resourceUrl
  107. WebResourceItem item = new WebResourceItem(title: 'Live Stream', additionalInfo: ['linkUrl': linkUrl])
  108. items << item
  109. return new WebResourceContainer(title: TITLE, thumbnailUrl: NHL_LOGO, items: items)
  110. }
  111.  
  112.  
  113. ContentURLContainer extractUrl(WebResourceItem item, PreferredQuality requestedQuality) {
  114. String linkUrl = item.getAdditionalInfo()['linkUrl']
  115. String url = linkUrl
  116. String quality
  117. switch (requestedQuality) {
  118. case PreferredQuality.HIGH:
  119. quality = DEFAULT_QUALITY_HIGH
  120. break
  121. case PreferredQuality.MEDIUM:
  122. quality = DEFAULT_QUALITY_MEDIUM
  123. break
  124. case PreferredQuality.LOW:
  125. default:
  126. quality = DEFAULT_QUALITY_LOW
  127. }
  128. boolean start = false
  129. for (int i = 0; i < QUALITIES.size(); i++) {
  130. String q = QUALITIES[i]
  131. if (q == quality) {
  132. start = true
  133. }
  134. if (start) {
  135. String testUrl = linkUrl.replaceAll('ipad', q)
  136. if (URLExists(new URL(testUrl))) {
  137. url = testUrl
  138. start = false
  139. break
  140. }
  141. }
  142. }
  143.  
  144. String cacheKey = url.substring(url.lastIndexOf('/') + 1, url.length())
  145. ContentURLContainer urlContainer = new ContentURLContainer(fileType: MediaFileType.VIDEO, contentUrl: url, live: true, expiresImmediately: true, cacheKey: cacheKey, userAgent: USER_AGENT)
  146.  
  147.  
  148.  
  149.  
  150. return urlContainer
  151. }
  152.  
  153.  
  154.  
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement