feat(provider): add ttsave provider

This commit is contained in:
hansputera
2021-11-08 14:58:17 +07:00
parent 06d5264740
commit 31ff87de96
6 changed files with 73 additions and 2 deletions

View File

@@ -1,15 +1,17 @@
import type {BaseProvider} from './baseProvider';
import {MusicalyDown} from './musicalyDown';
import {MusicalyDown} from './musicalyDownProvider';
import {SnaptikProvider} from './snaptikProvider';
import {TikmateProvider} from './tikmateProvider';
import {TTDownloader} from './ttDownloader';
import {TTDownloader} from './ttDownloaderProvider';
import {TTSave} from './ttSaveProvider';
export const Providers: BaseProvider[] = [
new SnaptikProvider(),
new TikmateProvider(),
new MusicalyDown(),
new TTDownloader(),
new TTSave(),
];
export const getRandomProvider = () => Providers[

View File

@@ -0,0 +1,57 @@
import {getFetch} from '..';
import {BaseProvider, ExtractedInfo} from './baseProvider';
import {keyGeneratorTTSave} from './util';
/**
* @class TTSave
*/
export class TTSave extends BaseProvider {
/**
* @return {string}
*/
public resourceName(): string {
return 'ttsave';
}
public client = getFetch('https://ttsave.app');
/**
*
* @param {string} url - TikTok Video URL
* @return {Promise<ExtractedInfo>}
*/
public async fetch(url: string): Promise<ExtractedInfo> {
// getting token
const response = await this.client('./');
const token = (
response.body.match(/doDownload\(id, '([^']+)'\)/) as string[]
)[0].split('\'')[1];
const dlResponse = await this.client.post('./download.php', {
'json': {
'id': url,
'token': token,
'key': keyGeneratorTTSave(token),
},
'headers': {
'Origin': this.client.defaults.options.prefixUrl,
'Referer': this.client.defaults.options.prefixUrl,
'Cookie': response.headers['set-cookie']?.toString(),
},
});
return this.extract(dlResponse.body);
}
/**
*
* @param {string} html - HTML Raw
* @return {ExtractedInfo}
*/
extract(html: string): ExtractedInfo {
console.log(html);
return {
'error': '',
};
}
};

View File

@@ -0,0 +1,11 @@
/**
* Generate key for ttsave.app
*
* @param {string} token - Generated token by TTSave
* @return {string}
*/
export const keyGeneratorTTSave = (token: string): string => {
// the key must have 550 character length. ~ hansputera
const tokenReversed = token.split('').reverse().join('');
return tokenReversed.slice(-550);
};

View File

@@ -1 +1,2 @@
export * from './extractor';
export * from './generator';