Skip to content

Instantly share code, notes, and snippets.

@IvanaGyro
Created December 23, 2022 18:56
Show Gist options
  • Save IvanaGyro/da94d1cbaa71a408d1c5f05a153a2e9d to your computer and use it in GitHub Desktop.
Save IvanaGyro/da94d1cbaa71a408d1c5f05a153a2e9d to your computer and use it in GitHub Desktop.
找 Kobo 上面最便宜的國家
/**
* 1. Get current rates from https://www.xe.com/api/protected/midmarket-converter/
* 2. Replace "rates" object with the correct currency rates.
* 3. Select a book on Kobo.
* 4. Click the country flag at the top right corner.
* 5. Execute this script.
*/
rates = {
ADA: 3.8456167243,
AED: 3.6725,
AFN: 88.4769615132,
ALL: 107.5801371358,
AMD: 391.7775173811,
ANG: 1.7899896574,
AOA: 510.0081478307,
ARS: 174.8236563613,
ATS: 12.9593695667,
AUD: 1.4902714495,
AWG: 1.79,
AZM: 8499.6974068942,
AZN: 1.6999394814,
BAM: 1.8419891848,
BBD: 2,
BCH: 0.0097832721,
BDT: 106.3582698746,
BEF: 37.9918804375,
BGN: 1.8419891848,
BHD: 0.376,
BIF: 2062.6433832318,
BMD: 1,
BND: 1.3504175257,
BOB: 6.9072139218,
BRL: 5.163976781,
BSD: 1,
BTC: 0.0000593622,
BTN: 82.8223696346,
BWP: 12.9525551151,
BYN: 2.5047511507,
BYR: 25047.5115072178,
BZD: 2.0147192473,
CAD: 1.3603732307,
CDF: 2034.326291625,
CHF: 0.9333058987,
CLF: 0.0380809882,
CLP: 878.0332064486,
CNH: 7.0038881072,
CNY: 6.9917791547,
COP: 4734.826911074,
CRC: 582.6955705799,
CUC: 1,
CUP: 23.9972434316,
CVE: 103.8516371098,
CYP: 0.5512076091,
CZK: 22.791026954,
DEM: 1.8419891848,
DJF: 177.7684480485,
DKK: 7.0029442293,
DOGE: 12.928637459,
DOP: 55.7895980973,
DOT: 0.222617892,
DZD: 137.5875230166,
EEK: 14.7359134784,
EGP: 24.7491820466,
ERN: 15,
ESP: 156.701355692,
ETB: 53.597990201,
ETH: 0.0008198803,
EUR: 0.9417941154,
FIM: 5.599653526,
FJD: 2.2318419754,
FKP: 0.8306037044,
FRF: 6.1777644258,
GBP: 0.8306037044,
GEL: 2.6896342286,
GGP: 0.8306037044,
GHC: 92764.4335765763,
GHS: 9.2764433577,
GIP: 0.8306037044,
GMD: 61.8915758688,
GNF: 8629.1046692298,
GRD: 320.9163448369,
GTQ: 7.8565505774,
GYD: 208.8325878494,
HKD: 7.8046987022,
HNL: 24.6729025109,
HRK: 7.1005729862,
HTG: 146.0935962995,
HUF: 376.5475808232,
IDR: 15589.6419726558,
IEP: 0.7417231407,
ILS: 3.5020674043,
IMP: 0.8306037044,
INR: 82.8223696346,
IQD: 1459.1574318561,
IRR: 41636.5702676274,
ISK: 143.4381949011,
ITL: 1823.5676919073,
JEP: 0.8306037044,
JMD: 152.6791075809,
JOD: 0.709,
JPY: 132.8874400049,
KES: 123.2909596426,
KGS: 85.678596494,
KHR: 4112.6783683926,
KMF: 463.3323319373,
KPW: 899.9099168824,
KRW: 1281.0673893522,
KWD: 0.3064827815,
KYD: 0.8199870236,
KZT: 461.7102073563,
LAK: 17272.5011774459,
LBP: 1507.5,
LINK: 0.1671262295,
LKR: 365.488306107,
LRD: 154.3696471598,
LSL: 17.0141068708,
LTC: 0.015237124,
LTL: 3.2518267218,
LUF: 37.9918804375,
LUNA: 7.13128503703983e40,
LVL: 0.6618929043,
LYD: 4.8207639054,
MAD: 10.5018197051,
MDL: 19.2773995083,
MGA: 4443.5397349128,
MGF: 22217.6986745641,
MKD: 57.998330228,
MMK: 2099.8282797932,
MNT: 3433.8362874812,
MOP: 8.0388396633,
MRO: 372.1456194658,
MRU: 37.2145619466,
MTL: 0.4043122138,
MUR: 44.2117526658,
MVR: 15.4107183181,
MWK: 1028.0352244005,
MXN: 19.3967479775,
MXV: 2.758460685,
MYR: 4.4246984602,
MZM: 64042.8989959457,
MZN: 64.0428989959,
NAD: 17.0141068708,
NGN: 446.0888231722,
NIO: 36.4137863467,
NLG: 2.0754411101,
NOK: 9.8663703534,
NPR: 132.5779081926,
NZD: 1.5903853002,
OMR: 0.3849538615,
PAB: 1,
PEN: 3.8165000182,
PGK: 3.5210923462,
PHP: 55.2341808334,
PKR: 226.3691539969,
PLN: 4.3714187244,
PTE: 188.8127678521,
PYG: 7296.2181201286,
QAR: 3.64,
ROL: 46244.3001887193,
RON: 4.6244300189,
RSD: 110.4652966219,
RUB: 68.7950965919,
RWF: 1067.8394000382,
SAR: 3.75,
SBD: 8.2573420562,
SCR: 14.2249470298,
SDD: 57235.533221287,
SDG: 572.3553322129,
SEK: 10.5197650693,
SGD: 1.3504175257,
SHP: 0.8306037044,
SIT: 225.6915418246,
SKK: 28.3724895218,
SLE: 18.8642875357,
SLL: 18864.2875356555,
SOS: 569.1151057231,
SPL: 0.166666666,
SRD: 31.5530918221,
SRG: 31553.0918221314,
STD: 23099.67002775,
STN: 23.0996700278,
SVC: 8.75,
SYP: 2512.4276806864,
SZL: 17.0141068708,
THB: 34.7626392404,
TJS: 10.2025056681,
TMM: 17468.3271860555,
TMT: 3.4936654372,
TND: 3.1156579743,
TOP: 2.3600484299,
TRL: 18683615.126171418,
TRY: 18.6836151262,
TTD: 6.7871310728,
TVD: 1.4902714495,
TWD: 30.7574728705,
TZS: 2333.9631932529,
UAH: 36.8747555515,
UGX: 3637.4756211684,
UNI: 19.0375055386,
USD: 1,
UYU: 38.604508423,
UZS: 11225.5993750431,
VAL: 1823.5676919073,
VEB: 1641540077.0165398,
VED: 16.4154007702,
VEF: 1641540.0770165399,
VES: 16.4154007702,
VND: 23526.8727306767,
VUV: 119.3643230661,
WST: 2.7275952107,
XAF: 617.7764425831,
XAG: 0.0421805017,
XAU: 0.0005569,
XBT: 0.0000593622,
XCD: 2.6999138387,
XDR: 0.7514053202,
XLM: 13.174815167,
XOF: 617.7764425831,
XPD: 0.0005851886,
XPF: 112.3859326299,
XPT: 0.0010011189,
XRP: 2.8465365428,
YER: 250.1564306194,
ZAR: 17.0141068708,
ZMK: 18005.8477021466,
ZMW: 18.0058477021,
ZWD: 361.9,
ZWL: 671.810102792,
};
my_read_page = async (url, index) => {
let response = await fetch(url, {});
let elm = document.createElement("html");
elm.innerHTML = await response.text();
let price = elm.querySelector('[property="og:price"]').content;
let current = elm.querySelector('[property="og:currency_code"]').content;
console.log(`${index} ${url} ${price}${current}`);
return {
price,
current,
url,
};
};
(async () => {
let urls = Array.from(document.querySelectorAll("a.country")).map(
(el) => el.href
);
let results = await Promise.allSettled(
urls.map((u, i) => my_read_page(u, i))
);
results = results.map((r) => r.value);
results.sort((a, b) => {
let to_ntd = (c) =>
(Number(c.price.replace(",", ".")) / rates[c.current]) * rates.TWD;
a.ntd = to_ntd(a);
b.ntd = to_ntd(b);
return a.ntd - b.ntd;
});
console.log(results.map((r) => `${r.ntd} ${r.url}`));
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment