1

Gestion des liens intéressants simplifiée

This commit is contained in:
2025-11-10 16:57:38 +01:00
parent a8e88f60ab
commit 0dbcd54df5
2 changed files with 29 additions and 113 deletions

View File

@@ -1,96 +0,0 @@
"48940057": content/interets/liens-interessants/2023/08/22/48940057
"79347191": content/interets/liens-interessants/2023/04/28/79347191
"81965751": content/interets/liens-interessants/2023/10/02/81965751
1755cc4e: content/interets/liens-interessants/2022/03/09/1755cc4e
f71dac00: content/interets/liens-interessants/2022/03/09/f71dac00
bed52095: content/interets/liens-interessants/2022/03/13/bed52095
98fa6882: content/interets/liens-interessants/2022/03/17/98fa6882
60632c04: content/interets/liens-interessants/2022/03/20/60632c04
24d2f499: content/interets/liens-interessants/2022/03/24/24d2f499
a0419e22: content/interets/liens-interessants/2022/04/03/a0419e22
a95b2646: content/interets/liens-interessants/2022/04/07/a95b2646
dcf6350f: content/interets/liens-interessants/2022/04/17/dcf6350f
eb290b9d: content/interets/liens-interessants/2022/04/20/eb290b9d
880ad1aa: content/interets/liens-interessants/2022/04/25/880ad1aa
7fe1f197: content/interets/liens-interessants/2022/04/30/7fe1f197
db211ab2: content/interets/liens-interessants/2022/04/30/db211ab2
020a0de7: content/interets/liens-interessants/2022/05/02/020a0de7
3ce2f43d: content/interets/liens-interessants/2022/05/10/3ce2f43d
"98660e45": content/interets/liens-interessants/2022/05/13/98660e45
564196c4: content/interets/liens-interessants/2022/05/14/564196c4
c647da3a: content/interets/liens-interessants/2022/05/22/c647da3a
7a84865a: content/interets/liens-interessants/2022/05/23/7a84865a
d37ef948: content/interets/liens-interessants/2022/05/23/d37ef948
ad6e8f37: content/interets/liens-interessants/2022/05/24/ad6e8f37
161df027: content/interets/liens-interessants/2022/05/27/161df027
beff8361: content/interets/liens-interessants/2022/05/27/beff8361
9bfcaf3c: content/interets/liens-interessants/2022/05/28/9bfcaf3c
208cc403: content/interets/liens-interessants/2022/06/13/208cc403
b2fdb2ff: content/interets/liens-interessants/2022/06/15/b2fdb2ff
16be2908: content/interets/liens-interessants/2022/06/17/16be2908
2b970d43: content/interets/liens-interessants/2022/06/22/2b970d43
cbbe32ec: content/interets/liens-interessants/2022/07/04/cbbe32ec
536ac204: content/interets/liens-interessants/2022/07/06/536ac204
c0765dc0: content/interets/liens-interessants/2022/07/06/c0765dc0
2de4426d: content/interets/liens-interessants/2022/07/09/2de4426d
a6bed7d5: content/interets/liens-interessants/2022/07/13/a6bed7d5
a905d2b5: content/interets/liens-interessants/2022/07/13/a905d2b5
"7133e484": content/interets/liens-interessants/2022/07/20/7133e484
ecd6018d: content/interets/liens-interessants/2022/08/01/ecd6018d
705a0002: content/interets/liens-interessants/2022/08/03/705a0002
7c59c7ba: content/interets/liens-interessants/2022/08/10/7c59c7ba
b80eb480: content/interets/liens-interessants/2022/08/26/b80eb480
a17f18de: content/interets/liens-interessants/2022/09/01/a17f18de
9bc0b132: content/interets/liens-interessants/2022/09/23/9bc0b132
5f6856b8: content/interets/liens-interessants/2022/10/05/5f6856b8
9d1e2a45: content/interets/liens-interessants/2022/10/10/9d1e2a45
56bd6010: content/interets/liens-interessants/2022/10/22/56bd6010
8bf67997: content/interets/liens-interessants/2022/11/25/8bf67997
08dde607: content/interets/liens-interessants/2022/12/05/08dde607
a8d63150: content/interets/liens-interessants/2022/12/23/a8d63150
f56d3ee9: content/interets/liens-interessants/2023/01/03/f56d3ee9
99b5481b: content/interets/liens-interessants/2023/01/10/99b5481b
5e29c1c8: content/interets/liens-interessants/2023/01/15/5e29c1c8
81d40971: content/interets/liens-interessants/2023/01/22/81d40971
d789e49c: content/interets/liens-interessants/2023/02/06/d789e49c
72f33e07: content/interets/liens-interessants/2023/02/07/72f33e07
c4783d77: content/interets/liens-interessants/2023/02/22/c4783d77
"5e029191": content/interets/liens-interessants/2023/03/08/5e029191
e59f0452: content/interets/liens-interessants/2023/03/17/e59f0452
6d41dadc: content/interets/liens-interessants/2023/03/20/6d41dadc
77f1e9d4: content/interets/liens-interessants/2023/04/09/77f1e9d4
09769bd4: content/interets/liens-interessants/2023/04/17/09769bd4
8b249d95: content/interets/liens-interessants/2023/04/23/8b249d95
09b47bf6: content/interets/liens-interessants/2023/04/26/09b47bf6
a8530aa9: content/interets/liens-interessants/2023/04/28/a8530aa9
3c06184a: content/interets/liens-interessants/2023/05/15/3c06184a
baedfe20: content/interets/liens-interessants/2023/05/18/baedfe20
019970ac: content/interets/liens-interessants/2023/05/21/019970ac
25aa8925: content/interets/liens-interessants/2023/06/04/25aa8925
31f3880e: content/interets/liens-interessants/2023/06/04/31f3880e
bd8036cc: content/interets/liens-interessants/2023/06/09/bd8036cc
36f27db6: content/interets/liens-interessants/2023/06/16/36f27db6
4da14199: content/interets/liens-interessants/2023/06/23/4da14199
a8972f33: content/interets/liens-interessants/2023/06/23/a8972f33
7bffdf31: content/interets/liens-interessants/2023/07/21/7bffdf31
b141fc2c: content/interets/liens-interessants/2023/07/22/b141fc2c
3ebdad4c: content/interets/liens-interessants/2023/08/11/3ebdad4c
c115201e: content/interets/liens-interessants/2023/08/15/c115201e
42a02e30: content/interets/liens-interessants/2023/08/17/42a02e30
fd35e58b: content/interets/liens-interessants/2023/09/05/fd35e58b
efc348f6: content/interets/liens-interessants/2023/09/13/efc348f6
b2002762: content/interets/liens-interessants/2023/09/15/b2002762
3606b246: content/interets/liens-interessants/2023/09/23/3606b246
ef3047b0: content/interets/liens-interessants/2023/10/31/ef3047b0
b6b440cc: content/interets/liens-interessants/2024/01/29/b6b440cc
2dbbc8d2: content/interets/liens-interessants/2024/02/14/2dbbc8d2
de37fe6f: content/interets/liens-interessants/2024/02/15/de37fe6f
1992436f: content/interets/liens-interessants/2024/02/22/1992436f
ad911ebf: content/interets/liens-interessants/2024/02/22/ad911ebf
b84f6ada: content/interets/liens-interessants/2024/03/01/b84f6ada
63a52c6e: content/interets/liens-interessants/2024/03/25/63a52c6e
0836adc7: content/interets/liens-interessants/2025/04/07/0836adc7
5639e4f1: content/interets/liens-interessants/2025/05/28/5639e4f1
3add12ff: content/interets/liens-interessants/2025/07/07/3add12ff
bbe27b49: content/interets/liens-interessants/2025/09/08/bbe27b49
64ed6c52: content/interets/liens-interessants/2025/11/09/64ed6c52

