Open LassPar opened 1 month ago
Käytännössä vaatii oman käyttäjän ja aikaa tehdä oma. Valmista APIa joka ei vaatisi kirjautumista ei ole. Datan saaminen vaatii https://tankille.fi/ sovelluksn tilin.
import { Client } from '@jeffe/tankille'
const tankille = new Client()
async function getData () {
await tankille.login({
email,
password
})
const data = await tankille.getStationsByLocation(
{
lat: 61.500, // nämä jostain esim. google mapsista.
lon: 23.800
},
15000 // metreinä
)
}
Yllä oleva koodinpätkä hakee bensa-asemat 15km etäisyydellä tästä pisteestä.
Ja voihan sen itse implementoida myös.
POST https://api.tankille.fi/auth/login {"email": "sposti@orava.com", password: "salainen sana"}
POST https://api.tankille.fi/auth/refresh {"token": "token jonka sait auth/login routesta"}
GET https://api.tankille.fi/stations?location=LONGITUDE,LATITUDE&distance=15000
headereissa 'x-access-token':"auth/refresh/ saatu token"
Itselleni ei typescript ole tuttua, niin yritän tuolla GET/POST komennoilla.
Sain tokenin, kun lisäsin "device": "Android SDK built for x86_64" parametrin headeriin.
Vastaus: refreshToken: "xxxx..."
Kun yritän tuota 2. kohtaa, auth/refresh vastauksena tulee: "message": "Unsupported client: update the app / päivitä sovellus"
Onko sulle tullut vastaan vastaava ja miten tuosta pääsisi yli?
Ilmeisesti siinä /auth/refresh kohdassa pitää myös lähettää headereissa User-Agent.
Itse käytän tätä:
'User-Agent': 'FuelFellow/3.6.2 (Android SDK built for x86_64; Android 9)',
On toiminut jo jonkin aikaa, en tiedä vaan kuinka pitkään.
Yritin näillä tiedoilla:
POST https://api.tankille.fi/auth/login
{
"email":"<säpö>",
"password":"
vastaus: { "refreshToken": "abcxxx..." }
POST https://api.tankille.fi/auth/refresh { "token":"abcxxx...", "User-Agent": "FuelFellow/3.6.2 (Android SDK built for x86_64; Android 9)", "device":"Android SDK built for x86_64 (03280ceb8a5367a6)" }
vastaus: { "code": 127, "message": "Unsupported client: update the app / päivitä sovellus." }
Kokeiltu myös FuelFellow/3.7.1, joka on ainakin itsellä kännykässä uusin versio, sama lopputulos.
Vastauksestasi päätellen niin vissiin laitat bodyyn tuon User-Agentin. Sen pitäisi mennä pyynnön header osioon.
Eli: POST api.tankille.fi/auth/refresh
pitää tehdä niin että body on
{
"token":"abcxxx...",
}
Ja seuraava on Headereissa
"User-Agent": "FuelFellow/3.6.2 (Android SDK built for x86_64; Android 9)",
Tässä vielä demo javascriptillä:
const headerit = new Headers();
headerit.append("User-Agent", "FuelFellow/3.6.2 (Android SDK built for x86_64; Android 9)");
headerit.append("Content-Type", "application/json");
const body= JSON.stringify({
"token": "<tokeni tähän>"
});
const requestOptions = {
method: "POST",
headers: headerit,
body: body,
redirect: "follow"
};
fetch("https://api.tankille.fi/auth/refresh", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Curl komentona
curl --location 'https://api.tankille.fi/auth/refresh' \
--header 'User-Agent: FuelFellow/3.6.2 (Android SDK built for x86_64; Android 9)' \
--header 'Content-Type: application/json' \
--data '{"token": "<tokeni tähä>"}'
Is there any way to get any (JSON) data with HTTP GET reguest? I would like to get data from my area (Tampere) to NodeRed and make some home automations based on gas price.