Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * FOOTBALL STALKER - SofaScore
- * Author : gienetic
- * Base : https://play.google.com/store/apps/details?id=com.sofascore.results
- */
- const axios = require('axios');
- const dayjs = require('dayjs');
- const headers = {
- 'Host': 'sofavpn.com',
- 'cache-control': 'max-age=0',
- 'accept-encoding': 'gzip',
- 'user-agent': 'com.sofascore.results/250702/110f52'
- };
- const posFull = {
- D: 'Bek',
- M: 'Gelandang',
- F: 'Penyerang',
- G: 'Kiper'
- };
- async function stalkPlayer(query) {
- const res = await axios.get('https://sofavpn.com/api/v1/search/all', {
- params: { q: query, page: 0 }, headers
- });
- const players = res.data.results.filter(r => r.type === 'player');
- if (!players.length) return '❌ Tidak ditemukan pemain.';
- let output = '';
- for (let i = 0; i < players.length; i++) {
- const e = players[i].entity;
- const detail = await axios.get(`https://sofavpn.com/api/v1/player/${e.id}`, { headers });
- const p = detail.data.player;
- const team = p.team || {};
- const league = team.tournament || {};
- const country = p.country || {};
- const dob = p.dateOfBirthTimestamp ? dayjs.unix(p.dateOfBirthTimestamp).format('D MMMM YYYY') : '-';
- const contractUntil = p.contractUntilTimestamp ? dayjs.unix(p.contractUntilTimestamp).format('D MMMM YYYY') : '-';
- const mv = p.proposedMarketValueRaw ? `€${p.proposedMarketValueRaw.value.toLocaleString('de-DE')}` : '-';
- output += `#${i + 1} - ${p.name}\n`;
- output += ` ➤ Nama Singkat : ${p.shortName || '-'}\n`;
- output += ` ➤ Posisi : ${p.position || '-'} (${posFull[p.position] || '-'})\n`;
- output += ` ➤ Nomor Punggung : ${p.jerseyNumber || p.shirtNumber || '-'}\n`;
- output += ` ➤ Tinggi Badan : ${p.height ? p.height + ' cm' : '-'}\n`;
- output += ` ➤ Kaki Dominan : ${p.preferredFoot || '-'}\n`;
- output += ` ➤ Tanggal Lahir : ${dob}\n`;
- output += ` ➤ Kontrak Hingga : ${contractUntil}\n`;
- output += ` ➤ Harga Pasar : ${mv}\n`;
- output += ` ➤ Tim : ${team.name || '-'}\n`;
- output += ` ➤ Liga : ${league.name || '-'}\n`;
- output += ` ➤ Negara : ${country.name || '-'}\n`;
- output += ` ➤ Slug Pemain : ${p.slug || '-'}\n`;
- output += ` ➤ Slug Tim : ${team.slug || '-'}\n`;
- output += ` ➤ Gambar Pemain : https://sofavpn.com/api/v1/player/${p.id}/image\n\n`;
- }
- return output.trim();
- }
- async function stalkTeam(query) {
- const res = await axios.get('https://sofavpn.com/api/v1/search/teams', {
- params: { q: query, page: 0 }, headers
- });
- const teams = res.data.results;
- if (!teams.length) return '❌ Tidak ditemukan tim.';
- let output = '';
- for (const [i, t] of teams.entries()) {
- const detail = await axios.get(`https://sofavpn.com/api/v1/team/${t.entity.id}`, { headers });
- const team = detail.data.team;
- const country = team.category?.country || {};
- const league = team.tournament || {};
- const manager = team.manager || {};
- const venue = team.venue || {};
- const form = detail.data.pregameForm || {};
- output += `#${i + 1} - ${team.name}\n`;
- output += ` ➤ Nama Singkat : ${team.shortName || '-'}\n`;
- output += ` ➤ Olahraga : ${team.sport?.name || '-'}\n`;
- output += ` ➤ Negara : ${country.name || '-'}\n`;
- output += ` ➤ Liga : ${league.name || '-'}\n`;
- output += ` ➤ Posisi Saat Ini : ${form.position || '-'}\n`;
- output += ` ➤ Performa Terakhir : ${form.form?.join(', ') || '-'}\n`;
- output += ` ➤ Pelatih : ${manager.name || '-'} (${manager.country?.name || '-'})\n`;
- output += ` ➤ Kota Stadion : ${venue.city?.name || '-'}\n`;
- output += ` ➤ Lokasi Stadion : ${venue.venueCoordinates ? `${venue.venueCoordinates.latitude}, ${venue.venueCoordinates.longitude}` : '-'}\n`;
- output += ` ➤ Slug Tim : ${team.slug || '-'}\n`;
- output += ` ➤ Gambar Tim : https://sofavpn.com/api/v1/team/${team.id}/image\n\n`;
- }
- return output.trim();
- }
- async function stalkMatch(query) {
- const res = await axios.get('https://sofavpn.com/api/v1/search/unique-tournaments', {
- params: { q: query, page: 0 }, headers
- });
- const results = res.data.results;
- if (!results.length) return '❌ Tidak ditemukan turnamen.';
- let output = '';
- for (const [i, result] of results.entries()) {
- const e = result.entity;
- const detail = await axios.get(`https://sofavpn.com/api/v1/unique-tournament/${e.id}`, { headers });
- const u = detail.data.uniqueTournament;
- const titleHolder = u.titleHolder || {};
- const mostTitles = (u.mostTitlesTeams || []).map(t => t.name).join(', ') || '-';
- const start = u.startDateTimestamp ? dayjs.unix(u.startDateTimestamp).format('D MMMM YYYY') : '-';
- const end = u.endDateTimestamp ? dayjs.unix(u.endDateTimestamp).format('D MMMM YYYY') : '-';
- output += `#${i + 1} - ${u.name}\n`;
- output += ` ➤ Slug Turnamen : ${u.slug || '-'}\n`;
- output += ` ➤ Wilayah : ${u.category?.name || '-'}\n`;
- output += ` ➤ Jenis Olahraga : ${u.category?.sport?.name || '-'}\n`;
- output += ` ➤ Juara Bertahan : ${titleHolder.name || '-'} (${titleHolder.country?.name || '-'})\n`;
- output += ` ➤ Tim Terbanyak Juara: ${mostTitles}\n`;
- output += ` ➤ Tanggal Mulai : ${start}\n`;
- output += ` ➤ Tanggal Selesai : ${end}\n\n`;
- }
- return output.trim();
- }
- // stalkPlayer('kadek arel').then(console.log);
- // stalkTeam('persija').then(console.log);
- // stalkMatch('liga 1').then(console.log);
- module.exports = {
- stalkPlayer,
- stalkTeam,
- stalkMatch
- };
Add Comment
Please, Sign In to add comment