
import 'dart:async';
import 'package:html/parser.dart';
import 'package:http/http.dart';
void main() {
BitsearchApi bitsearchApi = BitsearchApi();
bitsearchApi.scrapTorrentDetails(
'/torrents/key-skills-for-math-subtraction-practice-grade-1-t-5a628/60cfa5278d5bd55a19163ed3/');
}
class BitsearchApi {
//scrapTorrentDetails('/torrents/key-skills-for-math-subtraction-practice-grade-1-t-5a628/60cfa5278d5bd55a19163ed3/');
//scrapSearchTorrent('math');
var _document;
Future loadFullURL(String page) async {
var client = Client();
try {
var _response = await client.get(Uri.parse(page));
_document = parse(_response.body);
} catch (e) {
print(e.toString());
}
return true;
}
Future scrapTorrentDetails(String q) async {
List simTorrData = [];
await loadFullURL('https://bitsearch.to$q');
var title = _document.getElementsByClassName('title')[0].text;
var type = _document.getElementsByClassName('primary-bg')[0].text;
var desc1 = _document.getElementsByClassName('view-box')[5].text;
var files = _document.getElementsByClassName('file-name');
var catHtml =
parse(_document.getElementsByClassName('stat-table')[0].outerHtml);
var dllinks =
parse(_document.getElementsByClassName('dl-links')[0].outerHtml);
var dawnloads = catHtml.getElementsByTagName('tr')[3].text.split('\n')[2];
var size = catHtml.getElementsByTagName('tr')[2].text.split('\n')[2];
var seedrs = catHtml.getElementsByTagName('tr')[0].text.split('\n')[2];
var leechers = catHtml.getElementsByTagName('tr')[1].text.split('\n')[2];
var uploaddate = catHtml.getElementsByTagName('tr')[4].text.split('\n')[2];
var magnet = dllinks.getElementsByTagName('a')[1].attributes['href'];
var torrent = dllinks.getElementsByTagName('a')[0].attributes['href'];
List fileslist = [];
for (var i = 0; i < files.length; i++) {
fileslist.add(files[i].text);
}
var similarTorrTables = _document.getElementsByClassName('search-result');
for (int i = 0; i < similarTorrTables.length; i++) {
var htmlParse = parse(similarTorrTables[i].outerHtml);
var links = htmlParse.getElementsByTagName('a').toList();
var stats = htmlParse
.getElementsByClassName('stats')[0]
.text
.split('\n')
.toList();
simTorrData.add({
'title': htmlParse.getElementsByClassName('title')[0].text,
'cat': htmlParse.getElementsByClassName('link-1')[0].text,
'size': stats[3],
'seed': stats[1],
'leech': stats[2],
'link': links[0].attributes['href'],
});
}
var finalOut = {
"title": title,
"type": type,
"cat": {
'dawnloads': dawnloads.trim(),
'size': size.trim(),
'seedrs': seedrs.trim(),
'leechers': leechers.trim(),
'uploaddate': uploaddate.trim()
},
"torrent": torrent,
"magnet": magnet,
"description": desc1,
"files": fileslist,
"smiller": simTorrData
};
print(finalOut);
return finalOut;
}
Future scrapSearchTorrent(String q,
{String category = '',
String subcat = '',
String sort = '',
String order = ''}) async {
List torrData = [];
await loadFullURL(
'https://bitsearch.to/search?q=$q&category=$category&subcat=$subcat&sort=$sort&order=$order');
var tables = _document.getElementsByClassName('search-result');
for (int i = 0; i < tables.length; i++) {
var text = tables[i].text.toString().split('\n');
var htmlParse =
parse(tables[i].outerHtml).getElementsByTagName('a').toList();
torrData.add({
'title': text[2],
'cat': text[4],
'downloads': text[6],
'size': text[7],
'seed': text[9],
'leech': text[12],
'date': text[14],
'link': htmlParse[0].attributes['href'],
'torrent': htmlParse[2].attributes['href'],
'magnet': htmlParse[3].attributes['href']
});
}
print(torrData);
return torrData;
}
}