Node module designed to expose a "pseudo" api from FrenchtorrentDB, a French private tracker. For the moment, only torrent search is supported.
npm install frenchtorrentdb-api
var FTDBClient = require('frenchtorrentdb-api');
var FTDB = new FTDBClient(); //instanciate a new Client.
Before performing any action, you must define credential to log in to FTDB tracker with.
You can assign credential programmatically.
FTDB.setCredential(credentials.username, credentials.password);
Or load credential from a file.
FTDB.loadCredential('./credentials.json');
Credential file is simply a .json
file which contains login information this way:
{
"username" : "mycoolusername",
"password" : "this_is_my_passw0rd"
}
Once, credential is defined, you can perform login process by calling login()
which return a Promise
.
FTDB.login()
.then(function(res)
{
if(res)
{
console.log("Ok, i'm logged in, what's next?")
}
else
new Error('Login failed'));
})
.catch(console.error);
You can also chain calls:
FTDB
.loadCredential('./credential.json')
.login()
.then(function(res)
{
... some code here
})
.catch(console.error);
For now, search action is the only supported. You can search against any form from:
http://www.frenchtorrentdb.com/?section=TORRENTS.
Search is based on definition json
files, generated by a script (scripts/installSearch
) and located into search
folder.
You can easily create your own for a custom search with fixed values by editing/copying an existing one.
To perform a search, just call .search.<searchformname>(<form values>)
where searchformname
is basically the basename of our definition file from search
folder.
exemple:
I want to search for an episode of my favorite show
FTDB.search.serie({ name : 'EVERYBODY.HATES.CHRIS.iNTEGRALE.FRENCH.DVDRIP.XVID-NoTaG' })
.then(function(result)
{
... result is and instance of SearchResult;
})
.catch(next);
Represents a result set associated to a search action
The constants below are defined by the module.
Constant | Description |
---|---|
SearchResult.FETCH_JSON | Specifies that the fetch method shall return each row as an object with property names that correspond to column names returned in the result set. |
SearchResult.FETCH_ARRAY | Specifies that the fetch method shall return each row as an array indexed by column number as returned in the corresponding result set, starting at column 0. |
SearchResult.FETCH_XML | Specifies that the fetch method shall return each row as a xml fragment with sub element tagname that correspond to column names returned in the result set. |
These methods are invoked on a SearchResult
instance by calling SearchResult.methodName
Fetches the next row from a result set.
Parameters | fetchStyle | Controls how row will be returned to the call. This value must be one of the SearchResult.FETCH_* constants. (default: SearchResult.FETCH_JSON) |
---|---|---|
fetchOptions | Extra parameter passed to row fetcher. (ie: tagname for XML fetch, etc) | |
Return values | The return value of this method depends on the fetch type. In all cases, *null* is returned on faillure. |
Examples
Example#1 : Fetching rows using different fetch style
FTDB.search.series({ name : 'walking' })
.then(function(result)
{
console.log('SearchResult.FETCH_JSON: return next row as anonymous object with column names as properties');
console.log(result.fetch(SearchResult.FETCH_JSON));
console.log('SearchResult.FETCH_XML: return next row as XML fragment named "torrent" with column names as sub element ');
console.log(result.fetch(SearchResult.FETCH_XML, 'torrent'));
console.log('SearchResult.FETCH_ARRAY: return next row as an array indexed by number');
console.log(result.fetch(SearchResult.FETCH_ARRAY));
next();
})
.catch(next);
the above example will ouput:
SearchResult.FETCH_JSON: return next row as anonymous object with column names as properties
{ categories_parent_cat: '',
categories_parent_cat_link: '?section=TORRENTS&module=&parent_cat_id=13',
torrents_category: 'XviD',
torrents_category_link: '?section=TORRENTS&module=&parent_cat_id=13&cid=101',
torrents_name: 'The.Walking.Dead.S05E13.FASTSUB.VOSTFR.HDTV.XviD-ADDiCTiON',
torrents_name_link: '/?section=INFOS&hash=000C5AA...#FTD_MENU',
torrents_size: '349.04 MB',
torrents_seeders: '2862',
torrents_leechers: '26',
imdb_id_imdb_id: '',
torrents_calendar: '',
torrents_download: '',
torrents_download_link: '/?section=DOWNLOAD&id=652..&uid=80...&get=1&hash=63e4a65...' }
SearchResult.FETCH_XML: return next row as XML fragment named "torrent" with column names as sub element
<torrent>
<categories_parent_cat></categories_parent_cat>
<categories_parent_cat_link>?section=TORRENTS&module=&parent_cat_id=13</categories_parent_cat_link>
<torrents_category>XviD</torrents_category>
<torrents_category_link>?section=TORRENTS&module=&parent_cat_id=13&cid=101</torrents_category_link>
<torrents_name>The.Walking.Dead.S05E15.FASTSUB.VOSTFR.HDTV.XviD-ADDiCTiON</torrents_name>
<torrents_name_link>/?section=INFOS&hash=000C5AA...#FTD_MENU</torrents_name_link>
<torrents_size>349.12 MB</torrents_size>
<torrents_seeders>2274</torrents_seeders>
<torrents_leechers>10</torrents_leechers>
<imdb_id_imdb_id></imdb_id_imdb_id>
<torrents_calendar></torrents_calendar>
<torrents_download></torrents_download>
<torrents_download_link>/?section=DOWNLOAD&id=6544..&uid=809..&get=1&hash=e78bd7b1...</torrents_download_link>
</torrent>
SearchResult.FETCH_ARRAY: return next row as an array indexed by number
[ '',
'?section=TORRENTS&module=&parent_cat_id=13',
'XviD',
'?section=TORRENTS&module=&parent_cat_id=13&cid=101',
'The.Walking.Dead.S05E05.FASTSUB.VOSTFR.HDTV.XviD-ADDiCTiON',
'/?section=INFOS&hash=000C5AA5...#FTD_MENU',
'349.14 MB',
'2246',
'4',
'',
'',
'',
'/?section=DOWNLOAD&id=632..&uid=80..&get=1&hash=6f382....' ]
Example#2 : Fetching result set as xml
FTDB.search.series({ name : 'game of', season : '01', episode : '01' })
.then(function(result)
{
var row, xml=[
"<?xml version='1.0' encoding='ISO-8859-1' ?>",
'<torrents>'
];
while(row=result.fetch(SearchResult.FETCH_XML, 'item'))
xml.push('\t'+row.replace(/&/g, '&'));
xml.push('</torrents>');
console.log(xml.join('\n'));
next();
})
.catch(next);
the above example will ouput:
<?xml version='1.0' encoding='ISO-8859-1' ?>
<torrents>
<item>
<categories_parent_cat></categories_parent_cat>
<categories_parent_cat_link>?section=TORRENTS&module=&parent_cat_id=12</categories_parent_cat_link>
<torrents_category></torrents_category>
<torrents_category_link>?section=TORRENTS&module=&parent_cat_id=12&cid=95</torrents_category_link>
<torrents_name>Game.Of.Thrones.S01E01.FRENCH.BDRip.XviD-JMT</torrents_name>
<torrents_name_link>/?section=INFOS&hash=000C5AA500..#FTD_MENU</torrents_name_link>
<torrents_size>550.12 MB</torrents_size>
<torrents_seeders>55</torrents_seeders>
<torrents_leechers>0</torrents_leechers>
<imdb_id_imdb_id></imdb_id_imdb_id>
<torrents_calendar></torrents_calendar>
<torrents_download></torrents_download>
<torrents_download_link>/?section=DOWNLOAD&id=3761..&uid=8096..&get=1&hash=200c0f93e5..</torrents_download_link>
</item>
<item>
<categories_parent_cat></categories_parent_cat>
<categories_parent_cat_link>?section=TORRENTS&module=&parent_cat_id=36</categories_parent_cat_link>
<torrents_category></torrents_category>
<torrents_category_link>?section=TORRENTS&module=&parent_cat_id=36&cid=190</torrents_category_link>
<torrents_name>Game.Of.Thrones.S01E01.FRENCH.720P.BluRay.x264-JMT</torrents_name>
<torrents_name_link>/?section=INFOS&hash=000C5AA500..#FTD_MENU</torrents_name_link>
<torrents_size>2.19 GB</torrents_size>
<torrents_seeders>4</torrents_seeders>
<torrents_leechers>0</torrents_leechers>
<imdb_id_imdb_id></imdb_id_imdb_id>
<torrents_calendar></torrents_calendar>
<torrents_download></torrents_download>
<torrents_download_link>/?section=DOWNLOAD&id=3761..&uid=8096..&get=1&hash=c1a99a4589..</torrents_download_link>
</item>
<item>
<categories_parent_cat></categories_parent_cat>
<categories_parent_cat_link>?section=TORRENTS&module=&parent_cat_id=36</categories_parent_cat_link>
<torrents_category></torrents_category>
<torrents_category_link>?section=TORRENTS&module=&parent_cat_id=36&cid=190</torrents_category_link>
<torrents_name>Game.Of.Thrones.S01E01.FRENCH.720P.HDTV.x264-BAWLS</torrents_name>
<torrents_name_link>/?section=INFOS&hash=000C5AA500..#FTD_MENU</torrents_name_link>
<torrents_size>1.62 GB</torrents_size>
<torrents_seeders>6</torrents_seeders>
<torrents_leechers>0</torrents_leechers>
<imdb_id_imdb_id></imdb_id_imdb_id>
<torrents_calendar></torrents_calendar>
<torrents_download></torrents_download>
<torrents_download_link>/?section=DOWNLOAD&id=3535..&uid=8096..&get=1&hash=50e4c6e7ba..</torrents_download_link>
</item>
...
...
</torrents>
Returns an array containing all of the result set rows
Parameters | fetchStyle | Controls the contents of the returned array as documented in SearchResult#fetch() |
---|---|---|
fetchOptions | Extra parameter passed to row fetcher. (ie: tagname for XML fetch, etc) | |
Return values | The returned array contains all rows in the result set. The array represents each row fetched as specified by fetchStyle parameter. An empty array is returned if there are zero results to fetch. |
Examples
Fetch all rows as object/json
FTDB.search.series({ name : 'game of', season : '01', episode : '01' })
.then(function(result)
{
console.log(result.fetchAll(SearchResult.FETCH_JSON));
next();
})
.catch(next);
the above example will ouput:
[ { categories_parent_cat: '',
categories_parent_cat_link: '?section=TORRENTS&module=&parent_cat_id=12',
torrents_category: '',
torrents_category_link: '?section=TORRENTS&module=&parent_cat_id=12&cid=95',
torrents_name: 'Game.Of.Thrones.S01E01.FRENCH.BDRip.XviD-JMT',
torrents_name_link: '/?section=INFOS&hash=000C5AA500..#FTD_MENU',
torrents_size: '550.12 MB',
torrents_seeders: '55',
torrents_leechers: '0',
imdb_id_imdb_id: '',
torrents_calendar: '',
torrents_download: '',
torrents_download_link: '/?section=DOWNLOAD&id=3761..&uid=8096..&get=1&hash=200c0f93e5..' },
{ categories_parent_cat: '',
categories_parent_cat_link: '?section=TORRENTS&module=&parent_cat_id=36',
torrents_category: '',
torrents_category_link: '?section=TORRENTS&module=&parent_cat_id=36&cid=190',
torrents_name: 'Game.Of.Thrones.S01E01.FRENCH.720P.BluRay.x264-JMT',
torrents_name_link: '/?section=INFOS&hash=000C5AA500..#FTD_MENU',
torrents_size: '2.19 GB',
torrents_seeders: '4',
torrents_leechers: '0',
imdb_id_imdb_id: '',
torrents_calendar: '',
torrents_download: '',
torrents_download_link: '/?section=DOWNLOAD&id=3761..&uid=8096..&get=1&hash=c1a99a4589..' },
{ categories_parent_cat: '',
categories_parent_cat_link: '?section=TORRENTS&module=&parent_cat_id=36',
torrents_category: '',
torrents_category_link: '?section=TORRENTS&module=&parent_cat_id=36&cid=190',
torrents_name: 'Game.Of.Thrones.S01E01.FRENCH.720P.HDTV.x264-BAWLS',
torrents_name_link: '/?section=INFOS&hash=000C5AA500..#FTD_MENU',
torrents_size: '1.62 GB',
torrents_seeders: '6',
torrents_leechers: '0',
imdb_id_imdb_id: '',
torrents_calendar: '',
torrents_download: '',
torrents_download_link: '/?section=DOWNLOAD&id=3535..&uid=8096..&get=1&hash=50e4c6e7ba..' },
...
]
Returns the number of rows returned by search action