-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
OFFTOPIC: PID Lítačka API #24
Comments
Podíval jsem se na to, konkrétně na funkci public static String k(final String str, final long l, String f) {
if (TextUtils.isEmpty(str)) {
return null;
}
String obj = "";
if (!TextUtils.isEmpty(f)) {
final byte[] e = SHA256(String.format("MOS%dMOS", l / 30L));
final byte[] c = BaseEncoding.hex().decode(f.toUpperCase());
h.a.a.a("Unix time stamp: %d", l);
f = BaseEncoding.base32hex().encode(r0(c, e));
if (f != null && f.length() >= 4) {
str = "X-PTS:" + f.substring(0, 4) + "*";
}
}
if (str.contains("X-PTS:")) {
return str.replaceAll("X-PTS.*", obj);
}
return str + obj;
}
private static byte[] r0(final byte[] array, final byte[] array2) {
final byte[] out = new byte[16];
int outLen = Math.min(16, Math.min(array.length, array2.length));
for (int j = 0; j < outLen; ++j) {
out[j] = (byte)(array[j] ^ array2[j]);
}
if (outLen < 16) {
if (array.length > outLen) {
int length;
if (array.length >= 16) {
length = 16;
}
else {
length = array.length;
}
for (int k = outLen; k < length; ++k) {
out[k] = array[k];
}
}
if (array2.length > outLen) {
int length2;
if (array2.length >= 16) {
length2 = 16;
}
else {
length2 = array2.length;
}
while (outLen < length2) {
out[outLen] = array2[i];
++outLen;
}
}
}
return out;
}
Na zbytek kódu jsem se nedíval, tak snad tyto postřehy půjdou zasadit do většího celku. Až bude vaše aplikace v použitelném stavu, tak rozhodně bych se rád podíval na její kód a případně si přečetl nějaké postřehy k fungování API PID Lítačky :) p.s. Byl bych pro založení nějakého fóra/jiného místa, kde bychom mohli tyto věci (jak získat data/API a co s nimi) diskutovat, pokud se k tomu přidá alespoň pár lidí. |
Moc díky, tohle mi strašně pomohlo. |
Co konkrétně nefunguje? Něco jiného než to začne házet až na větších číslech (je tam celočíselné dělení 30). Třeba class Main {
public static void main(String[] args) {
final long l = 100;
System.out.println(String.format("MOS%dMOS", l / 30L));
}
} Vypíše |
Ohledně fóra: Už provozuji fórum pro své dopravní projekty na adrese dadof.konarici.cz, které je aktuálně dost mrtvé. Na stejném serveru a asi na doméně *.konarici.cz (možná bych si mohl půjčit *.ggu.cz) bych mohl hostovat i další forum, asi zas na stejném softwaru. Pokud se na tom shodneme a vymyslíme jméno, můžu to zařídit. |
@mvolfik Jo, moje chyba, zřejmě kvůli tomuhle se kód změní každých 30 sekund (to @dvdkon Když se někdo z nás zaregistruje do https://education.github.com/, je tam jedna .me doména zadarmo a můžeme zaregistrovat něco jako dekompiluje.me. To Flarum jinak vypadá skvěle. Jinak jsem ale teď bohužel trochu narazil, protože:
Dřív jsem si nevšiml, že se mění i hodnota |
Ahoj,
tohle se úplně netýká Baka API, ale protože neznám skupinu lidí, co by se lépe vyznala v revezním engineeringu, tak se zkusím zeptat.
Už delší dobu plánuju napsat si PID Lítačka appku pro Wear OS, tj. do Androidích hodinek - abych při kontrole v autobusech nemusel vytahovat telefon a mohl prostě ukázat hodinky. Mám už docela přehled o fungování API z aplikace PID Lítačka pro Android a taky zhruba vím, podle čeho se generuje QR kód pro inspekci.
Jediné, na co pořád nemůžu přijít, je parametr X-PTS. Tenhle parametr se jako jediný v QR kódu periodicky mění (každých 30 sekund - v xx:xx:00 a xx:xx:30). Je to alfanumerický čtyřznakový string, tady jsou nějaké příklady:
L3HR
5K4H
Netuší někdo, jak by tahle věc mohla vznikat? Je to jakási forma timestampu, stejnou zkratku má Presentation timestamp (https://en.wikipedia.org/wiki/Presentation_timestamp), ale to asi bude něco jiného.
V aplikaci je také nějaké volání na endpoint /api/v3/time-keys, které vrací něco takovéhohle:
[
"e654cb6d",
"16d589f2"
]
Ale dekompilace nebyla tak dokonalá, abych si byl jistý, že se tyhle stringy reálně využívají k tvorbě X-PTS.
Budu moc rád za jakékoliv nápady a kdyby se někdo chtěl připojit k tvorbě aplikace pro hodinky, budu moc rád. Kdyby měl někdo čas kouknout se i dovnitř oficiální aplikace, přikládám odkaz na APK: https://apkpure.com/pid-litacka/cz.dpp.praguepublictransport/download?from=details
Milan
The text was updated successfully, but these errors were encountered: