added support for douyin
- full support for douyin (no watermark) - fixed up some tiktok stuff in the module
This commit is contained in:
@@ -66,7 +66,11 @@
|
||||
"enabled": false
|
||||
},
|
||||
"tiktok": {
|
||||
"patterns": [":user/:type/:postId", ":id"],
|
||||
"patterns": [":user/video/:postId", ":id"],
|
||||
"enabled": true
|
||||
},
|
||||
"douyin": {
|
||||
"patterns": ["video/:postId", ":id"],
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
38
src/modules/services/douyin.js
Normal file
38
src/modules/services/douyin.js
Normal file
@@ -0,0 +1,38 @@
|
||||
import got from "got";
|
||||
import loc from "../../localization/manager.js";
|
||||
import { genericUserAgent, mobileUserAgent } from "../config.js";
|
||||
|
||||
export default async function(obj) {
|
||||
try {
|
||||
if (!obj.postId) {
|
||||
let html = await got.get(`https://v.douyin.com/${obj.id}/`, { headers: { "user-agent": genericUserAgent } });
|
||||
html.on('error', (err) => {
|
||||
return { error: loc(obj.lang, 'ErrorCantConnectToServiceAPI', 'tiktok') };
|
||||
});
|
||||
if (html.body.includes('<html><head><meta charset="UTF-8" />')) {
|
||||
obj.postId = html.url.split('video/')[1].split('?')[0]
|
||||
} else {
|
||||
obj.postId = html.body.split('video/')[1].split('/?')[0]
|
||||
}
|
||||
}
|
||||
let iteminfo = await got.get(`https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${obj.postId}`, {headers: {
|
||||
'authority': 'www.iesdouyin.com',
|
||||
'user-agent': mobileUserAgent,
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'accept': '*/*',
|
||||
'referer': `https://www.iesdouyin.com/share/video/${obj.postId}/?region=CN&u_code=15b9142gf&titleType=title&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme`,
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7'
|
||||
}});
|
||||
iteminfo.on('error', (err) => {
|
||||
return { error: loc(obj.lang, 'ErrorCantConnectToServiceAPI', 'douyin') };
|
||||
});
|
||||
iteminfo = JSON.parse(iteminfo.body);
|
||||
if (iteminfo['item_list'][0]['video']['play_addr']['url_list'][0]) {
|
||||
return { urls: iteminfo['item_list'][0]['video']['play_addr']['url_list'][0].replace("playwm", "play"), filename: `douyin_${obj.postId}.mp4` };
|
||||
} else {
|
||||
return { error: loc(obj.lang, 'ErrorEmptyDownload') };
|
||||
}
|
||||
} catch (e) {
|
||||
return { error: loc(obj.lang, 'ErrorBadFetch') };
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import got from "got";
|
||||
import loc from "../../localization/manager.js";
|
||||
import { genericUserAgent} from "../config.js";
|
||||
import { genericUserAgent } from "../config.js";
|
||||
import { unicodeDecode } from "../sub/utils.js";
|
||||
|
||||
export default async function(obj) {
|
||||
@@ -17,8 +17,7 @@ export default async function(obj) {
|
||||
obj.postId = html.split('aweme/detail/')[1].split('?')[0]
|
||||
}
|
||||
}
|
||||
let url = `https://tiktok.com/@video/video/${obj.postId}`
|
||||
let html = await got.get(url, { headers: { "user-agent": genericUserAgent } });
|
||||
let html = await got.get(`https://tiktok.com/@video/video/${obj.postId}`, { headers: { "user-agent": genericUserAgent } });
|
||||
html.on('error', (err) => {
|
||||
return { error: loc(obj.lang, 'ErrorCantConnectToServiceAPI', 'tiktok') };
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user