ETTVBridge.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. class ETTVBridge extends BridgeAbstract {
  3. const MAINTAINER = 'GregThib';
  4. const NAME = 'ETTV';
  5. const URI = 'https://www.ettv.tv/';
  6. const DESCRIPTION = 'Returns list of 20 latest torrents for a specific search.';
  7. const CACHE_TIMEOUT = 14400; // 4 hours
  8. const PARAMETERS = array( array(
  9. 'query' => array(
  10. 'name' => 'Keywords',
  11. 'required' => true
  12. ),
  13. 'cat' => array(
  14. 'type' => 'list',
  15. 'name' => 'Category',
  16. 'values' => array(
  17. '(ALL TYPES)' => '0',
  18. 'Anime: Movies' => '73',
  19. 'Anime: Dubbed/Subbed' => '74',
  20. 'Anime: Others' => '75',
  21. 'Books: Ebooks' => '53',
  22. 'Books: Magazines' => '54',
  23. 'Books: Comics' => '55',
  24. 'Books: Audio' => '56',
  25. 'Books: Others' => '68',
  26. 'Games: Windows' => '57',
  27. 'Games: Android' => '58',
  28. 'Games: Others' => '71',
  29. 'Movies: HD 1080p' => '1',
  30. 'Movies: HD 720p' => '2',
  31. 'Movies: UltraHD/4K' => '3',
  32. 'Movies: XviD' => '42',
  33. 'Movies: X264/H264' => '47',
  34. 'Movies: 3D' => '49',
  35. 'Movies: Dubs/Dual Audio' => '51',
  36. 'Movies: CAM/TS' => '65',
  37. 'Movies: BluRay Disc/Remux' => '66',
  38. 'Movies: DVDR' => '67',
  39. 'Movies: HEVC/x265' => '76',
  40. 'Music: MP3' => '59',
  41. 'Music: FLAC' => '60',
  42. 'Music: Music Videos' => '61',
  43. 'Music: Others' => '69',
  44. 'Software: Windows' => '62',
  45. 'Software: Android' => '63',
  46. 'Software: Mac' => '64',
  47. 'Software: Others' => '70',
  48. 'TV: HD/X264/H264' => '41',
  49. 'TV: SD/X264/H264' => '5',
  50. 'TV: TV Packs' => '7',
  51. 'TV: SD/XVID' => '50',
  52. 'TV: Sport' => '72',
  53. 'TV: HEVC/x265' => '77',
  54. 'Unsorted: Unsorted' => '78'
  55. ),
  56. 'defaultValue' => '(ALL TYPES)'
  57. ),
  58. 'status' => array(
  59. 'type' => 'list',
  60. 'name' => 'Status',
  61. 'values' => array(
  62. 'Active Transfers' => '0',
  63. 'Included Dead' => '1',
  64. 'Only Dead' => '2'
  65. ),
  66. 'defaultValue' => 'Included Dead'
  67. ),
  68. 'lang' => array(
  69. 'type' => 'list',
  70. 'name' => 'Lang',
  71. 'values' => array(
  72. '(ALL)' => '0',
  73. 'Arabic' => '17',
  74. 'Chinese ' => '10',
  75. 'Danish' => '13',
  76. 'Dutch' => '11',
  77. 'English' => '1',
  78. 'Finnish' => '18',
  79. 'French' => '2',
  80. 'German' => '3',
  81. 'Greek' => '15',
  82. 'Hindi' => '8',
  83. 'Italian' => '4',
  84. 'Japanese' => '5',
  85. 'Korean' => '9',
  86. 'Polish' => '14',
  87. 'Russian' => '7',
  88. 'Spanish' => '6',
  89. 'Turkish' => '16'
  90. ),
  91. 'defaultValue' => '(ALL)'
  92. )
  93. ));
  94. public function collectData(){
  95. // No control on inputs, because all have defaultValue set
  96. $query_str = 'torrents-search.php';
  97. $query_str .= '?search=' . urlencode('+'.str_replace(' ', ' +', $this->getInput('query')));
  98. $query_str .= '&cat=' . $this->getInput('cat');
  99. $query_str .= 'incldead&=' . $this->getInput('status');
  100. $query_str .= '&lang=' . $this->getInput('lang');
  101. $query_str .= '&sort=id&order=desc';
  102. // Get results page
  103. $html = getSimpleHTMLDOM(self::URI . $query_str)
  104. or returnServerError('Could not request ' . $this->getName());
  105. // Loop on each entry
  106. foreach($html->find('table.table tr') as $element) {
  107. if($element->parent->tag == 'thead') continue;
  108. $entry = $element->find('td', 1)->find('a', 0);
  109. // retrieve result page to get more details
  110. $link = rtrim(self::URI, '/') . $entry->href;
  111. $page = getSimpleHTMLDOM($link)
  112. or returnServerError('Could not request page ' . $link);
  113. // get details & download links
  114. $details = $page->find('fieldset.download table', 0); // WHAT?? It should be the second one…
  115. $dllinks = $page->find('div#downloadbox table', 0);
  116. // fill item
  117. $item = array();
  118. $item['author'] = $details->children(6)->children(1)->plaintext;
  119. $item['title'] = $entry->title;
  120. $item['uri'] = $dllinks->children(0)->children(0)->children(0)->href;
  121. $item['timestamp'] = strtotime($details->children(7)->children(1)->plaintext);
  122. $item['content'] = '';
  123. $item['content'] .= '<br/><b>Name: </b>' . $details->children(0)->children(1)->innertext;
  124. $item['content'] .= '<br/><b>Lang: </b>' . $details->children(3)->children(1)->innertext;
  125. $item['content'] .= '<br/><b>Size: </b>' . $details->children(4)->children(1)->innertext;
  126. $item['content'] .= '<br/><b>Hash: </b>' . $details->children(5)->children(1)->innertext;
  127. foreach($dllinks->children(0)->children(1)->find('a') as $dl) {
  128. $item['content'] .= '<br/>' . $dl->outertext;
  129. }
  130. $item['content'] .= '<br/><br/>' . $details->children(1)->children(0)->innertext;
  131. $this->items[] = $item;
  132. }
  133. }
  134. }