google-photos-album-image-url-fetch
Version:
extract public image url from google photos shared album url
78 lines • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isContainData = void 0;
exports.getSharedAlbumHtml = getSharedAlbumHtml;
exports.parsePhase1 = parsePhase1;
exports.parsePhase2 = parsePhase2;
exports.parsePhase3 = parsePhase3;
const gaxios_1 = require("gaxios");
const json5_1 = require("json5");
async function getSharedAlbumHtml(albumSharedurl, signal) {
return (0, gaxios_1.request)({
url: albumSharedurl,
retryConfig: { retry: 4, retryDelay: 1000 },
retry: true,
signal: signal,
}).then(r => r.data);
}
function parsePhase1(input) {
const re = /(?<=AF_initDataCallback\()(?=.*data)(\{[\s\S]*?)(\);<\/script>)/g;
return [...input.matchAll(re)].reduce((a, b) => (a.length > b[1].length ? a : b[1]), '');
}
function parsePhase2(input) {
try {
return (0, json5_1.parse)(input);
}
catch (_) {
return null;
}
}
const isContainData = (o) => typeof o === 'object' && o != null && 'data' in o;
exports.isContainData = isContainData;
const rawIsArray = Array.isArray;
const isArray = (a) => rawIsArray(a);
function parsePhase3(input) {
if (!(0, exports.isContainData)(input)) {
return null;
}
const d = input.data;
if (!isArray(d) || d.length < 1) {
return null;
}
const arr = d[1];
if (!isArray(arr)) {
return null;
}
return arr
.map(e => {
if (!isArray(e) || e.length < 6) {
return null;
}
const uid = e[0];
const imageUpdateDate = e[2];
const albumAddDate = e[5];
if (typeof uid !== 'string' || typeof imageUpdateDate !== 'number' || typeof albumAddDate !== 'number') {
return null;
}
const detail = e[1];
if (!isArray(detail) || detail.length < 3) {
return null;
}
const url = detail[0];
const width = detail[1];
const height = detail[2];
if (typeof url !== 'string' || typeof width !== 'number' || typeof height !== 'number') {
return null;
}
return {
uid: uid,
url: url,
width: width,
height: height,
imageUpdateDate: imageUpdateDate,
albumAddDate: albumAddDate,
};
})
.filter((e) => !(null === e));
}
//# sourceMappingURL=impl.js.map