-
-
Save SahaSG552/ead1e72af3ae6e446bcc834006b8b089 to your computer and use it in GitHub Desktop.
Оповещения о появлении $ в банкоматах тинькофф
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Актуальная информация есть в канале https://t.me/cashout_tinkoff_spb | |
Но там она публикуется с некоторой задержкой. Для оперативного получения информации можно использовать этот скрипт. | |
Для запуска требуется node.js | |
Перед запуском: | |
- Скопировать файл index.js и package.json | |
- Выполнить команду `npm i` в директории для установки зависимостей: axios, ms и node-notifier | |
- Ниже в коде указать нужные координаты для поиска банкоматов. По умолчанию указаны координаты для поиска по всем Петербурге | |
- Убедиться, что включены и разрешены уведомления | |
Для запуска выполнить команду `node index.js`, для остановки нажать `ctrl+c` | |
*/ | |
const axios = require('axios') | |
const ms = require('ms'); | |
const notifier = require('node-notifier'); | |
// Границы, в которых нужно искать | |
const BOUNDS = { | |
bottomLeft: { // нижний левый угол зоны поиска | |
lat: 59.766238204568616, // Широта | |
lng: 30.037819928656514, // Долгота | |
}, | |
topRight: { // верхний правый угол зоны поиска | |
lat: 60.10529265014078, // Широта | |
lng: 30.620781964789316, // Долгота | |
}, | |
}; | |
// Интервал запроса данных | |
const INTERVAL = '30s'; | |
let atms = new Set(); | |
// Запрашиваем список банкоматов из api тинькоффа | |
const fetchAtms = async () => { | |
const result = await axios.post( | |
'https://api.tinkoff.ru/geo/withdraw/clusters', | |
{ | |
bounds: BOUNDS, | |
filters: { | |
banks: ['tcs'], | |
showUnavailable: false, | |
currencies: ['USD'], // Валюты, которые нас интересуют | |
}, | |
zoom: 11, | |
} | |
); | |
return result.data; | |
}; | |
// Сравниваем банкоматы из прошлого запроса с новыми | |
const syncAtms = (clusters) => { | |
const points = []; | |
clusters.forEach((cluster) => { | |
cluster.points.forEach((point) => { | |
points.push(point); | |
}); | |
}); | |
const newPoints = []; | |
const newAtms = new Set(); | |
points.forEach((point) => { | |
if (!atms.has(point.id)) { | |
newPoints.push(point); | |
} | |
newAtms.add(point.id); | |
}); | |
atms = newAtms; | |
return newPoints; | |
}; | |
// Отправляем оповещение для каждого из банкомата | |
const notify = (atms) => { | |
atms.forEach((atm) => { | |
notifier.notify({ | |
title: 'Found new ATM', | |
message: atm.address, | |
sound: false, | |
}); | |
}); | |
}; | |
const checkAtms = async () => { | |
const result = await fetchAtms(); | |
const newAtms = syncAtms(result.payload.clusters); | |
notify(newAtms); | |
}; | |
const init = () => { | |
checkAtms(true); | |
setInterval(() => { | |
checkAtms(true); | |
}, ms(INTERVAL)); | |
}; | |
init(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "tinkoff-atms", | |
"version": "1.0.0", | |
"main": "index.js", | |
"license": "MIT", | |
"dependencies": { | |
"axios": "^0.26.0", | |
"ms": "^2.1.3", | |
"node-notifier": "^10.0.1" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment