Jakub Olek

Jakub Olek

// Menu: Currency Converter using google
// Author: Jakub Olek
// Twitter: @JakubOlek
/** @type {import("@johnlindquist/kit")} */
const from = await arg("from", ["pln", "usd", "eur"]);
const to = await arg("to", ["usd", "pln", "eur"]);
const query = await arg("amount");
const value = await scrapeSelector(
`https://google.com/search?q=${encodeURIComponent(
query + " " + from + " " + to
)}`,
"span[data-value]"
);
div(query + " " + from + " = " + value + " " + to, "p-4");
// Menu: RCKIK mobile
// Description: Show filtered plan of mobile RCKIK busses
// Author: Jakub Olek
// Twitter: @JakubOlek
/** @type {import("@johnlindquist/kit")} */
function transform(node) {
// Edit that to filter locations that you're interested in
// has to be inside transform function - as it's being serialized and passed to browser
const filter = "Poznań";
const columns = [...node.querySelectorAll("td")];
if (columns[3].innerHTML.startsWith(filter)) {
return (
columns[0].querySelector("a").innerHTML +
" " +
columns[3].innerHTML +
" " +
columns[2].innerHTML
);
}
}
const pagination = await scrapeSelector(
"https://www.rckik.poznan.pl/najblizsze-wyjazdy?page=1",
".pagination li"
);
const numberOfPages = pagination.length;
let t = [];
for (let i = 1; i <= numberOfPages; i += 1) {
const result = await scrapeSelector(
`https://www.rckik.poznan.pl/najblizsze-wyjazdy?page=${i}`,
"#calendarTable tr:not(.header):not(.canceled)",
transform
);
t = t.concat(result);
}
div(
`<ul>${t
.filter(Boolean)
.map((date) => `<li>${date}</li>`)
.join("")}</ul>`,
"p-4"
);