@aidarkezio/main-func
Version:
📦 It has my funcs
105 lines (99 loc) • 6.39 kB
text/typescript
import cheerio from 'cheerio'
import got from 'got'
import {
TwitterDownloaderArgsSchema,
TwitterDownloaderSchema,
TwitterDownloaderV2Schema,
TwitterDownloader,
TwitterDownloaderV2
} from './types.js'
import { ScraperError } from '../utils.js'
export async function twitterdl (
url: string
): Promise<TwitterDownloader[] | []> {
TwitterDownloaderArgsSchema.parse(arguments)
if (!/https:\/\/twitter\.com\//i.test(url)) throw new ScraperError('URL invalid!')
const payload: { url: string } = { url }
const res = await got(
'https://www.expertsphp.com/instagram-reels-downloader.php',
{
method: 'POST',
headers: {
'content-type': 'application/x-www-form-urlencoded',
cookie:
'_ga_D1XX1R246W=GS1.1.1657161630.1.0.1657161630.0; _ga=GA1.2.455889464.1657161630; _gid=GA1.2.61886294.1657161630; _gat_gtag_UA_120752274_1=1; __gads=ID=4284cc8ed886151d-22665a9c12d500cf:T=1657161632:RT=1657161632:S=ALNI_MbWHK3mOfl2Cl9lUWNL-CFcWyfQHA; __gpi=UID=0000063f22273fd9:T=1657161632:RT=1657161632:S=ALNI_MbLxYvwu_u8kpWkhRT4WbeBDkBZPQ',
origin: 'https://www.expertsphp.com',
referer: 'https://www.expertsphp.com/instagram-reels-downloader.php',
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
},
form: payload
}
).text()
const $ = cheerio.load(res)
const results: TwitterDownloader[] = []
$('table.table > tbody > tr').each(function () {
const quality = $(this).find('td').eq(2).find('strong').text()
const type = $(this).find('td').eq(1).find('strong').text()
const url = $(this).find('td').eq(0).find('a[href]').attr('href')
const isVideo = /video/i.test(type)
if (url) {
results.push({
quality,
type,
url,
isVideo
})
}
})
if (results.length === 0) throw new ScraperError(`No results found!\n\n${res}`)
return results.map(res => TwitterDownloaderSchema.parse(res))
}
export async function twitterdlv2 (url: string): Promise<TwitterDownloaderV2[]> {
TwitterDownloaderArgsSchema.parse(arguments)
const resToken = await got('https://twittervideodownloader.com/', {
headers: {
accept:
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding': 'gzip, deflate, br',
cookie:
'csrftoken=au5r4nZ6uN48szGKtaEYp4sh4hBWSbL72M7LggD0nPUh8JGajAI403UIpWhrc5dU; _ga=GA1.2.1240680676.1641628632; _gid=GA1.2.414203301.1641628632; __qca=P0-603222438-1641628633090; _pbjs_userid_consent_data=6683316680106290; _pubcid=529c1986-42d2-4dec-a0e8-3a7d7c453add; __gads=ID=c7fcfc8de61626ad:T=1641628636:S=ALNI_MaE6t3k60TjxfxOEU_7fiYOKTdg8Q; session_id=6831c9ed-aeaf-47cd-a4ea-fdf1667efea2; _gat=1; cto_bundle=3Tj6Hl93WmQzcHglMkJDRmdjWnFTYWg1ZHpLeWE5allVRUU2dlFOU1huayUyRjFTM0xYJTJCSzhsajNRRkF1Q2N2OU9JS1NlSjlxWmYzRTFqSzRuaSUyQjlacHNtYXFSRTV1UHZ1UE42djg4TUJuN05FaVdwTTR4c1hkSUlCRlY4WkJaSmd2WXhLc1NDdHRrRm44c25yeTIwMkRRRSUyQkhJalMlMkJBZ3YxZzZwck5VdTIwclNoMkRvbzglM0Q; cto_bundle=3YOlHV93WmQzcHglMkJDRmdjWnFTYWg1ZHpLeVhBUGgzakxaV0xpZTJpJTJCQ3ZDVDd6SyUyQmJsdmxXcW8lMkZtZkZoMVlNNlJ4SU0xaUVxZXg0eGptZU1oZU4xOHIlMkZaamxlY3gwYnJ1ZSUyQkpVVTUyV2p0cm9PNkFRNEl3ZVBoaUtNSmpnNWRjeWtrWktoYTIzV1ZUdEJ6bFZDTWtCSDV4UWdWV2JPbGZJMzBzM2lxaVVRanNWSkElM0Q; cto_bidid=19sjyV9TQVBXTlA4SGwxYUt5Z0JqVFlHUSUyRk1QZ3Vwa1BaUGZubk1meUVmYSUyQmRSSzBUTkdGQiUyQll0bThNbWVGbjVxV293a2RDUVEzNTFvdVZxR09vaWxSWlE4a2lKTVQwYnp3JTJGV05GV0g2UUxWMnc5N2RJWG1NZGtKVWdiRm1WYXNqU0Ey',
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
}).text()
const $ = cheerio.load(resToken)
const payload: { csrfmiddlewaretoken: string; tweet: string } = {
csrfmiddlewaretoken: $('input[name="csrfmiddlewaretoken"]').val() as string,
tweet: url
}
const res = await got
.post('https://twittervideodownloader.com/download', {
form: payload,
headers: {
accept:
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding': 'gzip, deflate, br',
'content-type': 'application/x-www-form-urlencoded',
cookie:
'csrftoken=au5r4nZ6uN48szGKtaEYp4sh4hBWSbL72M7LggD0nPUh8JGajAI403UIpWhrc5dU; _ga=GA1.2.1240680676.1641628632; _gid=GA1.2.414203301.1641628632; __qca=P0-603222438-1641628633090; _pbjs_userid_consent_data=6683316680106290; _pubcid=529c1986-42d2-4dec-a0e8-3a7d7c453add; __gads=ID=c7fcfc8de61626ad:T=1641628636:S=ALNI_MaE6t3k60TjxfxOEU_7fiYOKTdg8Q; session_id=6831c9ed-aeaf-47cd-a4ea-fdf1667efea2; cto_bundle=3Tj6Hl93WmQzcHglMkJDRmdjWnFTYWg1ZHpLeWE5allVRUU2dlFOU1huayUyRjFTM0xYJTJCSzhsajNRRkF1Q2N2OU9JS1NlSjlxWmYzRTFqSzRuaSUyQjlacHNtYXFSRTV1UHZ1UE42djg4TUJuN05FaVdwTTR4c1hkSUlCRlY4WkJaSmd2WXhLc1NDdHRrRm44c25yeTIwMkRRRSUyQkhJalMlMkJBZ3YxZzZwck5VdTIwclNoMkRvbzglM0Q; cto_bundle=ZKGKs193WmQzcHglMkJDRmdjWnFTYWg1ZHpLeWF0Z3V5SVY2JTJGTDNCd3A1MHVWVmJMWCUyQjdLTHh2MGZjRzh3ZU5CdWs4TEJyWTNmN2IlMkZuUCUyQiUyRlBDazBORUZIM2d3d0NUR2E3VWh6bmhxNzNDMm9mQUtnTVNPMjBiOUxpSXNXZGoydGxlZjB0YTZIbkNCeU91NnZ2Y0xUJTJGV0ppYkJ0JTJCZlIxYW8yNXBGRXdLaG1Za3RWZzJrJTNE; cto_bidid=U6ndml9TQVBXTlA4SGwxYUt5Z0JqVFlHUSUyRk1QZ3Vwa1BaUGZubk1meUVmYSUyQmRSSzBUTkdGQiUyQll0bThNbWVGbjVxV293a2RDUVEzNTFvdVZxR09vaWxSWlE4a2lKTVQwYnp3JTJGV05GV0g2UUxWMnc5VkJXSFlsN2x6cExKb3pPQTAzWEZZ',
origin: 'https://twittervideodownloader.com',
referer: 'https://twittervideodownloader.com/',
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
}
})
.text()
const results: TwitterDownloaderV2[] = []
const $$ = cheerio.load(res)
$$('div.row.body-container > div > center > div.row').each(function () {
const el = $(this).find('div')
const _quality = el.eq(1).find('p').text().split(':')
const quality = _quality?.[0]?.trim()
const type = _quality?.[1]?.trim()
const url = el.eq(0).find('a[download]').attr('href')
results.push({ quality, type, url } as TwitterDownloaderV2)
})
if (results.length === 0) throw new ScraperError(`No results found!\n\n${res}`)
return results.map(res => TwitterDownloaderV2Schema.parse(res))
}