DashX-API / plugins /twitter.js
HerzaJ's picture
Upload 36 files
7e9ddb1 verified
const axios = require('axios');
const cheerio = require('cheerio');
const crypto = require('crypto');
async function twitterDownloader(url) {
try {
const urlParams = new URLSearchParams(url.split('?')[1]);
const tweetUrl = urlParams.get('url') || url;
const decodedUrl = decodeURIComponent(tweetUrl);
const timestamp = Math.floor(Date.now() / 1000);
const hash = crypto.createHash('md5');
hash.update(timestamp.toString() + 'ssstwitter');
const tt = hash.digest('hex');
const postData = new URLSearchParams({
'id': decodedUrl,
'locale': 'en',
'tt': tt,
'ts': timestamp.toString(),
'source': 'form'
});
const { data: html } = await axios.post('https://ssstwitter.com/', postData, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'HX-Request': 'true',
'HX-Target': 'target',
'HX-Current-URL': 'https://ssstwitter.com/en-2',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Origin': 'https://ssstwitter.com',
'Referer': 'https://ssstwitter.com/en-2'
}
});
const $ = cheerio.load(html);
const title = $('h2').first().text().trim();
const downloads = [];
$('.download-btn').each((i, elem) => {
const $elem = $(elem);
const downloadUrl = $elem.attr('href');
const qualityText = $elem.find('span').text().trim();
const quality = qualityText.replace('Download', '').trim();
if (downloadUrl && downloadUrl.startsWith('http')) {
downloads.push({
quality: quality,
url: downloadUrl
});
}
});
const mediaType = downloads.length > 0 ? 'video' : 'unknown';
const hdDownload = downloads.find(d => d.quality.includes('HD')) || downloads[0];
return {
title: title || 'Twitter Media',
mediaType: mediaType,
downloads: downloads,
hdUrl: hdDownload ? hdDownload.url : null,
hdQuality: hdDownload ? hdDownload.quality : null
};
} catch (error) {
throw new Error(error.message);
}
}
const handler = async (req, res) => {
try {
const { url } = req.query;
if (!url) {
return res.status(400).json({
success: false,
error: 'Missing required parameter: url'
});
}
const result = await twitterDownloader(url);
res.json({
author: "Herza",
success: true,
msg: result
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message
});
}
};
module.exports = {
name: 'Twitter DL',
description: 'Download Twitter/X Video and Images',
type: 'GET',
routes: ['api/download/twitter'],
tags: ['downloader', 'tools', 'misc'],
parameters: ['url', 'key'],
enabled: true,
main: ['Downloader'],
handler
};