View File

@@ -9,7 +9,7 @@ const YAML = require("yaml");
const { getArchiveUrl, saveToArchive } = require("./lib/archive"); const { getArchiveUrl, saveToArchive } = require("./lib/archive");
const { scrapePage } = require("./lib/puppeteer"); const { scrapePage } = require("./lib/puppeteer");
const KNOWN_LINKS_FILE = "data/known_links.yaml"; // YAML file with { hash: path } const LINKS_ROOT = path.join("content", "interets", "liens-interessants");
if (process.argv.length < 3) { if (process.argv.length < 3) {
console.error("Usage: add_link.js <URL> [optional: YYYY-MM-DD]"); console.error("Usage: add_link.js <URL> [optional: YYYY-MM-DD]");
@@ -22,22 +22,38 @@ const customDate = process.argv[3] || null;
// Generate an MD5 hash of the URL // Generate an MD5 hash of the URL
const urlHash = crypto.createHash("md5").update(url).digest("hex").slice(0, 8); const urlHash = crypto.createHash("md5").update(url).digest("hex").slice(0, 8);
// Ensure the known_links file is stored at the correct location
const hugoRoot = path.resolve(process.cwd()); const hugoRoot = path.resolve(process.cwd());
const knownLinksPath = path.join(hugoRoot, KNOWN_LINKS_FILE); const interestingLinksRoot = path.join(hugoRoot, LINKS_ROOT);
// Load known links from YAML function findExistingLinkBundle(hash) {
let knownLinks = {}; if (!fs.existsSync(interestingLinksRoot)) {
if (fs.existsSync(knownLinksPath)) { return null;
try {
knownLinks = YAML.parse(fs.readFileSync(knownLinksPath, "utf8")) || {};
} catch (err) {
console.error(`❌ Unable to parse ${KNOWN_LINKS_FILE}: ${err.message}`);
process.exit(1);
} }
const stack = [interestingLinksRoot];
while (stack.length > 0) {
const current = stack.pop();
if (path.basename(current) === hash) {
return current;
}
let entries = [];
try {
entries = fs.readdirSync(current, { withFileTypes: true });
} catch (error) {
continue;
}
for (const entry of entries) {
if (entry.isDirectory()) {
stack.push(path.join(current, entry.name));
}
}
}
return null;
} }
if (knownLinks[urlHash]) {
console.log(`⚠ Link already exists: ${url}`); const duplicateBundlePath = findExistingLinkBundle(urlHash);
if (duplicateBundlePath) {
const relative = path.relative(hugoRoot, duplicateBundlePath);
console.log(`⚠ Link already exists at ${relative}: ${url}`);
process.exit(0); process.exit(0);
} }
@@ -177,10 +193,6 @@ file: "images/screenshot.png"
fs.writeFileSync(metadataPath, metadataContent); fs.writeFileSync(metadataPath, metadataContent);
console.log(`✔ Metadata saved: ${metadataPath}`); console.log(`✔ Metadata saved: ${metadataPath}`);
// Append the hash to known_links.yaml
knownLinks[urlHash] = path.relative(hugoRoot, bundlePath);
fs.writeFileSync(knownLinksPath, YAML.stringify(knownLinks));
console.log(`🎉 Link successfully added! Bundle path: ${bundlePath}`); console.log(`🎉 Link successfully added! Bundle path: ${bundlePath}`);
console.log(bundlePath); console.log(bundlePath);
})(); })();