├── .github └── dependabot.yml ├── Procfile ├── README.md ├── index.js ├── lib ├── color.js ├── converter.js ├── function.js ├── img2pdf.js └── pdfSize.json ├── main.js ├── package.json ├── scraper ├── aiovideodl.js ├── akaneko.js ├── doujindesu.js ├── happymod.js ├── igdl.js ├── index.js ├── joox.js ├── konachan.js ├── mediafire.js ├── merdekanews.js ├── musicaldown.js ├── mynime.js ├── neonime.js ├── otakudesu.js ├── photooxy.js ├── pinterest.js ├── pinterestdl.js ├── pixiv.js ├── primbon.js ├── savefrom.js ├── savetik.js ├── scdl.js ├── solidfiles.js ├── spotify.js ├── stickerpack.js ├── tebakgambar.js ├── textpro.js ├── tiktok.js ├── tiktok_search.js ├── wallpaper.js ├── ytdl.js └── zippy.js ├── server ├── anime.js ├── convert.js ├── downloader.js ├── games.js ├── nsfw.js ├── otakudesu.js ├── other.js ├── photooxy.js ├── primbon.js ├── randomimage.js └── search.js ├── tmp └── data └── views ├── 404.html └── index.html /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node index.js 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # simple-api 2 | 3 | Pake aja buat belajar, saya pun masih belajar 4 | Tapi Jangan lupa nama creator (ɔ◔‿◔)ɔ ♥ 5 | Yang mau nambahin bisa Pull request kalo ada yang Error bisa langsung buat Issue 6 | Enjoy~ <3 7 | 8 | ## 🛠️ Feature 9 | ``` 10 | >> Play 11 | >> Youtube Downloader 12 | >> Tiktok Downloader 13 | >> Tiktok Nowatermark 14 | >> Tiktok Audio 15 | >> Instagram Downloader 16 | >> Instagram story Downloader 17 | >> Facebook Downloader 18 | >> Twitter Downloader 19 | >> Likee Downloader 20 | >> Pinterest Downloader 21 | >> Pixiv Downloader 22 | >> Solidfiles Downloadaer 23 | >> Mediafire Downloader 24 | >> Soundcloud Downloader 25 | >> Stickerpack Downloader 26 | >> Pinterest Search 27 | >> Alphacoders Search 28 | >> Wallpaperscraft Search 29 | >> Wallpapercave Search 30 | >> ZeroChan Search 31 | >> StickerPack Search 32 | >> Google Search 33 | >> Happymod Search 34 | >> Tiktok Search 35 | >> Random Search 36 | >> Artinama 37 | >> Ramal Jodoh 38 | >> Milf 39 | >> Waifu 40 | >> Husbu 41 | >> Loli 42 | >> Cosplay 43 | >> Neko 44 | >> Ass 45 | >> Bdsm 46 | >> Blowjob 47 | >> Cum 48 | >> Doujin 49 | >> Feet 50 | >> Femdom 51 | >> Foxgirl 52 | >> Gifs 53 | >> Glasses 54 | >> Hentai 55 | >> Netorare 56 | >> Maid 57 | >> Masturbation 58 | >> Orgy 59 | >> Panties 60 | >> Pussy 61 | >> School 62 | >> Succubus 63 | >> Tentacles 64 | >> Things 65 | >> Uglyblastard 66 | >> Uniform 67 | >> Yuri 68 | >> Zettairyouiki 69 | >> Doujindesu Search 70 | >> Nhentai Search 71 | >> Nhentai Info 72 | >> Nhentai Downloader 73 | >> Tebak Gambar 74 | >> jpg To webp 75 | >> Mp4 To mp3 76 | >> Nulis Buku 77 | >> Text to Picture 78 | >> Text to Gif 79 | >> ScreenShoot web 80 | >> Remove bg 81 | >> Merdeka News 82 | >> Meme (Meme Engglish) 83 | >> Qrcode Creator 84 | >> Hilih Generator 85 | ``` 86 | 87 | ## Thanks To 88 | * [`indrijunanda`](https://github.com/indrijunanda/RuangAdmin) 89 | * Anu-Team 90 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const secure = require('ssl-express-www') 3 | const PORT = process.env.PORT || 8080; 4 | const morgan = require('morgan') 5 | const multer = require('multer') 6 | const path = require('path') 7 | const fs = require('fs') 8 | var app = express(); 9 | //app.use(secure) 10 | app.use(morgan('dev')); 11 | app.use(express.static('client')); 12 | app.set("json spaces",2) 13 | __path = process.cwd() 14 | 15 | 16 | var downloader = require('./server/downloader.js'); 17 | var search = require('./server/search.js'); 18 | var anime = require('./server/anime.js'); 19 | var randomimg = require('./server/randomimage.js'); 20 | var nsfw = require('./server/nsfw.js'); 21 | var photooxy = require('./server/photooxy.js'); 22 | var otakudesu = require('./server/otakudesu.js'); 23 | var games = require('./server/games.js'); 24 | var primbon = require('./server/primbon.js'); 25 | var convert = require('./server/convert.js'); 26 | var other = require('./server/other.js'); 27 | var main = require('./main'); 28 | 29 | app.use('/downloader', downloader) 30 | app.use('/search', search) 31 | app.use('/anime', anime) 32 | app.use('/randomimg', randomimg) 33 | app.use('/nsfw', nsfw) 34 | app.use('/photooxy', photooxy) 35 | app.use('/otakudesu', otakudesu) 36 | app.use('/games', games) 37 | app.use('/primbon', primbon) 38 | app.use('/converter', convert) 39 | app.use('/other', other) 40 | app.use('/', main) 41 | 42 | app.listen(PORT, () => { 43 | console.log(`Server Run on port ${PORT}`) 44 | }); 45 | -------------------------------------------------------------------------------- /lib/color.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk') 2 | 3 | const color = (text, color) => { 4 | return !color ? chalk.green(text) : chalk.keyword(color)(text) 5 | } 6 | 7 | const bgcolor = (text, bgcolor) => { 8 | return !bgcolor ? chalk.green(text) : chalk.bgKeyword(bgcolor)(text) 9 | } 10 | 11 | module.exports = { 12 | color, 13 | bgcolor 14 | } 15 | -------------------------------------------------------------------------------- /lib/converter.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | const { spawn } = require('child_process') 4 | 5 | function ffmpeg(buffer, args = [], ext = '', ext2 = '') { 6 | return new Promise(async (resolve, reject) => { 7 | try { 8 | let tmp = path.join(__dirname, '../tmp', + new Date + '.' + ext) 9 | let out = tmp + '.' + ext2 10 | await fs.promises.writeFile(tmp, buffer) 11 | spawn('ffmpeg', [ 12 | '-y', 13 | '-i', tmp, 14 | ...args, 15 | out 16 | ]) 17 | .on('error', reject) 18 | .on('close', async (code) => { 19 | try { 20 | await fs.promises.unlink(tmp) 21 | if (code !== 0) return reject(code) 22 | resolve(await fs.promises.readFile(out)) 23 | await fs.promises.unlink(out) 24 | } catch (e) { 25 | reject(e) 26 | } 27 | }) 28 | } catch (e) { 29 | reject(e) 30 | } 31 | }) 32 | } 33 | 34 | /** 35 | * Convert Audio to Playable WhatsApp Audio 36 | * @param {Buffer} buffer Audio Buffer 37 | * @param {String} ext File Extension 38 | */ 39 | function toAudio(buffer, ext) { 40 | return ffmpeg(buffer, [ 41 | '-vn', 42 | '-ac', '2', 43 | '-b:a', '128k', 44 | '-ar', '44100', 45 | '-f', 'mp3' 46 | ], ext, 'mp3') 47 | } 48 | 49 | /** 50 | * Convert Audio to Playable WhatsApp PTT 51 | * @param {Buffer} buffer Audio Buffer 52 | * @param {String} ext File Extension 53 | */ 54 | function toPTT(buffer, ext) { 55 | return ffmpeg(buffer, [ 56 | '-vn', 57 | '-c:a', 'libopus', 58 | '-b:a', '128k', 59 | '-vbr', 'on', 60 | '-compression_level', '10' 61 | ], ext, 'opus') 62 | } 63 | 64 | /** 65 | * Convert Audio to Playable WhatsApp Video 66 | * @param {Buffer} buffer Video Buffer 67 | * @param {String} ext File Extension 68 | */ 69 | function toVideo(buffer, ext) { 70 | return ffmpeg(buffer, [ 71 | '-c:v', 'libx264', 72 | '-c:a', 'aac', 73 | '-ab', '128k', 74 | '-ar', '44100', 75 | '-crf', '32', 76 | '-preset', 'slow' 77 | ], ext, 'mp4') 78 | } 79 | 80 | module.exports = { 81 | toAudio, 82 | toPTT, 83 | toVideo, 84 | ffmpeg, 85 | } 86 | -------------------------------------------------------------------------------- /lib/function.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const FileType = require('file-type'); 3 | const fetch = require('node-fetch'); 4 | 5 | const getBuffer = async (url, options) => { 6 | try { 7 | options ? options : {} 8 | const res = await axios({ 9 | method: "get", 10 | url, 11 | headers: { 12 | 'DNT': 1, 13 | 'Upgrade-Insecure-Request': 1 14 | }, 15 | ...options, 16 | responseType: 'arraybuffer' 17 | }) 18 | return res.data 19 | } catch (e) { 20 | console.log(`Error : ${e}`) 21 | } 22 | } 23 | const getFile = async(path) => { 24 | let res 25 | let data = Buffer.isBuffer(path) ? path : /^data:.*?\/.*?;base64,/i.test(path) ? Buffer.from(path.split`,`[1], 'base64') : /^https?:\/\//.test(path) ? await (res = await fetch(path)).buffer() : fs.existsSync(path) ? fs.readFileSync(path) : typeof path === 'string' ? path : Buffer.alloc(0) 26 | if (!Buffer.isBuffer(data)) throw new TypeError('Result is not a buffer') 27 | let type = await FileType.fromBuffer(data) || { 28 | mime: 'application/octet-stream', 29 | ext: '.bin' 30 | } 31 | 32 | return { 33 | res, 34 | ...type, 35 | data 36 | } 37 | } 38 | 39 | module.exports = { getBuffer, getFile } 40 | -------------------------------------------------------------------------------- /lib/img2pdf.js: -------------------------------------------------------------------------------- 1 | const pdfkit = require('pdfkit'); 2 | const sizes = require('./pdfSize.json'); 3 | const fetch = require('node-fetch'); 4 | 5 | /** 6 | * 7 | * @param {Array} images array of image 8 | * @param {String} size default A4 9 | * @returns 10 | */ 11 | 12 | function toPDF(images = [], size = 'A4') { 13 | return new Promise(async (resolve, reject) => { 14 | if (!Array.isArray(images)) throw new TypeError('images must be an array'); 15 | let _size = sizes[size]; 16 | if (!_size) throw new Error('Size is invalid!'); 17 | let buffs = []; 18 | const doc = new pdfkit({ margin: 0, size: sizes[size] }); 19 | for (let img of images) { 20 | const resp = await fetch(img); 21 | const data = await resp.buffer(); 22 | //const metadata = await sharp(data).metadata(); 23 | doc.image(data, 0, 0, { 24 | fit: _size, 25 | align: 'center', 26 | valign: 'center', 27 | }); 28 | doc.addPage(); 29 | } 30 | // let write = stream2buffer(); 31 | doc.on('data', (chunk) => buffs.push(chunk)); 32 | doc.on('end', () => resolve(Buffer.concat(buffs))); 33 | doc.on('error', (err) => reject(err)); 34 | // let filepath = path.join(__dirname, '../tmp/' + (new Date() + 1) + '.pdf'); 35 | // let stream = fs.createWriteStream(filepath); 36 | // doc.pipe(write); 37 | // write.on('finish', function () { 38 | // resolve(Buffer.concat(this.data)); 39 | // }); 40 | doc.end(); 41 | }); 42 | } 43 | 44 | 45 | module.exports = { 46 | toPDF, 47 | }; -------------------------------------------------------------------------------- /lib/pdfSize.json: -------------------------------------------------------------------------------- 1 | { 2 | "4A0": [4767.87, 6740.79], 3 | "2A0": [3370.39, 4767.87], 4 | "A0": [2383.94, 3370.39], 5 | "A1": [1683.78, 2383.94], 6 | "A2": [1190.55, 1683.78], 7 | "A3": [841.89, 1190.55], 8 | "A4": [595.28, 841.89], 9 | "A5": [419.53, 595.28], 10 | "A6": [297.64, 419.53], 11 | "A7": [209.76, 297.64], 12 | "A8": [147.4, 209.76], 13 | "A9": [104.88, 147.4], 14 | "A10": [73.7, 104.88], 15 | "B0": [2834.65, 4008.19], 16 | "B1": [2004.09, 2834.65], 17 | "B2": [1417.32, 2004.09], 18 | "B3": [1000.63, 1417.32], 19 | "B4": [708.66, 1000.63], 20 | "B5": [498.9, 708.66], 21 | "B6": [354.33, 498.9], 22 | "B7": [249.45, 354.33], 23 | "B8": [175.75, 249.45], 24 | "B9": [124.72, 175.75], 25 | "B10": [87.87, 124.72], 26 | "C0": [2599.37, 3676.54], 27 | "C1": [1836.85, 2599.37], 28 | "C2": [1298.27, 1836.85], 29 | "C3": [918.43, 1298.27], 30 | "C4": [649.13, 918.43], 31 | "C5": [459.21, 649.13], 32 | "C6": [323.15, 459.21], 33 | "C7": [229.61, 323.15], 34 | "C8": [161.57, 229.61], 35 | "C9": [113.39, 161.57], 36 | "C10": [79.37, 113.39], 37 | "RA0": [2437.8, 3458.27], 38 | "RA1": [1729.13, 2437.8], 39 | "RA2": [1218.9, 1729.13], 40 | "RA3": [864.57, 1218.9], 41 | "RA4": [609.45, 864.57], 42 | "SRA0": [2551.18, 3628.35], 43 | "SRA1": [1814.17, 2551.18], 44 | "SRA2": [1275.59, 1814.17], 45 | "SRA3": [907.09, 1275.59], 46 | "SRA4": [637.8, 907.09], 47 | "EXECUTIVE": [521.86, 756.0], 48 | "FOLIO": [612.0, 936.0], 49 | "LEGAL": [612.0, 1008.0], 50 | "LETTER": [612.0, 792.0], 51 | "TABLOID": [792.0, 1224.0] 52 | } -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | __path = process.cwd() 2 | 3 | var express = require('express'); 4 | var router = express.Router(); 5 | 6 | router.get('/', async(req, res) => { 7 | res.sendFile(__path + '/views/index.html') 8 | }) 9 | router.get('/css/style.css', async(req, res) => { 10 | res.sendFile(__path + '/views/css/style.css') 11 | }) 12 | 13 | //Kalo page yang di cari engga ada, nanti muncul ini:v 14 | router.use(function (req, res) { 15 | res.status(404) 16 | .sendFile(__path + '/views/404.html') 17 | }); 18 | 19 | 20 | module.exports = router 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-api", 3 | "version": "1.0.0", 4 | "description": "Simpe-API", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "ada lah", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.22.0", 13 | "chalk": "^5.0.0", 14 | "cheerio": "^1.0.0-rc.10", 15 | "cors": "^2.8.5", 16 | "esm": "^3.2.25", 17 | "express": "^4.17.1", 18 | "form-data": "^4.0.0", 19 | "file-type": "^16.5.3", 20 | "fs": "^0.0.1-security", 21 | "qr-image": "^3.2.0", 22 | "got": "^11.8.3", 23 | "google-it": "^1.6.2", 24 | "hxz-api": "^1.0.1", 25 | "jsdom": "^17.0.0", 26 | "morgan": "^1.10.0", 27 | "multer": "^1.4.3", 28 | "nana-api": "^1.1.4", 29 | "spotifydl-core": "^0.2.0", 30 | "url": "^0.11.0", 31 | "nhentai-js": "^4.0.0", 32 | "node-fetch": "^2.6.1", 33 | "node-fetch-cookies": "^2.0.3", 34 | "path": "^0.12.7", 35 | "pdfkit": "^0.13.0", 36 | "ssl-express-www": "^3.0.8", 37 | "tiktok-scraper": "^1.4.36", 38 | "vm": "^0.1.0", 39 | "yt-search": "^2.9.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /scraper/aiovideodl.js: -------------------------------------------------------------------------------- 1 | //Source: https://github.com/ariffb25/stikerinbot recode by Me! 2 | const axios = require('axios') 3 | const cheerio = require('cheerio') 4 | const qs = require('qs') 5 | 6 | let is = { 7 | headers: { 8 | 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', 9 | "sec-ch-ua": '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"', 10 | "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", 11 | "cookie": "pll_language=en; PHPSESSID=58578e38aa296f5a12a495fc5e5f0c2e" 12 | } 13 | } 14 | 15 | function _token(host) { 16 | return new Promise(async (resolve, reject) => { 17 | axios.request({ 18 | url: host, method: 'GET', headers: { 19 | "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36", 20 | "cookie": "pll_language=en; PHPSESSID=58578e38aa296f5a12a495fc5e5f0c2e" 21 | } 22 | }).then(({ data }) => { 23 | let $ = cheerio.load(data) 24 | let token = $('#token').attr('value') 25 | resolve(token) 26 | }) 27 | }) 28 | } 29 | 30 | function dl(url) { 31 | return new Promise(async (resolve, reject) => { 32 | let host = 'https://aiovideodl.ml/' 33 | let form = { data: { 'url': url, 'token': (await _token(host)) } } 34 | axios.post(host + 'wp-json/aio-dl/video-data/', qs.stringify(form.data), { headers: is.headers }) 35 | .then(({ data }) => { 36 | if (data == 'error') return resolve({ message: 'Error!' }) 37 | resolve(data) 38 | console.log(data) 39 | }) 40 | }) 41 | } 42 | module.exports = { dl } 43 | -------------------------------------------------------------------------------- /scraper/akaneko.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | 3 | async function akanekoApi(param) { 4 | return new Promise(async(resolve, reject) => { 5 | const data = await axios.get('https://akaneko-api.herokuapp.com/api/'+param) 6 | resolve(data.data.url) 7 | }) 8 | } 9 | 10 | module.exports = { akanekoApi } 11 | -------------------------------------------------------------------------------- /scraper/doujindesu.js: -------------------------------------------------------------------------------- 1 | const cheerio = require('cheerio') 2 | const axios = require('axios') 3 | 4 | function doujindesu(query){ 5 | return new Promise(async(resolve,reject) => { 6 | axios.get('https://doujindesu.id/?s=' + query).then(({ data }) => { 7 | const $ = cheerio.load(data) 8 | const result = []; 9 | $('div.animposx').get().map(b => { 10 | const thumb = $(b).find('img').attr('src') 11 | const title = $(b).find('h2').text() 12 | const score = $(b).find('div.score').text() 13 | const status = $(b).find('div.type').text() 14 | const link = $(b).find('a').attr('href') 15 | result.push({thumb, title, score, status, link}) 16 | }); 17 | resolve(result) 18 | }) 19 | }) 20 | } 21 | 22 | module.exports = doujindesu 23 | -------------------------------------------------------------------------------- /scraper/happymod.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | const baseUrl = 'https://www.happymod.com/' 5 | 6 | function happymodSearch(query) { 7 | return new Promise((resolve, reject) => { 8 | axios.get(baseUrl+'search.html?q='+query).then(async res => { 9 | var $ = cheerio.load(res.data) 10 | const hasil = [] 11 | $("div.pdt-app-box").each(function(c, d) { 12 | var title = $(d).find("a").text().trim(); 13 | var icon = $(d).find("img.lazy").attr('data-original'); 14 | var rating = $(d).find("span").text(); 15 | var link = baseUrl+$(d).find("a").attr('href'); 16 | hasil.push({ 17 | title, 18 | icon, 19 | link, 20 | rating 21 | }) 22 | }) 23 | resolve(hasil) 24 | console.log(hasil) 25 | }).catch(reject) 26 | }) 27 | } 28 | 29 | module.exports = { happymodSearch } 30 | -------------------------------------------------------------------------------- /scraper/igdl.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | function igDownload(Url) { 5 | return new Promise((resolve, reject) => { 6 | axios.get('https://snapinsta.app/', { 7 | headers: { 8 | 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' 9 | } 10 | }).then(res => { 11 | const cookie = res.headers[`set-cookie`][0].replace('; path=/', '') 12 | const data = { 13 | url: Url, 14 | action: 'post' 15 | } 16 | axios.request({ 17 | url: 'https://snapinsta.app/action.php', 18 | method: 'post', 19 | data: new URLSearchParams(Object.entries(data)), 20 | headers: { 21 | 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 22 | 'cookie': cookie 23 | } 24 | }).then(data => { 25 | const $ = cheerio.load(data.data) 26 | const result = [] 27 | $('div.row.download-box > div.col-md-4').each((a, b) => { 28 | let link = $(b).find('div.download-items > div.download-items__btn > a.abutton').attr('href'); 29 | result.push(link) 30 | }) 31 | resolve(result) 32 | }) 33 | }) 34 | }) 35 | } 36 | 37 | function igStalk(Username) { 38 | return new Promise((resolve, reject) => { 39 | axios.get('https://dumpor.com/v/'+Username, { 40 | headers: { 41 | "cookie": "_inst_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYWGhnNS1uWVNLUU81V1lzQ01MTVY2R0h1.fI2xB2dYYxmWqn7kyCKIn1baWw3b-f7QvGDfDK2WXr8", 42 | "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" 43 | } 44 | }).then(res => { 45 | const $ = cheerio.load(res.data) 46 | const result = { 47 | profile: $('#user-page > div.user > div.row > div > div.user__img').attr('style').replace(/(background-image: url\(\'|\'\);)/gi, ''), 48 | fullname: $('#user-page > div.user > div > div.col-md-4.col-8.my-3 > div > a > h1').text(), 49 | username: $('#user-page > div.user > div > div.col-md-4.col-8.my-3 > div > h4').text(), 50 | post: $('#user-page > div.user > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(1)').text().replace(' Posts',''), 51 | followers: $('#user-page > div.user > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(2)').text().replace(' Followers',''), 52 | following: $('#user-page > div.user > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(3)').text().replace(' Following',''), 53 | bio: $('#user-page > div.user > div > div.col-md-5.my-3 > div').text() 54 | } 55 | resolve(result) 56 | }) 57 | }) 58 | } 59 | 60 | function igStory(username) { 61 | return new Promise((resolve, reject) => { 62 | axios.request({ 63 | url: 'https://storydownloader.net/', 64 | method: 'GET', 65 | headers: { 66 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" 67 | } 68 | }).then(response => { 69 | const ch = cheerio.load(response.data) 70 | const token = ch('#token').attr('value') 71 | let data = { 72 | token: token, 73 | username: username, 74 | stp: 1 75 | } 76 | axios.request({ 77 | url: 'https://storydownloader.net/process/', 78 | method: 'POST', 79 | data: new URLSearchParams(Object.entries(data)), 80 | headers: { 81 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", 82 | "cookie": response.headers["set-cookie"], 83 | "accept": "application/json, text/javascript, */*; q=0.01" 84 | } 85 | }).then(res => { 86 | const hc = cheerio.load(res.data.html) 87 | const medias = [] 88 | hc('figure').each(function (a, b) { 89 | const url = hc(b).find('img').attr('src') 90 | medias.push(url) 91 | }) 92 | const hasil = { 93 | title: hc('h1').text(), 94 | profile_pic: hc('img').attr('src'), 95 | medias: medias 96 | } 97 | resolve(hasil) 98 | }).catch(reject) 99 | }).catch(reject) 100 | }) 101 | } 102 | 103 | module.exports = { igStory, igStalk, igDownload } 104 | -------------------------------------------------------------------------------- /scraper/index.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | pinterest: require('./pinterest'), 3 | igDownload: require('./igdl'), 4 | mediafireDl: require('./mediafire'), 5 | doujindesu: require('./doujindesu'), 6 | pinterestdl: require('./pinterestdl'), 7 | scdl: require('./scdl'), 8 | randomTiktok: require('./tiktok_search'), 9 | sfiledl: require('./solidfiles'), 10 | tebakgambar: require('./tebakgambar'), 11 | konachan: require('./konachan'), 12 | } 13 | -------------------------------------------------------------------------------- /scraper/joox.js: -------------------------------------------------------------------------------- 1 | const axios = require("axios") 2 | 3 | function joox(query) { 4 | return new Promise((resolve, reject) => { 5 | const time = Math.floor(new Date() / 1000) 6 | axios.get('http://api.joox.com/web-fcgi-bin//web_search?lang=id&country=id&type=0&search_input=' + query + '&pn=1&sin=0&ein=29&_=' + time) 7 | .then(({ data }) => { 8 | let result = [] 9 | let hasil = [] 10 | let promoses = [] 11 | let ids = [] 12 | data.itemlist.forEach(result => { 13 | ids.push(result.songid) 14 | }); 15 | for (let i = 0; i < data.itemlist.length; i++) { 16 | const get = 'http://api.joox.com/web-fcgi-bin/web_get_songinfo?songid=' + ids[i] 17 | promoses.push( 18 | axios.get(get, { 19 | headers: { 20 | Cookie: 'wmid=142420656; user_type=1; country=id; session_key=2a5d97d05dc8fe238150184eaf3519ad;' 21 | } 22 | }) 23 | .then(({ data }) => { 24 | const res = JSON.parse(data.replace('MusicInfoCallback(', '').replace('\n)', '')) 25 | hasil.push({ 26 | lagu: res.msong, 27 | album: res.malbum, 28 | penyanyi: res.msinger, 29 | publish: res.public_time, 30 | img: res.imgSrc, 31 | mp3: res.mp3Url 32 | }) 33 | Promise.all(promoses).then(() => resolve({ 34 | status: true, 35 | data: hasil, 36 | })) 37 | }).catch(reject) 38 | ) 39 | } 40 | }).catch(reject) 41 | }) 42 | } 43 | function jooxdl (url) { 44 | const URL = url.replace('https://www.joox.com/id/single/', '') 45 | return new Promise((resolve, reject) => { 46 | axios.get('http://api.joox.com/web-fcgi-bin/web_get_songinfo?songid='+URL, { 47 | headers: { 48 | Cookie: 'wmid=142420656; user_type=1; country=id; session_key=2a5d97d05dc8fe238150184eaf3519ad;' 49 | } 50 | }).then(res => { 51 | const result = JSON.parse(res.data.replace('MusicInfoCallback(', '').replace('\n)', '')) 52 | const hasil = { 53 | lagu: result.msong, 54 | album: result.malbum, 55 | penyanyi: result.msinger, 56 | publish: result.public_time, 57 | img: result.imgSrc, 58 | mp3: result.mp3Url 59 | } 60 | resolve(hasil) 61 | }).catch(reject) 62 | }) 63 | } 64 | module.exports = { jooxdl, joox } 65 | -------------------------------------------------------------------------------- /scraper/konachan.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | function konachan(q) { 5 | return new Promise((resolve, reject) => { 6 | let query = q.replace(/ /g, '_') 7 | axios.get('https://konachan.net/post?tags='+query+'+').then(res => { 8 | const $ = cheerio.load(res.data) 9 | const aray = [] 10 | $('div.pagination > a').each(function(a, b) { 11 | const u = $(b).text() 12 | aray.push(u) 13 | let math = Math.floor(Math.random() * aray.length) 14 | axios.get('https://konachan.net/post?page='+math+'&tags='+query+'+').then(respon => { 15 | const ch = cheerio.load(respon.data) 16 | const result = [] 17 | ch('#post-list > div.content > div:nth-child(4) > ul > li > a.directlink.largeimg').each(function(c, d) { 18 | const r = $(d).attr('href') 19 | result.push(r) 20 | }) 21 | resolve(result) 22 | }).catch(reject) 23 | }) 24 | }).catch(reject) 25 | }) 26 | } 27 | module.exports = konachan 28 | -------------------------------------------------------------------------------- /scraper/mediafire.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | const mediafireDl = async (url) => { 5 | const res = await axios.get(url) 6 | const $ = cheerio.load(res.data) 7 | const hasil = {} 8 | const link = $('a#downloadButton').attr('href') 9 | const size = $('a#downloadButton').text().replace('Download', '').replace('(', '').replace(')', '').replace('\n', '').replace('\n', '').replace(' ', '') 10 | const seplit = link.split('/') 11 | const nama = seplit[5] 12 | mime = nama.split('.') 13 | mime = mime[1] 14 | hasil.title = nama 15 | hasil.size = size 16 | hasil.link = link 17 | return hasil 18 | } 19 | 20 | 21 | module.exports = mediafireDl -------------------------------------------------------------------------------- /scraper/merdekanews.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | const randomarray = async (array) => { 5 | return array[Math.floor(Math.random() * array.length)] 6 | } 7 | 8 | const result = [] 9 | 10 | function merdekaNews() { 11 | return new Promise(async(resolve, reject) => { 12 | const jsonIndex = ['index2', 'index3', 'index4', 'index5'] 13 | const randIndex = await randomarray(jsonIndex) 14 | axios.get(`https://www.merdeka.com/peristiwa/${randIndex}/`).then(res => { 15 | const $ = cheerio.load(res.data) 16 | $('#mdk-content-center > div.inner-content > ul > li > div').each(function(a, b) { 17 | const link = 'https://www.merdeka.com' + $(b).find('h3 > a').attr('href') 18 | const title = $(b).find('h3').text() 19 | const upload_date= $(b).find('div > span').text().trim() 20 | const thumb = $(b).find('div > a > img').attr('src') 21 | result.push({ link, title, upload_date, thumb }) 22 | }) 23 | resolve(result) 24 | }).catch(reject) 25 | }) 26 | } 27 | 28 | 29 | module.exports = { merdekaNews } 30 | -------------------------------------------------------------------------------- /scraper/musicaldown.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | 5 | async function musicaldown(URL) { 6 | return new Promise((resolve, rejecet) => { 7 | axios.get('https://musicaldown.com/id', { 8 | headers: { 9 | 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36' 10 | } 11 | }).then(res => { 12 | const $ = cheerio.load(res.data) 13 | const url_name = $("#link_url").attr("name") 14 | const token_name = $("#submit-form > div").find("div:nth-child(1) > input[type=hidden]:nth-child(2)").attr("name") 15 | const token_ = $("#submit-form > div").find("div:nth-child(1) > input[type=hidden]:nth-child(2)").attr("value") 16 | const verify = $("#submit-form > div").find("div:nth-child(1) > input[type=hidden]:nth-child(3)").attr("value") 17 | let data = { 18 | [`${url_name}`]: URL, 19 | [`${token_name}`]: token_, 20 | verify: verify 21 | } 22 | axios.request({ 23 | url: 'https://musicaldown.com/id/download', 24 | method: 'post', 25 | data: new URLSearchParams(Object.entries(data)), 26 | headers: { 27 | 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 28 | 'cookie': res.headers["set-cookie"] 29 | } 30 | }).then(respon => { 31 | const ch = cheerio.load(respon.data) 32 | axios.request({ 33 | url: 'https://musicaldown.com/id/mp3', 34 | method: 'post', 35 | headers: { 36 | 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36', 37 | 'cookie': res.headers["set-cookie"] 38 | } 39 | }).then(resaudio => { 40 | const hc = cheerio.load(resaudio.data) 41 | const result = { 42 | creator: 'Arya-kun >///<', 43 | video: ch('body > div.welcome.section > div > div:nth-child(2) > div.col.s12.l8 > a:nth-child(5)').attr('href'), 44 | audio: hc('body > div.welcome.section > div > div:nth-child(2) > div.col.s12.l8 > a:nth-child(5)').attr('href'), 45 | video_original: ch('body > div.welcome.section > div > div:nth-child(2) > div.col.s12.l8 > a:nth-child(9)').attr('href'), 46 | audio_original: hc('body > div.welcome.section > div > div:nth-child(2) > div.col.s12.l8 > a:nth-child(9)').attr('href'), 47 | preview: ch('body > div.welcome.section > div > div:nth-child(2) > div.col.s12.l4 > img').attr('src') 48 | } 49 | resolve(result) 50 | }) 51 | }) 52 | }) 53 | }) 54 | } 55 | 56 | module.exports = { musicaldown } 57 | -------------------------------------------------------------------------------- /scraper/mynime.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | function Search(query) { 5 | return new Promise((resolve, reject) => { 6 | axios.get('https://www.mynimeku.com/?s='+query).then(res => { 7 | const $ = cheerio.load(res.data) 8 | const result = [] 9 | const hasil = [] 10 | $('body > main > div > div > div.flexbox2 > div > div').each( function(a, b) { 11 | const url = $(b).find('a').attr('href') 12 | const thumb = $(b).find('a > div > img').attr('src') 13 | const title = $(b).find('a > div > img').attr('alt') 14 | result.push({ url, thumb, title }) 15 | result.forEach(v => { 16 | if(!/anime/.test(v.url)) return 17 | hasil.push(v) 18 | }) 19 | }) 20 | resolve(hasil) 21 | }).catch(reject) 22 | }) 23 | } 24 | function animeDetail(url) { 25 | return new Promise((resolve, reject) => { 26 | axios.get(url).then(res => { 27 | const $ = cheerio.load(res.data) 28 | const _eps = [] 29 | $('#episode_list > ul > li').each( function(a, b) { 30 | const link = $(b).find('div > div.flexeps-infoz > a').attr('href') 31 | const title = $(b).find('div > div.flexeps-infoz > a').attr('title') 32 | _eps.push({ link, title }) 33 | }) 34 | const result = { 35 | thumb: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-thumb > img').attr('src'), 36 | title: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > div.series-titlex > h2').text(), 37 | title_japanese: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > div.series-titlex > span').text(), 38 | rating: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > div.series-infoz.score > span').text(), 39 | musim: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > ul > li:nth-child(3) > span > a').text(), 40 | studio: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > ul > li:nth-child(4) > span > a').text(), 41 | episode: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > ul > li:nth-child(5) > span').text(), 42 | aired: $('body > main > div > div > div.container > div.series-flex > div.series-flexleft > div.series-info > ul > li:nth-child(6) > span').text(), 43 | genre: $('body > main > div > div > div.container > div.series-flex > div.series-flexright > div.series-genres').text(), 44 | synopsis: $('body > main > div > div > div.container > div.series-flex > div.series-flexright > div.series-synops > p').text(), 45 | episode_list: _eps 46 | } 47 | resolve(result) 48 | }).catch(reject) 49 | }) 50 | } 51 | function downloadEps(url) { 52 | return new Promise((resolve, reject) => { 53 | axios.get(url).then(res => { 54 | const $ = cheerio.load(res.data) 55 | const dl_link = { 56 | low: { 57 | uptobox: $('#linklist > p:nth-child(10) > a:nth-child(1)').attr('href'), 58 | mega: $('#linklist > p:nth-child(10) > a:nth-child(2)').attr('href'), 59 | zippyshare: $('#linklist > p:nth-child(10) > a:nth-child(3)').attr('href'), 60 | }, 61 | medium: { 62 | uptobox: $('#linklist > p:nth-child(13) > a:nth-child(1)').attr('href'), 63 | mega: $('#linklist > p:nth-child(13) > a:nth-child(2)').attr('href'), 64 | zippyshare: $('#linklist > p:nth-child(13) > a:nth-child(3)').attr('href'), 65 | }, 66 | high: { 67 | uptobox: $('#linklist > p:nth-child(16) > a:nth-child(1)').attr('href'), 68 | mega: $('#linklist > p:nth-child(16) > a:nth-child(2)').attr('href'), 69 | zippyshare: $('#linklist > p:nth-child(16) > a:nth-child(3)').attr('href') 70 | } 71 | } 72 | resolve(dl_link) 73 | }).catch(reject) 74 | }) 75 | } 76 | 77 | module.exports = { Search, animeDetail, downloadEps } 78 | -------------------------------------------------------------------------------- /scraper/neonime.js: -------------------------------------------------------------------------------- 1 | const cheerio = require('cheerio') 2 | const axios = require('axios') 3 | 4 | function onGoing() { 5 | return new Promise((resolve, reject) => { 6 | axios.get('https://neonime.co/episode/').then(res => { 7 | const $ = cheerio.load(res.data) 8 | const result = [] 9 | $('tbody').find('tr').each(function(a, b) { 10 | const link = $(b).find('td > div.imagen-td > a').attr('href') 11 | const img = $(b).find('td > div.imagen-td > a > img').attr('data-src') 12 | const info = $(b).find('td.bb > a > span').text().trim() 13 | const judul = $(b).find('td.bb > a').text() 14 | const tgl_rilis = $(b).find('td.dd').text() 15 | result.push({ judul, link, img, info, tgl_rilis }) 16 | }) 17 | resolve(result) 18 | }).catch(reject) 19 | }) 20 | } 21 | 22 | module.exports = onGoing -------------------------------------------------------------------------------- /scraper/otakudesu.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | const baseUrl = 'https://otakudesu.vip' 5 | 6 | const headers = { 7 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36", 8 | "cookie": "_ga=GA1.2.94384000.1635596588; _gid=GA1.2.919815583.1635596588; _gat=1" 9 | } 10 | 11 | async function Search(query) { 12 | return new Promise((resolve, reject) => { 13 | axios.get(baseUrl+'/?s='+query+'&post_type=anime', {headers}).then(res =>{ 14 | const $ = cheerio.load(res.data) 15 | const result = [] 16 | const title = [] 17 | const link = [] 18 | const thumb = [] 19 | $('#venkonten > div > div.venser > div > div > ul > li > h2 > a').each(function(a, b) { 20 | const _title = $(b).text() 21 | const _url = $(b).attr('href') 22 | title.push(_title) 23 | link.push(_url) 24 | }) 25 | $('#venkonten > div > div.venser > div > div > ul > li > img').each(function(a, b) { 26 | const _thumb = $(b).attr('src') 27 | thumb.push(_thumb) 28 | }) 29 | for (let i = 0; i < title.length; i++) { 30 | result.push({ 31 | title: title[i], 32 | thumb: thumb[i], 33 | link: link[i] 34 | }) 35 | } 36 | resolve(result) 37 | }).catch(reject) 38 | }) 39 | } 40 | async function getInfo(URL) { 41 | return new Promise((resolve, reject) => { 42 | axios.get(URL, {headers}).then(res => { 43 | const info = {} 44 | const eps = [] 45 | const $ = cheerio.load(res.data) 46 | const thumb = $('#venkonten > div.venser > div.fotoanime > img').attr('src') 47 | const title = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(1) > span').text().replace('Judul: ', '') 48 | const japanese_title = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(2) > span').text().replace('Japanese: ', '') 49 | const score = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(3) > span').text().replace('Skor: ','') 50 | const producer = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(4) > span').text().replace('Produser: ','') 51 | const type = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(5) > span').text().replace('Tipe: ','') 52 | const status = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(6) > span').text().replace('Status: ','') 53 | const total_eps = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(7) > span').text().replace('Total Episode: ','') 54 | const duration = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(8) > span').text().replace('Durasi: ','') 55 | const release_date = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(9) > span').text().replace('Tanggal Rilis', '') 56 | const studio = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(10) > span').text().replace('Studio:', '') 57 | const genre = $('#venkonten > div.venser > div.fotoanime > div.infozin > div > p:nth-child(11) > span').text().replace('Genre: ','') 58 | const sinopsis = $('#venkonten > div.venser > div.fotoanime > div.sinopc > p:nth-child(1)').text() 59 | $('#venkonten > div.venser > div:nth-child(8) > ul > li > span > a').each(function(a, b) { 60 | const _eps = $(b).attr('href') 61 | const _title = $(b).text() 62 | eps.push({ _eps, _title }) 63 | }) 64 | const result = { 65 | title: title, 66 | japanese_title: japanese_title, 67 | score: score, 68 | producer: producer, 69 | type: type, 70 | status: status, 71 | total_eps: total_eps, 72 | duration: duration, 73 | release_date: release_date, 74 | studio: studio, 75 | genre: genre, 76 | sinopsis: sinopsis, 77 | thumb: thumb, 78 | episode: eps 79 | } 80 | resolve(result) 81 | }).catch(reject) 82 | }) 83 | } 84 | async function Getdownload(URL) { 85 | return new Promise((resolve, reject) => { 86 | axios.get(URL, {headers}).then(res => { 87 | const $ = cheerio.load(res.data) 88 | const low = $('#venkonten > div.venser > div.venutama > div.download > ul > li:nth-child(1) > a:nth-child(2)').attr('href') 89 | const medium = $('#venkonten > div.venser > div.venutama > div.download > ul > li:nth-child(2) > a:nth-child(2)').attr('href') 90 | const high = $('#venkonten > div.venser > div.venutama > div.download > ul > li:nth-child(3) > a:nth-child(2)').attr('href') 91 | const title = $('#venkonten > div.venser > div.venutama > h1').text() 92 | const thumb = $('#venkonten > div.venser > div.cukder > img').attr('src') 93 | const result = { 94 | title: title, 95 | thumb: thumb, 96 | high: high, 97 | medium: medium, 98 | low: low 99 | } 100 | resolve(result) 101 | }).catch(reject) 102 | }) 103 | } 104 | module.exports = { Search, getInfo, Getdownload } 105 | -------------------------------------------------------------------------------- /scraper/photooxy.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | async function photoXy_1(URL, text_1) { 5 | return new Promise((resolve, reject) => { 6 | axios.request({ 7 | url: URL, 8 | method: "POST", 9 | data: new URLSearchParams(Object.entries({ text_1: text_1, login: "OK"})), 10 | headers: { 11 | "content-type": "application/x-www-form-urlencoded", 12 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" 13 | } 14 | }).then(res => { 15 | const $ = cheerio.load(res.data) 16 | const img = 'https://photooxy.com'+$('#content-wrapper > section > div > div.col-md-9 > div.thumbnail > img').attr('src') 17 | resolve(img) 18 | }).catch(reject) 19 | }) 20 | } 21 | async function photoXy_2(URL, text_1, text_2) { 22 | return new Promise((resolve, reject) => { 23 | axios.request({ 24 | url: URL, 25 | method: "POST", 26 | data: new URLSearchParams(Object.entries({ text_1: text_1, text_2: text_2, login: "OK"})), 27 | headers: { 28 | "content-type": "application/x-www-form-urlencoded", 29 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" 30 | } 31 | }).then(res => { 32 | const $ = cheerio.load(res.data) 33 | const img = 'https://photooxy.com'+$('#content-wrapper > section > div > div.col-md-9 > div.thumbnail > img').attr('src') 34 | resolve(img) 35 | }).catch(reject) 36 | }) 37 | } 38 | 39 | module.exports = { photoXy_1, photoXy_2 } 40 | -------------------------------------------------------------------------------- /scraper/pinterest.js: -------------------------------------------------------------------------------- 1 | const cheerio = require('cheerio') 2 | const axios = require('axios') 3 | 4 | function pinterest(querry){ 5 | return new Promise(async(resolve,reject) => { 6 | axios.get('https://id.pinterest.com/search/pins/?autologin=true&q=' + querry, { 7 | headers: { 8 | "cookie" : "_auth=1; _b=\"AVna7S1p7l1C5I9u0+nR3YzijpvXOPc6d09SyCzO+DcwpersQH36SmGiYfymBKhZcGg=\"; _pinterest_sess=TWc9PSZHamJOZ0JobUFiSEpSN3Z4a2NsMk9wZ3gxL1NSc2k2NkFLaUw5bVY5cXR5alZHR0gxY2h2MVZDZlNQalNpUUJFRVR5L3NlYy9JZkthekp3bHo5bXFuaFZzVHJFMnkrR3lTbm56U3YvQXBBTW96VUgzVUhuK1Z4VURGKzczUi9hNHdDeTJ5Y2pBTmxhc2owZ2hkSGlDemtUSnYvVXh5dDNkaDN3TjZCTk8ycTdHRHVsOFg2b2NQWCtpOWxqeDNjNkk3cS85MkhhSklSb0hwTnZvZVFyZmJEUllwbG9UVnpCYVNTRzZxOXNJcmduOVc4aURtM3NtRFo3STlmWjJvSjlWTU5ITzg0VUg1NGhOTEZzME9SNFNhVWJRWjRJK3pGMFA4Q3UvcHBnWHdaYXZpa2FUNkx6Z3RNQjEzTFJEOHZoaHRvazc1c1UrYlRuUmdKcDg3ZEY4cjNtZlBLRTRBZjNYK0lPTXZJTzQ5dU8ybDdVS015bWJKT0tjTWYyRlBzclpiamdsNmtpeUZnRjlwVGJXUmdOMXdTUkFHRWloVjBMR0JlTE5YcmhxVHdoNzFHbDZ0YmFHZ1VLQXU1QnpkM1FqUTNMTnhYb3VKeDVGbnhNSkdkNXFSMXQybjRGL3pyZXRLR0ZTc0xHZ0JvbTJCNnAzQzE0cW1WTndIK0trY05HV1gxS09NRktadnFCSDR2YzBoWmRiUGZiWXFQNjcwWmZhaDZQRm1UbzNxc21pV1p5WDlabm1UWGQzanc1SGlrZXB1bDVDWXQvUis3elN2SVFDbm1DSVE5Z0d4YW1sa2hsSkZJb1h0MTFpck5BdDR0d0lZOW1Pa2RDVzNySWpXWmUwOUFhQmFSVUpaOFQ3WlhOQldNMkExeDIvMjZHeXdnNjdMYWdiQUhUSEFBUlhUVTdBMThRRmh1ekJMYWZ2YTJkNlg0cmFCdnU2WEpwcXlPOVZYcGNhNkZDd051S3lGZmo0eHV0ZE42NW8xRm5aRWpoQnNKNnNlSGFad1MzOHNkdWtER0xQTFN5Z3lmRERsZnZWWE5CZEJneVRlMDd2VmNPMjloK0g5eCswZUVJTS9CRkFweHc5RUh6K1JocGN6clc1JmZtL3JhRE1sc0NMTFlpMVErRGtPcllvTGdldz0=; _ir=0" 9 | } 10 | }).then(({ data }) => { 11 | const $ = cheerio.load(data) 12 | const result = []; 13 | const hasil = []; 14 | $('div > a').get().map(b => { 15 | const link = $(b).find('img').attr('src') 16 | result.push(link) 17 | }); 18 | result.forEach(v => { 19 | if(v == undefined) return 20 | hasil.push(v.replace(/236/g,'736')) 21 | }) 22 | hasil.shift(); 23 | resolve(hasil) 24 | }) 25 | }) 26 | } 27 | 28 | module.exports = pinterest -------------------------------------------------------------------------------- /scraper/pinterestdl.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | function pinterestdl(url) { 5 | return new Promise((resolve, reject) => { 6 | axios.request({ 7 | url: 'https://www.expertsphp.com/facebook-video-downloader.php', 8 | method: "POST", 9 | data: new URLSearchParams(Object.entries({url: url})), 10 | headers: { 11 | "content-type": "application/x-www-form-urlencoded", 12 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 13 | } 14 | }).then(res => { 15 | const $ = cheerio.load(res.data) 16 | const img = $('#showdata > div:nth-child(4) > table > tbody > tr:nth-child(2) > td:nth-child(1) > a').attr('href') 17 | const vid = $('#showdata > div:nth-child(4) > table > tbody > tr:nth-child(1) > td:nth-child(1) > a').attr('href') 18 | const result = { img, vid } 19 | if (typeof vid == 'undefined') return resolve({ result: img }) 20 | resolve({ result: vid }) 21 | }) 22 | }) 23 | } 24 | 25 | module.exports = pinterestdl 26 | 27 | -------------------------------------------------------------------------------- /scraper/pixiv.js: -------------------------------------------------------------------------------- 1 | const axios = require ('axios') 2 | 3 | function searchIlust(query) { 4 | return new Promise((resolve, reject) => { 5 | axios.get('https://api.lolicon.app/setu/v2?&size=regular&num=100&keyword='+query).then(res => { 6 | const result = res.data.data 7 | if (result.length < 1) { 8 | throw 'Hasil tidak di temukan!' 9 | } else { 10 | resolve(result) 11 | } 12 | }) 13 | }) 14 | } 15 | 16 | function pixivDownload(id, ext) { 17 | return new Promise((resolve, reject) => { 18 | const result = 'https://pixiv.cat/'+id+ext 19 | resolve(result) 20 | }) 21 | } 22 | 23 | module.exports = { searchIlust, pixivDownload } 24 | -------------------------------------------------------------------------------- /scraper/primbon.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | function artinama(nama) { 5 | return new Promise((resolve, reject) => { 6 | axios.get('http://www.primbon.com/arti_nama.php?nama1='+nama+'&proses=+Submit%21+').then(res => { 7 | const $ = cheerio.load(res.data) 8 | const r = $('#body').text(); 9 | const re = r.split('\n \n \n \n')[0] 10 | const result = re.trim() 11 | resolve(result) 12 | }) 13 | }) 14 | } 15 | 16 | function ramalanJodoh(nama, pasangan) { 17 | return new Promise((resolve, reject) => { 18 | axios.get('https://www.primbon.com/kecocokan_nama_pasangan.php?nama1='+nama+'&nama2='+pasangan+'&proses=+Submit%21+').then(res => { 19 | const $ = cheerio.load(res.data) 20 | const thumb = 'https://www.primbon.com/'+$('#body > img').attr('src') 21 | const isi = $('#body').text().split(pasangan)[1].replace('< Hitung Kembali','').split('\n')[0] 22 | const positif = isi.split('Sisi Negatif Anda: ')[0].replace('Sisi Positif Anda: ','') 23 | const negatif = isi.split('Sisi Negatif Anda: ')[1] 24 | const result = { 25 | thumb: thumb, 26 | positif: positif, 27 | negatif: negatif 28 | } 29 | resolve(result) 30 | }) 31 | 32 | }) 33 | } 34 | module.exports = { artinama, ramalanJodoh } 35 | -------------------------------------------------------------------------------- /scraper/savefrom.js: -------------------------------------------------------------------------------- 1 | const got = require('got'); 2 | const vm = require('vm') 3 | 4 | 5 | function savefrom(url) { 6 | return new Promise(async(resolve, reject) => { 7 | let req = await got('https://worker.sf-tools.com/savefrom.php',{ 8 | method: 'POST', 9 | headers: { 10 | 'content-type': 'application/x-www-form-urlencoded', 11 | origin: 'https://id.savefrom.net', 12 | referer: 'https://id.savefrom.net/', 13 | 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36' 14 | }, 15 | form: { 16 | sf_url: url, 17 | sf_submit: '', 18 | new: 2, 19 | lang: 'id', 20 | app: '', 21 | country: 'id', 22 | os: 'Windows', 23 | browser: 'Chrome', 24 | channel: ' main', 25 | 'sf-nomad': 1 26 | } 27 | }).text() 28 | const executeCode = '[]["filter"]["constructor"](b).call(a);' 29 | if (req.indexOf(executeCode) === -1) console.log(`${req}`) 30 | req = req.replace(executeCode, ` 31 | try { 32 | i++; 33 | if (i === 2) scriptResult = ${executeCode.split('.call')[0]}.toString(); 34 | else ( 35 | ${executeCode.replace(/;/, '')} 36 | ); 37 | } catch {} 38 | `) 39 | const context = { 40 | scriptResult: '', 41 | i: 0 42 | } 43 | vm.createContext(context) 44 | new vm.Script(req).runInContext(context) 45 | const json = JSON.parse(context.scriptResult.split('window.parent.sf.videoResult.show(')?.[1].split(');')?.[0]) 46 | resolve(json) 47 | }) 48 | } 49 | 50 | module.exports = { 51 | savefrom 52 | } 53 | -------------------------------------------------------------------------------- /scraper/savetik.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | const pickrandom = async(ext) => { 5 | return ext[Math.floor(Math.random() * ext.length)] 6 | } 7 | const getRandom = () => { 8 | return `${Math.floor(Math.random() * 284)}` 9 | } 10 | 11 | function savetik(URL) { 12 | return new Promise((resolve, reject) => { 13 | axios.request({ 14 | url: 'https://savetiknowm.org/', 15 | method: "POST", 16 | data: new URLSearchParams(Object.entries({ tiktok_url: URL })), 17 | headers: { 18 | "content-type": "application/x-www-form-urlencoded", 19 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 20 | } 21 | }).then(res => { 22 | const $ = cheerio.load(res.data) 23 | const result = { 24 | creator: { 25 | username: $('#tiktok-video-result > div.result-wrapper > div.result > div:nth-child(2) > div > a.username').text(), 26 | usernickname: $('#tiktok-video-result > div.result-wrapper > div.result > div:nth-child(2) > div > a.user-nickname').text(), 27 | desc: $('#tiktok-video-result > div.result-wrapper > div.result > div:nth-child(2) > p').text(), 28 | }, 29 | url: 'https://savetiknowm.org'+$('#tiktok-video-result > div.result-wrapper > div.download-buttons > a').attr('href') 30 | } 31 | console.log(result) 32 | resolve(result) 33 | }).catch(reject) 34 | }) 35 | } 36 | 37 | function savetikGetVideosUrl() { 38 | return new Promise(async(resolve, reject) => { 39 | const randomPage = getRandom() 40 | const result = [] 41 | axios.request({ 42 | url: 'https://savetiknowm.org/videos', 43 | method: 'GET', 44 | headers: { 45 | "content-type": "application/x-www-form-urlencoded", 46 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 47 | } 48 | }).then(res => { 49 | const ch = cheerio.load(res.data) 50 | ch('body > div.videos-grid > div').each(function(a, b) { 51 | const thumb = ch(b).find('a > div').attr('data-bg') 52 | const creator = ch(b).find('a').attr('href') 53 | const url1 = thumb.replace('/static/nowatermark/previews/', '').replace('.jpg', '') 54 | const url = creator+'/'+url1 55 | result.push({ thumb, creator, url }) 56 | resolve(result) 57 | }) 58 | }).catch(reject) 59 | }) 60 | } 61 | 62 | function savetikVideo() { 63 | return new Promise(async(resolve, reject) => { 64 | const Url = await savetikGetVideosUrl() 65 | const getUrl = await pickrandom(Url) 66 | const getURL = 'https://savetiknowm.org'+getUrl.url 67 | axios.request({ 68 | url: getURL, 69 | method: 'GET', 70 | headers: { 71 | "content-type": "application/x-www-form-urlencoded", 72 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" 73 | } 74 | }).then(res => { 75 | const $ = cheerio.load(res.data) 76 | const result = { 77 | creator: { 78 | profile: 'https://savetiknowm.org'+$('#tiktok-video-result > div > div.result > div:nth-child(2) > div.profile > img').attr('src'), 79 | username: $('#tiktok-video-result > div > div.result > div:nth-child(2) > div.profile > a.username').text(), 80 | nickname: $('#tiktok-video-result > div > div.result > div:nth-child(2) > div.profile > a.user-nickname').text(), 81 | }, 82 | url_dl: $('#tiktok-video-result > div > div.download-buttons > a').attr('href'), 83 | desc: $('#tiktok-video-result > div > div.result > div:nth-child(2) > p').text(), 84 | likes: $('#tiktok-video-result > div > div.result > div:nth-child(2) > ul > li > span').text() 85 | } 86 | resolve(result) 87 | }) 88 | }) 89 | } 90 | 91 | module.exports = { savetik, savetikVideo } 92 | -------------------------------------------------------------------------------- /scraper/scdl.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | async function scdl(url) { 5 | return new Promise(async (resolve, reject) => { 6 | await axios.request({ 7 | url: "https://www.klickaud.co/download.php", 8 | method: "POST", 9 | data: new URLSearchParams(Object.entries({'value': url, 'afae4540b697beca72538dccafd46ea2ce84bec29b359a83751f62fc662d908a' : '2106439ef3318091a603bfb1623e0774a6db38ca6579dae63bcbb57253d2199e'})), 10 | headers: { 11 | "content-type": "application/x-www-form-urlencoded", 12 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" 13 | } 14 | }).then(res => { 15 | const $ = cheerio.load(res.data) 16 | const result = { 17 | link: $('#dlMP3').attr('onclick').split(`downloadFile('`)[1].split(`',`)[0], 18 | thumb: $('#header > div > div > div.col-lg-8 > div > table > tbody > tr > td:nth-child(1) > img').attr('src'), 19 | title: $('#header > div > div > div.col-lg-8 > div > table > tbody > tr > td:nth-child(2)').text() 20 | 21 | } 22 | resolve(result) 23 | }).catch(reject) 24 | }) 25 | } 26 | 27 | module.exports = scdl 28 | -------------------------------------------------------------------------------- /scraper/solidfiles.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | function sfiledl(URL) { 5 | return new Promise((resolve, reject) => { 6 | axios.request({ 7 | url: URL, 8 | method: "GET", 9 | headers: { 10 | "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36", 11 | "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" 12 | } 13 | }).then(res => { 14 | const $ = cheerio.load(res.data) 15 | const token = $('#content > div > div.middle > div.right > article:nth-child(1) > section:nth-child(3) > div.buttons > form > input[type=hidden]:nth-child(1)').attr('value') 16 | const title = $('#content > div > div.middle > div.right > article:nth-child(1) > section.box-content.meta > h1').text().trim() 17 | const _size = $('#content > div > div.middle > div.right > article:nth-child(1) > section.box-content.meta > p').text().trim() 18 | const size_ = _size.split('-') 19 | const size = size_[0] 20 | axios({ 21 | url: URL+'/dl', 22 | method: "POST", 23 | data: new URLSearchParams(Object.entries({csrfmiddlewaretoken: token, referrer: URL})), 24 | headers: { 25 | "User-Agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36", 26 | "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" 27 | } 28 | }).then(respon => { 29 | const ch = cheerio.load(respon.data) 30 | const url = ch('#content > div > div.middle > div.right > article:nth-child(1) > section > p > a').attr('href') 31 | const result = { 32 | title: title, 33 | size: size, 34 | url: url 35 | } 36 | resolve(result) 37 | }) 38 | }) 39 | }) 40 | } 41 | module.exports = sfiledl -------------------------------------------------------------------------------- /scraper/spotify.js: -------------------------------------------------------------------------------- 1 | const Spotify = require('spotifydl-core').default 2 | const fs = require('fs') 3 | 4 | //Use public key 5 | const spotifydl = new Spotify({ 6 | clientId: 'acc6302297e040aeb6e4ac1fbdfd62c3', 7 | clientSecret: '0e8439a1280a43aba9a5bc0a16f3f009' 8 | }) 9 | 10 | module.exports = { spotifydl } 11 | -------------------------------------------------------------------------------- /scraper/stickerpack.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | function stickerSearch(query) { 5 | return new Promise((resolve, reject) => { 6 | axios.get('https://getstickerpack.com/stickers?query='+query).then(res => { 7 | const $ = cheerio.load(res.data) 8 | const result = [] 9 | const main = $('#stickerPacks > div > div:nth-child(3) > div > a') 10 | 11 | main.each( function() { 12 | const url = $(this).attr('href') 13 | const title = $(this).find('div > span').text() 14 | result.push({ title, url }) 15 | }) 16 | resolve(result) 17 | }).catch(reject) 18 | }) 19 | } 20 | 21 | function stickerDl(url) { 22 | return new Promise((resolve, reject) => { 23 | axios.get(url).then(res => { 24 | const $ = cheerio.load(res.data) 25 | const link = [] 26 | const main = $('#stickerPack > div > div.row > div > img') 27 | 28 | main.each( function() { 29 | const result_link = $(this).attr('src').split('&d=')[0] 30 | const result_thumb = $('#intro > div > div > img').attr('src') 31 | const result_title = $('#intro > div > div > h1').text() 32 | link.push(result_link) 33 | const result = { 34 | title: result_title, 35 | thumb: result_thumb, 36 | result: link 37 | } 38 | resolve(result) 39 | }) 40 | }).catch(resolve) 41 | }) 42 | } 43 | 44 | module.exports = { stickerSearch, stickerDl } -------------------------------------------------------------------------------- /scraper/tebakgambar.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | async function _tebakgambar() { 5 | return new Promise((resolve, reject) => { 6 | axios.get('https://jawabantebakgambar.net/all-answers/').then(res => { 7 | const $ = cheerio.load(res.data) 8 | const result = [] 9 | $('#images > li > a').each(function(a, b) { 10 | const img = 'https://jawabantebakgambar.net'+$(b).find('img').attr('data-src') 11 | const jawaban = $(b).find('img').attr('alt').replace('Jawaban ', '') 12 | result.push({ img, jawaban }) 13 | }) 14 | resolve(result) 15 | }).catch(reject) 16 | }) 17 | } 18 | async function tebakgambar() { 19 | return new Promise(async(resolve, reject) => { 20 | let ctrl = await _tebakgambar() 21 | let ct = await ctrl[Math.floor(Math.random() * ctrl.length)] 22 | resolve(ct) 23 | }) 24 | } 25 | 26 | 27 | module.exports = tebakgambar 28 | -------------------------------------------------------------------------------- /scraper/textpro.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const FormData = require('form-data'); 3 | const { load } = require('cheerio'); 4 | const fetch = require('node-fetch') 5 | 6 | 7 | //Copy disini punya Arul:v 8 | function textpro(url, text = []) { 9 | return new Promise(async(resolve, reject) => { 10 | const _token = await axios.get(url) 11 | const cookie = _token.headers['set-cookie'].toString() 12 | const $ = load(_token.data) 13 | const token = $('#token').attr('value') 14 | const build_server = $('#build_server').attr('value') 15 | const build_server_id = $('#build_server_id').attr('value') 16 | const form = new FormData() 17 | for (let texts of text) { 18 | form.append("text[]", texts); 19 | } 20 | form.append('submit', 'Go') 21 | form.append('token', token) 22 | form.append('build_server', build_server) 23 | form.append('build_server_id', build_server_id) 24 | let body = await form.getBuffer() 25 | const geturl2 = await fetch(url, { 26 | method: "POST", 27 | headers: { 28 | Accept: "/", 29 | "Accept-Language": "en-US,en;q=0.9", 30 | "User-Agent": "GoogleBot", 31 | Cookie: cookie, 32 | ...form.getHeaders(), 33 | }, 34 | body: form.getBuffer(), 35 | }) 36 | const caritoken2 = await geturl2.text(); 37 | const $$ = load(caritoken2) 38 | const form2 = $$('#form_value').eq(0).text() 39 | let form_ = JSON.parse(form2) 40 | const json = await axios.request({ 41 | url: "https://textpro.me/effect/create-image", 42 | method: "POST", 43 | data: new URLSearchParams(Object.entries( form_ )), 44 | headers: { 45 | Accept: "/", 46 | "Accept-Language": "en-US,en;q=0.9", 47 | "User-Agent": "GoogleBot", 48 | Cookie: cookie, 49 | } 50 | }) 51 | resolve("https://textpro.me/" + json.data.fullsize_image) 52 | }) 53 | } 54 | 55 | module.exports = { 56 | textpro 57 | } -------------------------------------------------------------------------------- /scraper/tiktok.js: -------------------------------------------------------------------------------- 1 | const tiktok_scrape = require('tiktok-scraper') 2 | const axios = require('axios') 3 | const cheerio = require('cheerio') 4 | const fetch = require('node-fetch') 5 | const { musicaldown } = require('./musicaldown') 6 | 7 | const headers = { 8 | "user-agent": "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36", 9 | "referer": "https://www.tiktok.com/", 10 | "cookie": "tt_webid_v2=6976572065375626290; ttwid=1|WphZXEIq_oTph3Rcy7Ybj7o2YmzOAhfdWm23L35UL7Q|1634565622|26309b01156f00c630959974d6ff872e1c6b5d6f6275cbe3aac6738e4f6d50f5; tt_webid=6976572065375626290; tt_csrf_token=KOCPsah2eI6vhK6-F_73Uben; cmpl_token=AgQQAPOgF-RMpbF7dxi_PJ07-rBaZ9U_nbArYPwp_A" 11 | } 12 | 13 | async function noWM (Url) { 14 | return new Promise (async (resolve, reject) => { 15 | await axios.request({ 16 | url: "https://ttdownloader.com/", 17 | method: "GET", 18 | headers: { 19 | "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", 20 | "accept-language": "en-US,en;q=0.9,id;q=0.8", 21 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", 22 | "cookie": "_ga=GA1.2.1240046717.1620835673; PHPSESSID=i14curq5t8omcljj1hlle52762; popCookie=1; _gid=GA1.2.1936694796.1623913934" 23 | } 24 | }).then(respon => { 25 | const $ = cheerio.load(respon.data) 26 | const token = $('#token').attr('value') 27 | axios({ 28 | url: "https://ttdownloader.com/req/", 29 | method: "POST", 30 | data: new URLSearchParams(Object.entries({url: Url, format: "", token: token})), 31 | headers: { 32 | "accept": "/", 33 | "accept-language": "en-US,en;q=0.9,id;q=0.8", 34 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 35 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", 36 | "cookie": "_ga=GA1.2.1240046717.1620835673; PHPSESSID=i14curq5t8omcljj1hlle52762; popCookie=1; _gid=GA1.2.1936694796.1623913934" 37 | } 38 | }).then(res => { 39 | const ch = cheerio.load(res.data) 40 | const result = {} 41 | result.videoUrl = ch('#results-list > div:nth-child(3)').find('div.download > a').attr('href') 42 | result.nowatermark = ch('#results-list > div:nth-child(2)').find('div.download > a').attr('href') 43 | result.music = ch('#results-list > div:nth-child(4)').find('div.download > a').attr('href') 44 | resolve(result) 45 | }).catch(reject) 46 | }).catch(reject) 47 | }) 48 | } 49 | async function tiktok(url) { 50 | var fullUrl = await fetch(url) 51 | const tiktok = await tiktok_scrape.getVideoMeta(fullUrl.url, {headers}) 52 | const ingfo = tiktok.collector[0] 53 | const tiktok_dl = await musicaldown(url) 54 | const titoko = `https://tyz-api.herokuapp.com/downloader/tiktoknowm?link=${url}` 55 | const tikitoko = `https://tyz-api.herokuapp.com/converter/tomp3?url=https://tyz-api.herokuapp.com/downloader/tiktoknowm?link=${url}` 56 | const obj = { 57 | videoInfo: { 58 | id: ingfo.id, 59 | desc: ingfo.text, 60 | like: ingfo.diggCount, 61 | share: ingfo.shareCount, 62 | play: ingfo.playCount, 63 | comment: ingfo.commentCount, 64 | mentions: ingfo.mentions, 65 | hashtags: ingfo.hashtags, 66 | }, 67 | musicMeta: { 68 | musicId: ingfo.musicMeta.musicId, 69 | musicName: ingfo.musicMeta.musicName, 70 | musicAuthor: ingfo.musicMeta.musicAuthor, 71 | duration: ingfo.musicMeta.duration, 72 | coverThumb: ingfo.musicMeta.coverThumb, 73 | }, 74 | authorMeta: { 75 | id: ingfo.authorMeta.id, 76 | name: ingfo.authorMeta.name, 77 | nickName: ingfo.authorMeta.nickName, 78 | following: ingfo.authorMeta.following, 79 | heart: ingfo.authorMeta.heart, 80 | bio: ingfo.authorMeta.signature, 81 | avatar: ingfo.authorMeta.avatar, 82 | }, 83 | metaData: { 84 | nowatermark: titoko, 85 | audio: tikitoko, 86 | video_original: tiktok_dl.video_original, 87 | audio_original: tiktok_dl.audio_original, 88 | preview: tiktok_dl.preview, 89 | thumbnail: ingfo.imageUrl 90 | } 91 | } 92 | return obj 93 | } 94 | 95 | module.exports = { noWM } 96 | -------------------------------------------------------------------------------- /scraper/tiktok_search.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios') 2 | const cheerio = require('cheerio') 3 | 4 | const pickrandom = async(ext) => { 5 | return ext[Math.floor(Math.random() * ext.length)] 6 | } 7 | 8 | function ttSearch (query) { 9 | return new Promise((resolve, reject) => { 10 | axios.get('https://brainans.com/search?query='+query).then(res => { 11 | const $ = cheerio.load(res.data) 12 | const result = [] 13 | const main = $('#search-container > div') 14 | main.each( function() { 15 | const user_url = 'https://brainans.com'+$(this).find('div.content__text > a').attr('href') 16 | const user = $(this).find('div.content__text > a').text() 17 | const username = $(this).find('div.content__text > p').text() 18 | result.push({ user, username, user_url }) 19 | const hasil = { 20 | result: result 21 | } 22 | resolve(hasil) 23 | }) 24 | }).catch(reject) 25 | }) 26 | } 27 | async function ttUser (url) { 28 | return new Promise(async(resolve, reject) => { 29 | axios.get(url).then(res => { 30 | const $ = cheerio.load(res.data) 31 | const result = [] 32 | const main = $('#videos_container > div > div.content__list.grid.infinite_scroll.cards > div') 33 | main.each( function() { 34 | const idVid = 'https://brainans.com'+$(this).find('a').attr('href') 35 | const upload_at = $(this).find('span').text() 36 | const desc = $(this).find('p').text() 37 | const user = $('#user-page > div.user.container > div > div.col-md-4.col-8.my-3 > div > a > h1').text() 38 | const username = $('#user-page > div.user.container > div > div.col-md-4.col-8.my-3 > div > h4').text() 39 | const video_count = $('#user-page > div.user.container > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(1) > strong').text() 40 | const followers = $('#user-page > div.user.container > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(2) > strong').text() 41 | const following = $('#user-page > div.user.container > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(3) > strong').text() 42 | const likes = $('#user-page > div.user.container > div > div.col-md-4.col-8.my-3 > ul > li:nth-child(4) > strong').text() 43 | const bio = $('#user-page > div.user.container > div > div.col-md-5.my-3 > div').text() 44 | const thumb = $('#user-page > div.user.container > div > div.col-md-3.col-4.my-3 > div').attr('style').replace("background-image: url('", '').replace("');", '') 45 | result.push({ idVid, upload_at, desc }) 46 | const hasil = { 47 | user: user, 48 | username: username, 49 | video_count: video_count, 50 | followers: followers, 51 | following: following, 52 | likes: likes, 53 | bio: bio, 54 | thumb: thumb, 55 | video: result 56 | } 57 | resolve(hasil) 58 | }) 59 | }).catch(reject) 60 | }) 61 | } 62 | function getVid (url) { 63 | return new Promise((resolve, reject) => { 64 | axios.get(url).then(res => { 65 | const $ = cheerio.load(res.data) 66 | const obj = {} 67 | obj.link = $('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.main__image-container > div > video').attr('src') 68 | obj.like = $('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.content__btns.d-flex > div:nth-child(1) > span').text() 69 | obj.comment = $('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.content__btns.d-flex > div:nth-child(2) > span').text() 70 | obj.share = $('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.content__btns.d-flex > div:nth-child(3) > span').text() 71 | resolve(obj) 72 | }).catch(reject) 73 | }) 74 | } 75 | async function randomTiktok(query) { 76 | return new Promise( async(resolve, reject) => { 77 | await axios.get('https://brainans.com/search?query='+query).then(response => { 78 | const $ = cheerio.load(response.data) 79 | const User = $('#search-container > div:nth-child(1) > div.content__text > a').attr('href') 80 | axios.get('https://brainans.com/'+User).then(respon => { 81 | const soup = cheerio.load(respon.data) 82 | const Vidlink = [] 83 | const main = soup('#videos_container > div > div.content__list.grid.infinite_scroll.cards > div > div > a') 84 | main.each( function() { 85 | const Vlink = 'https://brainans.com/'+soup(this).attr('href') 86 | Vidlink.push(Vlink) 87 | }) 88 | pickrandom(Vidlink).then(res => { 89 | axios.get(res).then(resp => { 90 | const ch = cheerio.load(resp.data) 91 | const result = { 92 | username: ch('#card-page > div > div.row > div > div > div > div > div.main__user-desc.align-self-center.ml-2 > a').text(), 93 | caption: ch('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.main__list').text(), 94 | likes: ch('#card-page > div > div.row > div > div > div.main__info.mb-4 > div > div:nth-child(1) > span').text(), 95 | comment: ch('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.content__btns.d-flex > div:nth-child(2) > span').text(), 96 | share: ch('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.content__btns.d-flex > div:nth-child(3) > span').text(), 97 | video: ch('#card-page > div > div.row > div > div > div.main__info.mb-4 > div.main__image-container > div > video').attr('src') 98 | } 99 | resolve(result) 100 | }) 101 | }).catch(resolve) 102 | }).catch(resolve) 103 | }).catch(resolve) 104 | }) 105 | } 106 | async function tiktokHastag(query) { 107 | return new Promise((resolve, reject) => { 108 | axios.get('https://tiktokder.com/hashtag/'+query).then(resp => { 109 | const $ = cheerio.load(resp.data) 110 | const Vidlink = [] 111 | const main = $('body > div.videos-grid > div > a') 112 | main.each(function() { 113 | const URL = 'https://tiktokder.com'+$(this).attr('href') 114 | Vidlink.push(URL) 115 | }) 116 | pickrandom(Vidlink).then(res => { 117 | axios.get(res).then(respon => { 118 | const ch = cheerio.load(respon.data) 119 | resolve({ 120 | url: ch('#tiktok-video-result > div > div.download-buttons > div > a').attr('href').replace('https://savetiknowm.org/?tiktok_url=', ''), 121 | usernameNick: ch('#tiktok-video-result > div > div.result > div:nth-child(2) > div.profile > a.user-nickname').text(), 122 | username: ch('#tiktok-video-result > div > div.result > div:nth-child(2) > div.profile > a.username').text(), 123 | description: ch('#tiktok-video-result > div > div.result > div:nth-child(2) > p').text(), 124 | nowm: 'https://tyz-api.herokuapp.com/downloader/tiktoknowm?link='+ch('#tiktok-video-result > div > div.download-buttons > div > a').attr('href').replace('https://savetiknowm.org/?tiktok_url=', ''), 125 | original: ch('#tiktok-video-result > div > div.download-buttons > a').attr('href') 126 | }) 127 | }) 128 | }) 129 | }).catch(reject) 130 | }) 131 | } 132 | // Yang lain nya bonus aja:D 133 | module.exports = randomTiktok 134 | module.exports = tiktokHastag 135 | -------------------------------------------------------------------------------- /scraper/wallpaper.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const cheerio = require('cheerio'); 3 | 4 | function alphacoders(query) { 5 | return new Promise((resolve, reject) => { 6 | axios.get('https://wall.alphacoders.com/search.php?search='+query).then(res => { 7 | const $ = cheerio.load(res.data) 8 | const result = [] 9 | $('div.boxgrid > a > picture').each(function(a, b) { 10 | result.push($(b).find('img').attr('src').replace('thumbbig-', '')) 11 | }) 12 | resolve(result) 13 | }).catch(reject) 14 | }) 15 | } 16 | 17 | function wallpaperflare(query) { 18 | return new Promise((resolve, reject) => { 19 | axios.get('https://www.wallpaperflare.com/search?wallpaper='+ query,{ 20 | headers: { 21 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", 22 | "cookie": "_ga=GA1.2.863074474.1624987429; _gid=GA1.2.857771494.1624987429; __gads=ID=84d12a6ae82d0a63-2242b0820eca0058:T=1624987427:RT=1624987427:S=ALNI_MaJYaH0-_xRbokdDkQ0B49vSYgYcQ" 23 | } 24 | }) 25 | .then(res => { 26 | const $ = cheerio.load(res.data) 27 | const result = []; 28 | $('#gallery > li > figure > a').each(function(a, b) { 29 | result.push($(b).find('img').attr('data-src')) 30 | }) 31 | resolve(result) 32 | }).catch(reject) 33 | }) 34 | } 35 | 36 | function wallpaperscraft(query) { 37 | return new Promise((resolve, reject) => { 38 | axios.get('https://wallpaperscraft.com/search/?query='+query).then(res => { 39 | const $ = cheerio.load(res.data) 40 | const result = []; 41 | $('span.wallpapers__canvas').each(function(a, b) { 42 | result.push($(b).find('img').attr('src')) 43 | }) 44 | resolve(result) 45 | }).catch(reject) 46 | }) 47 | } 48 | 49 | 50 | function wallpapercave(query) { 51 | return new Promise((resolve, reject) => { 52 | axios.get('https://wallpapercave.com/search?q='+query).then(res => { 53 | const $ = cheerio.load(res.data) 54 | const result = []; 55 | $('div.imgrow > a').each(function(a, b) { 56 | if (!$(b).find('img').attr('src').includes('.gif')) { 57 | result.push('https://wallpapercave.com/' + $(b).find('img').attr('src').replace('fuwp', 'uwp')) 58 | } 59 | }) 60 | resolve(result) 61 | }).catch(reject) 62 | }) 63 | } 64 | 65 | module.exports = { wallpapercave, wallpaperscraft, wallpaperflare, alphacoders } 66 | -------------------------------------------------------------------------------- /scraper/ytdl.js: -------------------------------------------------------------------------------- 1 | let fetch = require('node-fetch') 2 | let { JSDOM } = require('jsdom') 3 | 4 | function post(url, formdata) { 5 | return fetch(url, { 6 | method: 'POST', 7 | headers: { 8 | accept: "*/*", 9 | 'accept-language': "en-US,en;q=0.9", 10 | 'content-type': "application/x-www-form-urlencoded; charset=UTF-8" 11 | }, 12 | body: new URLSearchParams(Object.entries(formdata)) 13 | }) 14 | } 15 | const ytIdRegex = /(?:http(?:s|):\/\/|)(?:(?:www\.|)youtube(?:\-nocookie|)\.com\/(?:shorts\/)?(?:watch\?.*(?:|\&)v=|embed\/|v\/)|youtu\.be\/)([-_0-9A-Za-z]{11})/ 16 | 17 | /** 18 | * Download YouTube Video via y2mate 19 | * @param {String} url YouTube Video URL 20 | * @param {String} quality (avaiable: `144p`, `240p`, `360p`, `480p`, `720p`, `1080p`, `1440p`, `2160p`) 21 | * @param {String} type (avaiable: `mp3`, `mp4`) 22 | * @param {String} bitrate (avaiable for video: `144`, `240`, `360`, `480`, `720`, `1080`, `1440`, `2160`) 23 | * (avaiable for audio: `128`) 24 | * @param {String} server (avaiable: `id4`, `en60`, `en61`, `en68`) 25 | */ 26 | async function yt(url, quality, type, bitrate, server = 'en68') { 27 | if (!ytIdRegex.test(url)) throw 'Invalid URL' 28 | let ytId = ytIdRegex.exec(url) 29 | url = 'https://youtu.be/' + ytId[1] 30 | let res = await post(`https://www.y2mate.com/mates/${server}/analyze/ajax`, { 31 | url, 32 | q_auto: 0, 33 | ajax: 1 34 | }) 35 | let json = await res.json() 36 | let { document } = (new JSDOM(json.result)).window 37 | let tables = document.querySelectorAll('table') 38 | let table = tables[{ mp4: 0, mp3: 1 }[type] || 0] 39 | let list 40 | switch (type) { 41 | case 'mp4': 42 | list = Object.fromEntries([...table.querySelectorAll('td > a[href="#"]')].filter(v => !/\.3gp/.test(v.innerHTML)).map(v => [v.innerHTML.match(/.*?(?=\()/)[0].trim(), v.parentElement.nextSibling.nextSibling.innerHTML])) 43 | break 44 | case 'mp3': 45 | list = { 46 | '128kbps': table.querySelector('td > a[href="#"]').parentElement.nextSibling.nextSibling.innerHTML 47 | } 48 | break 49 | default: 50 | list = {} 51 | } 52 | let filesize = list[quality] 53 | let id = /var k__id = "(.*?)"/.exec(document.body.innerHTML) || ['', ''] 54 | let thumb = document.querySelector('img').src 55 | let title = document.querySelector('b').innerHTML 56 | let res2 = await post(`https://www.y2mate.com/mates/${server}/convert`, { 57 | type: 'youtube', 58 | _id: id[1], 59 | v_id: ytId[1], 60 | ajax: '1', 61 | token: '', 62 | ftype: type, 63 | fquality: bitrate 64 | }) 65 | let json2 = await res2.json() 66 | let KB = parseFloat(filesize) * (1000 * /MB$/.test(filesize)) 67 | return { 68 | dl_link: / { 7 | try { 8 | axios.get(Url).then(res => { 9 | let result = {} 10 | const $ = cheerio.load(res.data) 11 | let text = $('#lrbox').find('div.center > div:nth-child(1)').text().split('\n') 12 | result.title = (text[3] ||'').trim() 13 | result.size = ((text[4] || '').replace('Size:', '') || '').trim() 14 | result.upload_date = ((text[5] || '').replace('Uploaded:', '') || '').trim() 15 | $('script').each((i, e) => { 16 | let sc = $(e).html().search(/dlbutton/g) 17 | if (sc >= 0) { 18 | let divider = $(e).html().split(';')[0] 19 | let decrypt = divider.split("document.getElementById('dlbutton').href =")[1] 20 | console.log(decrypt) 21 | let _url 22 | if (decrypt) { 23 | _url = url.parse(Url).hostname + eval(decrypt) 24 | _url = _url.startsWith('http') ? _url : 'http://' + _url 25 | const url_final = 'https://tyz-api.herokuapp.com/converter/toFile?url='+_url 26 | result.url = url_final 27 | } 28 | } 29 | }) 30 | resolve(result) 31 | }) 32 | } catch(e) { 33 | console.log(e) 34 | } 35 | }) 36 | } 37 | module.exports = { zippy } 38 | -------------------------------------------------------------------------------- /server/anime.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | const axios = require('axios') 4 | const fetch = require('node-fetch') 5 | const fs = require('fs') 6 | const { getBuffer } = require('../lib/function') 7 | const { dl } = require('../scraper/aiovideodl') 8 | 9 | const mynimeku = require('../scraper/mynime') 10 | 11 | 12 | async function sleep(ms) { 13 | return new Promise(resolve => setTimeout(resolve, ms)); 14 | } 15 | 16 | 17 | router.get('/mynimekuSearch', async(req, res) => { 18 | var query = req.query.query 19 | if (!query) return res.json({ message: 'masukan parameter query' }) 20 | var result = await mynimeku.Search(query) 21 | if (result > 1) return res.json({ message: 'anime not found!' }) 22 | res.json(result) 23 | }) 24 | 25 | router.get('/mynimekuDetail', async(req, res) => { 26 | var link = req.query.link 27 | if (!link) return res.json({ message: 'masukan parameter Link' }) 28 | var result = await mynimeku.animeDetail(link) 29 | res.json(result) 30 | }) 31 | 32 | router.get('/mynimekuDownload', async(req, res) => { 33 | var link = req.query.link 34 | if (!link) return res.json({ message: 'masukan parameter Link' }) 35 | var result = await mynimeku.downloadEps(link) 36 | res.json(result) 37 | }) 38 | 39 | router.get('/storyanime', async(req, res) => { 40 | let res_ = await fetch('https://raw.githubusercontent.com/Arya-was/endak-tau/main/storyanime.json') 41 | let data = await res_.json() 42 | let json = data[Math.floor(Math.random() * data.length)] 43 | var dl_link = await dl(json) 44 | const buffer = await getBuffer(dl_link.medias[0].url) 45 | await fs.writeFileSync(__path +`/tmp/audio.mp4`, buffer) 46 | await res.sendFile(__path +`/tmp/audio.mp4`) 47 | }) 48 | 49 | 50 | module.exports = router 51 | -------------------------------------------------------------------------------- /server/convert.js: -------------------------------------------------------------------------------- 1 | __path = process.cwd() 2 | const express = require("express"); 3 | const fs = require('fs'); 4 | const fetch = require('node-fetch') 5 | const FileType = require('file-type') 6 | const router = express.Router() 7 | const { ffmpeg, toAudio } = require('../lib/converter') 8 | 9 | //Get Buffer 10 | async function getFile(path) { 11 | let res 12 | let data = Buffer.isBuffer(path) ? path : /^data:.*?\/.*?;base64,/i.test(path) ? Buffer.from(path.split`,`[1], 'base64') : /^https?:\/\//.test(path) ? await (res = await fetch(path)).buffer() : fs.existsSync(path) ? fs.readFileSync(path) : typeof path === 'string' ? path : Buffer.alloc(0) 13 | if (!Buffer.isBuffer(data)) throw new TypeError('Result is not a buffer') 14 | let type = await FileType.fromBuffer(data) || { 15 | mime: 'application/octet-stream', 16 | ext: '.bin' 17 | } 18 | 19 | return { 20 | res, 21 | ...type, 22 | data 23 | } 24 | } 25 | 26 | /** 27 | * Image to Webp 28 | * @param {String} url Image/Video URL 29 | */ 30 | async function sticker(url) { 31 | if (url) { 32 | let res = await fetch(url) 33 | if (res.status !== 200) throw await res.text() 34 | img = await res.buffer() 35 | } 36 | return await ffmpeg(img, [ 37 | '-vf', 'scale=512:512:flags=lanczos:force_original_aspect_ratio=decrease,format=rgba,pad=512:512:(ow-iw)/2:(oh-ih)/2:color=#00000000,setsar=1' 38 | ], 'jpeg', 'webp') 39 | } 40 | 41 | router.get('/towebp', async(req, res) => { 42 | var url = req.query.url 43 | var packname = req.query.packname 44 | var creator = req.query.creator 45 | var stc = await sticker(url) 46 | await fs.writeFileSync(__path + '/tmp/stc.webp', stc) 47 | await res.sendFile(__path + '/tmp/stc.webp') 48 | }) 49 | router.get('/tomp3', async(req, res) => { 50 | var url = req.query.url 51 | const Buffer = await fetch(url) 52 | const getBuffer = await Buffer.buffer() 53 | let audio = await toAudio(getBuffer, 'mp4') 54 | await fs.writeFileSync(__path + '/tmp/audio.mp3', audio) 55 | await res.sendFile(__path + '/tmp/audio.mp3') 56 | }) 57 | router.get('/toFile', async(req, res) => { 58 | var url = req.query.url 59 | const buffer = await getFile(url) 60 | fs.writeFileSync(__path+ `/tmp/temp.${buffer.ext}`, buffer.data) 61 | res.sendFile(__path+ `/tmp/temp.${buffer.ext}`) 62 | }) 63 | 64 | //Hilih Generator 65 | router.get('/hilih', async(req, res) => { 66 | var kata = req.query.msg 67 | if(!kata) return res.json({ message: `Masukan Parameter msg` }) 68 | const lower = /[aiueo]/g 69 | const upper = /[AIUEO]/g 70 | const good = kata.replace(lower, 'i').replace(upper, 'I') 71 | res.json({ status: 200, message: good }) 72 | }) 73 | 74 | module.exports = router 75 | -------------------------------------------------------------------------------- /server/downloader.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | const hxz = require('hxz-api') 4 | const yts = require('yt-search') 5 | const axios = require('axios') 6 | __path = process.cwd() 7 | const fs = require('fs') 8 | const { getBuffer } = require('../lib/function') 9 | 10 | //scraper 11 | const { mediafireDl, pinterestdl, scdl, sfiledl, savetik } = require('../scraper/index') 12 | const { musicaldown } = require('../scraper/musicaldown') 13 | const { stickerDl } = require('../scraper/stickerpack') 14 | const { dl } = require('../scraper/aiovideodl') 15 | const { spotifydl } = require('../scraper/spotify') 16 | const { jooxdl, joox } = require('../scraper/joox') 17 | const { pixivDownload } = require('../scraper/pixiv') 18 | const { igStory, igStalk, igDownload } = require('../scraper/igdl') 19 | const { ytv, yta } = require('../scraper/ytdl') 20 | const { savefrom } = require('../scraper/savefrom') 21 | const zipi = require('../scraper/zippy') 22 | 23 | async function shorts(url) { 24 | const res = await axios.get('https://tinyurl.com/api-create.php?url='+url) 25 | return res.data 26 | } 27 | 28 | 29 | router.get('/igdl', async(req, res) => { 30 | var link = req.query.link 31 | if (!link) return res.json({ message: 'masukan parameter Link' }) 32 | var hasil = await savefrom(link) 33 | try { 34 | res.json(hasil) 35 | } catch(err) { 36 | console.log(err) 37 | res.json({ message: 'Ups, error' }) 38 | } 39 | }) 40 | router.get('/igStory', async(req, res) => { 41 | var username = req.query.username 42 | if (!username) return res.json({ message: 'masukan parameter username' }) 43 | var hasil = await igStory(username) 44 | try { 45 | res.json(hasil) 46 | } catch(err) { 47 | console.log(err) 48 | res.json({ message: 'Ups, error' }) 49 | } 50 | }) 51 | router.get('/mediafireDl', async(req, res) => { 52 | var link = req.query.link 53 | if (!link) return res.json({ message: 'masukan parameter Link' }) 54 | var hasil = await mediafireDl(link) 55 | try { 56 | res.json(hasil) 57 | } catch(err) { 58 | console.log(err) 59 | res.json({ message: 'Ups, error' }) 60 | } 61 | }) 62 | router.get('/zippyShare', async(req, res) => { 63 | var link = req.query.link 64 | if (!link) return res.json({ message: 'masukan parameter Link' }) 65 | var hasil = await zipi.zippy(link) 66 | try { 67 | res.json(hasil) 68 | } catch(err) { 69 | console.log(err) 70 | res.json({ message: 'Ups, error' }) 71 | } 72 | }) 73 | router.get('/sfiledl', async(req, res) => { 74 | var link = req.query.link 75 | if (!link) return res.json({ message: 'masukan parameter Link' }) 76 | var hasil = await sfiledl(link) 77 | try { 78 | res.json(hasil) 79 | } catch(err) { 80 | console.log(err) 81 | res.json({ message: 'Ups, error' }) 82 | } 83 | }) 84 | router.get('/youtube', async(req, res) => { 85 | var link = req.query.link 86 | if (!link) return res.json({ message: 'masukan parameter Link' }) 87 | var yt1 = await yta(link) 88 | var yt2 = await ytv(link) 89 | const audioUrl = await shorts('https://tyz-api.herokuapp.com/converter/toFile?url='+yt1.dl_link) 90 | const videoUrl = await shorts('https://tyz-api.herokuapp.com/converter/toFile?url='+yt2.dl_link) 91 | try { 92 | res.json({ 93 | title: yt1.title, 94 | thumb: yt1.thumb, 95 | filesize_audio: yt1.filesizeF, 96 | filesize_video: yt2.filesizeF, 97 | audio: audioUrl, 98 | video: videoUrl, 99 | }) 100 | } catch(err) { 101 | console.log(err) 102 | res.json({ message: 'Ups, error' }) 103 | } 104 | }) 105 | router.get('/play', async(req, res) => { 106 | var query = req.query.query 107 | if (!query) return res.json({ message: 'masukan parameter query' }) 108 | let results = await yts(query) 109 | let vid = results.all.find(video => video.seconds < 3600) 110 | if (!vid) return res.json({ message: 'not found!'}) 111 | var hasil = await axios.get('https://tyz-api.herokuapp.com/downloader/youtube?link='+vid.url) 112 | try { 113 | res.json(hasil.data) 114 | } catch(err) { 115 | console.log(err) 116 | res.json({ message: 'Ups, error' }) 117 | } 118 | }) 119 | router.get('/pixiv', async(req, res) => { 120 | var id = req.query.id 121 | var ext = req.query.ext 122 | if (!id) return res.json({ message: 'masukan parameter id' }) 123 | if (!ext) return res.json({ message: 'masukan parameter ext' }) 124 | var hasil = await pixivDownload(id, ext) 125 | try { 126 | var data = await getBuffer(hasil) 127 | await fs.writeFileSync(__path +'/tmp/image.jpg', data) 128 | await res.sendFile(__path +'/tmp/image.jpg') 129 | } catch(err) { 130 | console.log(err) 131 | res.json({ message: 'Ups, error' }) 132 | } 133 | }) 134 | router.get('/fbdl', async(req, res) => { 135 | var link = req.query.link 136 | if (!link) return res.json({ message: 'masukan parameter Link' }) 137 | var hasil = await dl(link) 138 | try { 139 | res.json(hasil) 140 | } catch(err) { 141 | console.log(err) 142 | res.json({ message: 'Ups, error' }) 143 | } 144 | }) 145 | router.get('/likeedl', async(req, res) => { 146 | var link = req.query.link 147 | if (!link) return res.json({ message: 'masukan parameter Link' }) 148 | var hasil = await dl(link) 149 | try { 150 | res.json(hasil) 151 | } catch(err) { 152 | console.log(err) 153 | res.json({ message: 'Ups, error' }) 154 | } 155 | }) 156 | router.get('/twitter', async(req, res) => { 157 | var link = req.query.link 158 | if (!link) return res.json({ message: 'masukan parameter Link' }) 159 | var hasil = await savefrom(link) 160 | try { 161 | res.json(hasil) 162 | } catch(err) { 163 | console.log(err) 164 | res.json({ message: 'Ups, error' }) 165 | } 166 | }) 167 | router.get('/pindl', async(req, res) => { 168 | var link = req.query.link 169 | if (!link) return res.json({ message: 'masukan parameter Link' }) 170 | var hasil = await pinterestdl(link) 171 | try { 172 | res.json(hasil) 173 | } catch(err) { 174 | console.log(err) 175 | res.json({ message: 'Ups, error' }) 176 | } 177 | }) 178 | router.get('/scdl', async(req, res) => { 179 | var link = req.query.link 180 | if (!link) return res.json({ message: 'masukan parameter Link' }) 181 | var hasil = await scdl(link) 182 | try { 183 | res.json(hasil) 184 | } catch(err) { 185 | console.log(err) 186 | res.json({ message: 'Ups, error' }) 187 | } 188 | }) 189 | router.get('/spotifydl', async(req, res) => { 190 | var link = req.query.link 191 | if (!link) return res.json({ message: 'masukan parameter Link' }) 192 | var hasil = await spotifydl.downloadTrack(link) 193 | try { 194 | await fs.writeFileSync(__path +'/tmp/audio.mp3', hasil) 195 | await res.sendFile(__path +'/tmp/audio.mp3') 196 | } catch(err) { 197 | console.log(err) 198 | res.json({ message: 'Ups, error' }) 199 | } 200 | }) 201 | router.get('/spotify', async(req, res) => { 202 | var link = req.query.link 203 | if (!link) return res.json({ message: 'masukan parameter Link' }) 204 | var hasil = await spotifydl.getTrack(link) 205 | try { 206 | res.json({ info: hasil, dl_lnk: `https://tyz-api.herokuapp.com/downloader/spotifydl?link=${link}` }) 207 | } catch(err) { 208 | console.log(err) 209 | res.json({ message: 'Ups, error' }) 210 | } 211 | }) 212 | router.get('/stickerpack', async(req, res) => { 213 | var link = req.query.link 214 | if (!link) return res.json({ message: 'masukan parameter Link' }) 215 | var hasil = await stickerDl(link) 216 | try { 217 | res.json(hasil) 218 | } catch(err) { 219 | console.log(err) 220 | res.json({ message: 'Ups, error' }) 221 | } 222 | }) 223 | 224 | module.exports = router 225 | -------------------------------------------------------------------------------- /server/games.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | 4 | const { tebakgambar } = require('../scraper/index') 5 | 6 | router.get('/tebakgambar', async(req, res) => { 7 | var hasil = await tebakgambar() 8 | try { 9 | res.json(hasil) 10 | } catch(err) { 11 | console.log(err) 12 | res.json({ message: 'Ups, error' }) 13 | } 14 | }) 15 | 16 | module.exports = router 17 | -------------------------------------------------------------------------------- /server/nsfw.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | __path = process.cwd() 4 | var nhentai = require('nhentai-js'); 5 | const NanaAPI = require('nana-api') 6 | const nana = new NanaAPI() 7 | const axios = require('axios') 8 | const { toPDF } = require(__path + '/lib/img2pdf') 9 | const fs = require('fs') 10 | 11 | async function sleep(ms) { 12 | return new Promise(resolve => setTimeout(resolve, ms)); 13 | } 14 | 15 | const { doujindesu } = require('../scraper/index') 16 | 17 | router.get('/nHentai', async (req, res) => { 18 | var code = req.query.code 19 | var result = await nhentai.getDoujin(`${code}`) 20 | res.json({ result }) 21 | }) 22 | router.get('/nHentaiSearch', async (req, res) => { 23 | var query = req.query.query 24 | var hasil = await nana.search(`${query}`) 25 | var result = hasil.results 26 | res.json({ result }) 27 | }) 28 | router.get('/doujindesuSearch', async (req, res) => { 29 | var query = req.query.query 30 | var hasil = await doujindesu(`${query}`) 31 | res.json(hasil) 32 | }) 33 | router.get('/nhentaipdf', async (req, res) => { 34 | var code = req.query.code 35 | var nhres = `https://tyz-api.herokuapp.com/nsfw/nhcode?query=${code}` 36 | var nhread = `https://tyz-api.herokuapp.com/nsfw/nhread?query=${code}` 37 | res.json({ 38 | pdf: nhres, 39 | read: nhread, 40 | note: 'dosa di tanggung sendiri!' 41 | }) 42 | }) 43 | router.get('/nhcode', async (req, res) => { 44 | try { 45 | var query = req.query.query 46 | let data = await axios.get('https://tyz-api.herokuapp.com/nsfw/nHentai?code='+query) 47 | let restjson = data.data.result.pages 48 | let title = data.data.result.title 49 | let duckJson = await restjson.map(a => 'https://external-content.duckduckgo.com/iu/?u=' + a) 50 | let jsonTopdf = await toPDF(duckJson) 51 | await fs.writeFileSync(__path + `/tmp/${title}.pdf`, jsonTopdf) 52 | await res.sendFile(__path + `/tmp/${title}.pdf`) 53 | await sleep(3000) 54 | await fs.unlinkSync(__path + `/tmp/${title}.pdf`) 55 | } catch(err) { 56 | res.json({ error: err.message }) 57 | } 58 | }) 59 | router.get('/nhread', async(req, res) => { 60 | var query = req.query.query 61 | let data = await axios.get('https://tyz-api.herokuapp.com/nsfw/nHentai?code='+query) 62 | let restjson = data.data.result.pages 63 | let title = data.data.result.title 64 | let duckJson = await restjson.map(a => 'https://external-content.duckduckgo.com/iu/?u=' + a) 65 | let html = ` 66 | 67 | 68 | 69 | ${title} 70 | 91 | 92 | 93 | ` 94 | for(let url of duckJson) html += `` 95 | res.send(html) 96 | }) 97 | module.exports = router 98 | -------------------------------------------------------------------------------- /server/otakudesu.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | 4 | const otaku = require('../scraper/otakudesu') 5 | 6 | router.get('/search', async(req, res) => { 7 | var anime = req.query.anime 8 | if (!anime) return res.json({ message: 'masukan parameter Anime' }) 9 | var hasil = await otaku.Search(anime) 10 | try { 11 | res.json(hasil) 12 | } catch(err) { 13 | console.log(err) 14 | res.json({ message: 'Ups, error' }) 15 | } 16 | }) 17 | 18 | router.get('/animeDetail', async(req, res) => { 19 | var link = req.query.link 20 | if (!link) return res.json({ message: 'masukan parameter Link' }) 21 | var hasil = await otaku.getInfo(link) 22 | try { 23 | res.json(hasil) 24 | } catch(err) { 25 | console.log(err) 26 | res.json({ message: 'Ups, error' }) 27 | } 28 | }) 29 | 30 | router.get('/dl', async(req, res) => { 31 | var link = req.query.link 32 | if (!link) return res.json({ message: 'masukan parameter Link' }) 33 | var hasil = await otaku.Getdownload(link) 34 | try { 35 | res.json(hasil) 36 | } catch(err) { 37 | console.log(err) 38 | res.json({ message: 'Ups, error' }) 39 | } 40 | }) 41 | 42 | module.exports = router 43 | -------------------------------------------------------------------------------- /server/other.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | const { getBuffer } = require('../lib/function') 4 | const { merdekaNews } = require('../scraper/merdekanews') 5 | const fs = require('fs') 6 | __path = process.cwd() 7 | 8 | router.get('/nulis', async(req, res) => { 9 | var text = req.query.text 10 | if (!text) return res.json({ 'message': 'masukan parameter text!'}) 11 | const data = await getBuffer(`https://rya-kun.herokuapp.com/api/nulis?text=${text}`) 12 | await fs.writeFileSync(__path +'/tmp/nulis.png', data) 13 | await res.sendFile(__path +'/tmp/nulis.png') 14 | }) 15 | 16 | router.get('/ttp', async(req, res) => { 17 | var text = req.query.text 18 | if (!text) return res.json({ 'message': 'masukan parameter text!'}) 19 | const data = await getBuffer(`https://rya-kun.herokuapp.com/api/ttp?text=${text}`) 20 | await fs.writeFileSync(__path +'/tmp/ttp.png', data) 21 | await res.sendFile(__path +'/tmp/ttp.png') 22 | }) 23 | 24 | router.get('/attp', async(req, res) => { 25 | var text = req.query.text 26 | if (!text) return res.json({ 'message': 'masukan parameter text!'}) 27 | const data = await getBuffer(`https://rya-kun.herokuapp.com/api/attp?text=${text}`) 28 | await fs.writeFileSync(__path +'/tmp/attp.png', data) 29 | await res.sendFile(__path +'/tmp/attp.png') 30 | }) 31 | 32 | 33 | router.get('/removebg', async(req, res) => { 34 | var link = req.query.link 35 | if (!link) return res.json({ 'message': 'masukan parameter link!'}) 36 | const data = await getBuffer(`https://rya-kun.herokuapp.com/api/removebg?link=${link}`) 37 | await fs.writeFileSync(__path +'/tmp/removebg.png', data) 38 | await res.sendFile(__path +'/tmp/removebg.png') 39 | }) 40 | 41 | router.get('/ssweb', async(req, res) => { 42 | var link = req.query.link 43 | if (!link) return res.json({ 'message': 'masukan parameter link!'}) 44 | const data = await getBuffer(`https://rya-kun.herokuapp.com/api/ssweb?link=${link}`) 45 | await fs.writeFileSync(__path +'/tmp/ssweb.png', data) 46 | await res.sendFile(__path +'/tmp/ssweb.png') 47 | }) 48 | 49 | router.get('/merdeka', async(req, res) => { 50 | const result = await merdekaNews() 51 | res.json({ result }) 52 | }) 53 | 54 | //Qrcode 55 | router.get("/qrcode", (req, res) => { 56 | var qr = require('qr-image') 57 | var text = req.query.text 58 | if(!text) return res.json({ message: 'Masukan Kata!' }) 59 | var img = qr.image(text,{size :13}); 60 | res.writeHead(200, {'Content-Type': 'image/png'}); 61 | img.pipe(res); 62 | }); 63 | 64 | //Meme 65 | router.get('/meme', async (req, res) => { 66 | const fetch = require('node-fetch') 67 | const subReddits = ["dankmeme", "meme", "memes"]; 68 | const random = Math.floor(Math.random() * subReddits.length) 69 | var body = await fetch('https://www.reddit.com/r/' + subReddits[random] + '/random/.json') 70 | body = await body.json() 71 | const a = body[0] 72 | const title = a.data.children[0].data.title 73 | const url = 'https://reddit.com'+a.data.children[0].data.permalink 74 | const link = a.data.children[0].data.url_overridden_by_dest 75 | const ups = a.data.children[0].data.ups 76 | const comments = a.data.children[0].data.num_comments 77 | const sub = a.data.children[0].data.subreddit_name_prefixed 78 | const preview = a.data.children[0].data.preview 79 | return res.json({ 80 | status: true, 81 | title: title, 82 | url: url, 83 | image: link, 84 | ups: ups, 85 | comments: comments 86 | }); 87 | }) 88 | 89 | module.exports = router 90 | -------------------------------------------------------------------------------- /server/photooxy.js: -------------------------------------------------------------------------------- 1 | __path = process.cwd() 2 | const express = require('express') 3 | var router = express.Router(); 4 | const fs = require('fs') 5 | const fetch = require('node-fetch') 6 | 7 | const { photoXy_1, photoXy_2 } = require('../scraper/photooxy') 8 | const UrlPhotooxy = { 9 | shadow: 'https://photooxy.com/logo-and-text-effects/shadow-text-effect-in-the-sky-394.html', 10 | captain_amerika: 'https://photooxy.com/captain-america-text-generator-403.html', 11 | cup: 'https://photooxy.com/logo-and-text-effects/write-text-on-the-cup-392.html', 12 | romantic: 'https://photooxy.com/logo-and-text-effects/romantic-messages-for-your-loved-one-391.html', 13 | smoke: 'https://photooxy.com/other-design/create-an-easy-smoke-type-effect-390.html', 14 | burn_paper: 'https://photooxy.com/logo-and-text-effects/write-text-on-burn-paper-388.html', 15 | naruto: 'https://photooxy.com/manga-and-anime/make-naruto-banner-online-free-378.html', 16 | love_message: 'https://photooxy.com/logo-and-text-effects/create-a-picture-of-love-message-377.html', 17 | tik_tok: 'https://photooxy.com/logo-and-text-effects/make-tik-tok-text-effect-375.html', 18 | flower_heart: 'https://photooxy.com/logo-and-text-effects/text-inside-the-flower-heart-369.html', 19 | wodden_board: 'https://photooxy.com/logo-and-text-effects/writing-on-wooden-boards-368.html', 20 | glowing_neon: 'https://photooxy.com/logo-and-text-effects/make-smoky-neon-glow-effect-343.html' 21 | } 22 | 23 | router.get('/photooxy1', async (req, res) => { 24 | var text = req.query.text 25 | var link = req.query.link 26 | if (!text) return res.json({ message: 'masukan parameter Text' }) 27 | if (!link) return res.json({ message: 'masukan parameter Link' }) 28 | var hasil = await photoXy_1(link, text) 29 | try { 30 | var Buffer = await fetch(hasil, { 31 | headers: { 32 | "User-Agent": "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11" 33 | } 34 | }) 35 | var getBuffer = await Buffer.buffer() 36 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 37 | res.sendFile(__path + '/tmp/image.jpg') 38 | } catch(err) { 39 | console.log(err) 40 | res.json({ message: 'Ups, error' }) 41 | } 42 | }) 43 | 44 | router.get('/photooxy2', async (req, res) => { 45 | var text = req.query.text 46 | var text_2 = req.query.text_2 47 | var link = req.query.link 48 | if (!text) return res.json({ message: 'masukan parameter Text' }) 49 | if (!text_2) return res.json({ message: 'masukan parameter Text' }) 50 | if (!link) return res.json({ message: 'masukan parameter Link' }) 51 | var hasil = await photoXy_2(link, text, text_2) 52 | try { 53 | var Buffer = await fetch(hasil, { 54 | headers: { 55 | "User-Agent": "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11" 56 | } 57 | }) 58 | var getBuffer = await Buffer.buffer() 59 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 60 | res.sendFile(__path + '/tmp/image.jpg') 61 | } catch(err) { 62 | console.log(err) 63 | res.json({ message: 'Ups, error' }) 64 | } 65 | }) 66 | router.get('/shadow', async (req, res) => { 67 | var text = req.query.text 68 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 69 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.shadow}`) 70 | var getBuffer = await img.buffer() 71 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 72 | res.sendFile(__path + '/tmp/image.jpg') 73 | }) 74 | router.get('/cup', async (req, res) => { 75 | var text = req.query.text 76 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 77 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.cup}`) 78 | var getBuffer = await img.buffer() 79 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 80 | res.sendFile(__path + '/tmp/image.jpg') 81 | }) 82 | router.get('/captain_amerika', async (req, res) => { 83 | var text = req.query.text 84 | var text_2 = req.query.text_2 85 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 86 | if (!text_2) return res.json({ message: 'Masukan parameter Text_2'}) 87 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy2?text=${text}&text_2=${text_2}&link=${UrlPhotooxy.captain_amerika}`) 88 | var getBuffer = await img.buffer() 89 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 90 | res.sendFile(__path + '/tmp/image.jpg') 91 | }) 92 | router.get('/romantic', async (req, res) => { 93 | var text = req.query.text 94 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 95 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.romantic}`) 96 | var getBuffer = await img.buffer() 97 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 98 | res.sendFile(__path + '/tmp/image.jpg') 99 | }) 100 | router.get('/smoke', async (req, res) => { 101 | var text = req.query.text 102 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 103 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.smoke}`) 104 | var getBuffer = await img.buffer() 105 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 106 | res.sendFile(__path + '/tmp/image.jpg') 107 | }) 108 | router.get('/burn_paper', async (req, res) => { 109 | var text = req.query.text 110 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 111 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.burn_paper}`) 112 | var getBuffer = await img.buffer() 113 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 114 | res.sendFile(__path + '/tmp/image.jpg') 115 | }) 116 | router.get('/naruto', async (req, res) => { 117 | var text = req.query.text 118 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 119 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.naruto}`) 120 | var getBuffer = await img.buffer() 121 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 122 | res.sendFile(__path + '/tmp/image.jpg') 123 | }) 124 | router.get('/love_message', async (req, res) => { 125 | var text = req.query.text 126 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 127 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.love_message}`) 128 | var getBuffer = await img.buffer() 129 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 130 | res.sendFile(__path + '/tmp/image.jpg') 131 | }) 132 | router.get('/tik_tok', async (req, res) => { 133 | var text = req.query.text 134 | var text_2 = req.query.text_2 135 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 136 | if (!text_2) return res.json({ message: 'Masukan parameter Text_2'}) 137 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy2?text=${text}&text_2=${text_2}&link=${UrlPhotooxy.tik_tok}`) 138 | var getBuffer = await img.buffer() 139 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 140 | res.sendFile(__path + '/tmp/image.jpg') 141 | }) 142 | router.get('/flower_heart', async (req, res) => { 143 | var text = req.query.text 144 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 145 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.flower_heart}`) 146 | var getBuffer = await img.buffer() 147 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 148 | res.sendFile(__path + '/tmp/image.jpg') 149 | }) 150 | router.get('/wodden_board', async (req, res) => { 151 | var text = req.query.text 152 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 153 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.wodden_board}`) 154 | var getBuffer = await img.buffer() 155 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 156 | res.sendFile(__path + '/tmp/image.jpg') 157 | }) 158 | router.get('/glowing_neon', async (req, res) => { 159 | var text = req.query.text 160 | if (!text) return res.json({ message: 'Masukan parameter Text'}) 161 | var img = await fetch(`https://tyz-api.herokuapp.com/photooxy/photooxy1?text=${text}&link=${UrlPhotooxy.glowing_neon}`) 162 | var getBuffer = await img.buffer() 163 | await fs.writeFileSync(__path + '/tmp/image.jpg', getBuffer) 164 | res.sendFile(__path + '/tmp/image.jpg') 165 | }) 166 | 167 | 168 | module.exports = router 169 | -------------------------------------------------------------------------------- /server/primbon.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | 4 | const { artinama, ramalanJodoh } = require('../scraper/primbon') 5 | 6 | router.get('/artinama', async(req, res) => { 7 | var nama = req.query.nama 8 | if (!nama) return res.json({ message: 'masukan parameter nama' }) 9 | var hasil = await artinama(nama) 10 | try { 11 | res.json(hasil) 12 | } catch(err) { 13 | console.log(err) 14 | res.json({ message: 'Ups, error' }) 15 | } 16 | }) 17 | 18 | router.get('/ramalanjodoh', async(req, res) => { 19 | var nama = req.query.nama 20 | var pasangan = req.query.pasangan 21 | if (!nama) return res.json({ message: 'masukan parameter nama' }) 22 | if (!pasangan) return res.json({ message: 'masukan parameter pasangan' }) 23 | var hasil = await ramalanJodoh(nama, pasangan) 24 | try { 25 | res.json(hasil) 26 | } catch(err) { 27 | console.log(err) 28 | res.json({ message: 'Ups, error' }) 29 | } 30 | }) 31 | 32 | module.exports = router 33 | -------------------------------------------------------------------------------- /server/randomimage.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | const { getBuffer } = require('../lib/function') 4 | const axios = require('axios') 5 | const fs = require('fs') 6 | const akaneko = require('../scraper/akaneko') 7 | __path = process.cwd() 8 | 9 | async function sleep(ms) { 10 | return new Promise(resolve => setTimeout(resolve, ms)); 11 | } 12 | 13 | router.get('/akaneko', async(req, res) => { 14 | var param = req.query.param 15 | if (!param) return res.json({ message: 'masukan parameter param' }) 16 | const result = await akaneko.akanekoApi(param) 17 | data = await getBuffer(result) 18 | await fs.writeFileSync(__path +'/tmp/image.png', data) 19 | await res.sendFile(__path +'/tmp/image.png') 20 | await sleep(3000) 21 | await fs.unlinkSync(__path + '/tmp/image.png') 22 | }) 23 | router.get('/waifu', async(req, res) => { 24 | var waif = (await axios.get(`https://raw.githubusercontent.com/Arya-was/endak-tau/main/waifu.json`)).data 25 | const result = waif[Math.floor(Math.random() * (waif.length))] 26 | data = await getBuffer(result) 27 | await fs.writeFileSync(__path +'/tmp/waifu.png', data) 28 | await res.sendFile(__path +'/tmp/waifu.png') 29 | await sleep(3000) 30 | await fs.unlinkSync(__path + '/tmp/waifu.png') 31 | }) 32 | router.get('/husbu', async(req, res) => { 33 | var waif = (await axios.get(`https://raw.githubusercontent.com/Arya-was/endak-tau/main/husbu.json`)).data 34 | const result = waif[Math.floor(Math.random() * (waif.length))] 35 | data = await getBuffer(result) 36 | await fs.writeFileSync(__path +'/tmp/waifu.png', data) 37 | await res.sendFile(__path +'/tmp/waifu.png') 38 | await sleep(3000) 39 | await fs.unlinkSync(__path + '/tmp/waifu.png') 40 | }) 41 | router.get('/loli', async(req, res) => { 42 | var waif = (await axios.get(`https://raw.githubusercontent.com/Arya-was/endak-tau/main/loli.json`)).data 43 | const result = waif[Math.floor(Math.random() * (waif.length))] 44 | data = await getBuffer(result) 45 | await fs.writeFileSync(__path +'/tmp/waifu.png', data) 46 | await res.sendFile(__path +'/tmp/waifu.png') 47 | await sleep(3000) 48 | await fs.unlinkSync(__path + '/tmp/waifu.png') 49 | }) 50 | router.get('/milf', async(req, res) => { 51 | var waif = (await axios.get(`https://raw.githubusercontent.com/Arya-was/endak-tau/main/milf.json`)).data 52 | const result = waif[Math.floor(Math.random() * (waif.length))] 53 | data = await getBuffer(result) 54 | await fs.writeFileSync(__path +'/tmp/waifu.png', data) 55 | await res.sendFile(__path +'/tmp/waifu.png') 56 | await sleep(3000) 57 | await fs.unlinkSync(__path + '/tmp/waifu.png') 58 | }) 59 | router.get('/cosplay', async(req, res) => { 60 | var waif = (await axios.get(`https://raw.githubusercontent.com/Arya-was/endak-tau/main/cosplay.json`)).data 61 | const result = waif[Math.floor(Math.random() * (waif.length))] 62 | data = await getBuffer(result) 63 | await fs.writeFileSync(__path +'/tmp/waifu.png', data) 64 | await res.sendFile(__path +'/tmp/waifu.png') 65 | await sleep(3000) 66 | await fs.unlinkSync(__path + '/tmp/waifu.png') 67 | }) 68 | 69 | module.exports = router 70 | -------------------------------------------------------------------------------- /server/search.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | var router = express.Router(); 3 | __path = process.cwd() 4 | const fs = require('fs') 5 | const { getBuffer } = require('../lib/function') 6 | 7 | //scraper 8 | const { pinterest, randomTiktok, konachan } = require('../scraper/index') 9 | const { wallpapercave, wallpaperscraft, wallpaperflare, alphacoders } = require('../scraper/wallpaper') 10 | const { stickerSearch } = require('../scraper/stickerpack') 11 | const { savetikVideo } = require('../scraper/savetik') 12 | const { happymodSearch } = require('../scraper/happymod') 13 | const { searchIlust } = require('../scraper/pixiv') 14 | const { tiktokHastag } = require('../scraper/tiktok_search') 15 | 16 | 17 | //Biar Result nya 20 18 | //Disable Console Log 19 | router.get('/google', async(req, res) => { 20 | var query = req.query.query 21 | if (!query) return res.json({ message: 'masukan parameter query' }) 22 | var google = require('google-it') 23 | var result = google({'query' : `${query}`, limit: 20, disableConsole: true }).then(result => { 24 | res.json({ result }) 25 | }) 26 | }) 27 | 28 | router.get('/pinterest', async(req, res) => { 29 | var query = req.query.query 30 | if (!query) return res.json({ message: 'masukan parameter query' }) 31 | var result = await pinterest(query) 32 | res.json({ result }) 33 | }) 34 | router.get('/pixiv', async(req, res) => { 35 | var query = req.query.query 36 | if (!query) return res.json({ message: 'masukan parameter query' }) 37 | var result = await searchIlust(query) 38 | res.json({ result }) 39 | }) 40 | router.get('/konachan', async(req, res) => { 41 | var query = req.query.query 42 | if (!query) return res.json({ message: 'masukan parameter query' }) 43 | var img = await konachan(query) 44 | const result = img[Math.floor(Math.random() * (img.length))] 45 | var data = await getBuffer(result) 46 | await fs.writeFileSync(__path +'/tmp/konachan.png', data) 47 | await res.sendFile(__path +'/tmp/konachan.png') 48 | }) 49 | router.get('/alphacoders', async(req, res) => { 50 | var query = req.query.query 51 | if (!query) return res.json({ message: 'masukan parameter query' }) 52 | var img = await alphacoders(query) 53 | const result = img[Math.floor(Math.random() * (img.length))] 54 | var data = await getBuffer(result) 55 | await fs.writeFileSync(__path +'/tmp/image.png', data) 56 | await res.sendFile(__path +'/tmp/image.png') 57 | }) 58 | router.get('/wallpapercave', async(req, res) => { 59 | var query = req.query.query 60 | if (!query) return res.json({ message: 'masukan parameter query' }) 61 | var img = await wallpapercave(query) 62 | const result = img[Math.floor(Math.random() * (img.length))] 63 | var data = await getBuffer(result) 64 | await fs.writeFileSync(__path +'/tmp/image.png', data) 65 | await res.sendFile(__path +'/tmp/image.png') 66 | }) 67 | router.get('/wallpaperscraft', async(req, res) => { 68 | var query = req.query.query 69 | if (!query) return res.json({ message: 'masukan parameter query' }) 70 | var img = await wallpaperscraft(query) 71 | const result = img[Math.floor(Math.random() * (img.length))] 72 | var data = await getBuffer(result) 73 | await fs.writeFileSync(__path +'/tmp/image.png', data) 74 | await res.sendFile(__path +'/tmp/image.png') 75 | }) 76 | router.get('/wallpaperflare', async(req, res) => { 77 | var query = req.query.query 78 | if (!query) return res.json({ message: 'masukan parameter query' }) 79 | var img = await wallpaperflare(query) 80 | const result = img[Math.floor(Math.random() * (img.length))] 81 | var data = await getBuffer(result) 82 | await fs.writeFileSync(__path +'/tmp/image.png', data) 83 | await res.sendFile(__path +'/tmp/image.png') 84 | }) 85 | router.get('/tiktok', async(req, res) => { 86 | var query = req.query.query 87 | if (!query) return res.json({ message: 'masukan parameter query' }) 88 | var result = await tiktokHastag(query) 89 | res.json({ result }) 90 | }) 91 | router.get('/tiktokHastag', async(req, res) => { 92 | var query = req.query.query 93 | if (!query) return res.json({ message: 'masukan parameter query' }) 94 | var result = await randomTiktok(query) 95 | res.json({ result }) 96 | }) 97 | router.get('/randomtiktok', async(req, res) => { 98 | var result = await savetikVideo() 99 | res.json({ result }) 100 | }) 101 | router.get('/happymod', async(req, res) => { 102 | var query = req.query.query 103 | if (!query) return res.json({ message: 'masukan parameter query' }) 104 | var result = await happymodSearch(query) 105 | res.json({ result }) 106 | }) 107 | router.get('/sticker', async(req, res) => { 108 | var query = req.query.query 109 | if (!query) return res.json({ message: 'masukan parameter query' }) 110 | var result = await stickerSearch(query) 111 | res.json({ result }) 112 | }) 113 | 114 | module.exports = router 115 | -------------------------------------------------------------------------------- /tmp/data: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /views/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 404 Not Found 7 | 37 | 38 | 39 |
40 |
41 |

404

42 |

Not Found

43 |
44 |
45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ICHINOSE API 13 | 15 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 28 | 29 | 30 | 31 |
32 | 258 | 259 |
260 |
261 | 278 |
279 | 337 |
338 |
339 |
340 |
341 |

Made with ❤️ by Arya

342 |
343 |
Jangan di Bully mastah, Saya cuma gabut bikin Api monggo di pakai btw source code nya di Sini yak
344 |
345 |
346 |
347 |
348 |
349 |
350 | 359 |
360 |
361 |
362 |
363 |
364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 |
373 | 374 | 375 | 376 | --------------------------------------------------------------------------------