Skip to content

Commit

Permalink
refactor: tách các hàm để lấy dữ liệu website khác tốt hơn
Browse files Browse the repository at this point in the history
  • Loading branch information
ooker777 committed Nov 5, 2024
1 parent 6ce3e71 commit e30d488
Show file tree
Hide file tree
Showing 10 changed files with 4,976 additions and 3,911 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,50 +11,64 @@ interface Website {
"Trang chủ"?: ThôngTinWebsiteCơBản;
"Bài đăng"?: ThôngTinWebsiteCơBản;
}

function táchTênTrongHtmlTitle(htmlTitle: string | undefined): string[] | [undefined, undefined] {
if (htmlTitle?.includes(" - ")) return htmlTitle.split(" - ");
if (htmlTitle?.includes(" | ")) return htmlTitle.split(" | ");
return [undefined, undefined];
}

/**
* Nếu là trang chủ thì slug là tên website bỏ hết dấu cách.
* Nếu không phải là trang chủ thì slug sẽ là phần cuối cùng trong pathname. Nếu phần cuối cùng đó có extension, và nó là `htm`, `html`, `php` thì bỏ đi, còn lại thì để lại
*/
function tạoSlugTừUrlWebsite(nguồn: URL | string | undefined, làTrangChủ = false) {
if (làTrangChủ && typeof nguồn === "string") return nguồn?.replace(/\s/g, "");

const { pathname } = nguồn as URL;
const pathnameWithoutTrailingSlash = pathname.slice(-1) === "/" ? pathname.slice(0, -1) : pathname;
const pathnameLastSection = pathnameWithoutTrailingSlash.split("/").slice(-1)[0];
const đuôiHTML = /\.(htm|html|php)$/;
const đuôiTậpTin = /\.(jpg|png|gif|pdf|doc|docx)$/;

let slug = pathnameLastSection;
if (đuôiHTML.test(pathnameLastSection)) slug = pathnameLastSection.replace(đuôiHTML, "");
if (đuôiTậpTin.test(pathnameLastSection)) slug = pathnameLastSection.replace(".", "");
return decodeURIComponent(slug);
}

/**
* Nếu pathname === "/" thì là trang chủ, còn không thì là bài đăng. Điều này có nghĩa là tên miền con (VD: menbership.ciovn.org) sẽ được tính là trang chủ
*/
export function thôngTinWebsite(metaTagUrlVàDocument: MetaTagUrlVàDocument): Website {
const { meta, document, url } = metaTagUrlVàDocument;
const { href, pathname } = url;
const { href, pathname, hostname } = url;
const htmlTitle = document.querySelector("title")?.textContent;
const htmlTitleSplit = htmlTitle?.split(" - ");
const [phầnTênBàiTrongHtmlTitle, phầnTênWebsiteTrongHtmlTitle] = táchTênTrongHtmlTitle(htmlTitle);
const metaTitle = meta.og?.title;

const tênWebsite = meta.og?.site_name || htmlTitleSplit?.[1]?.trim() || metaTitle || htmlTitle;
const subdomain = getSubdomain(href) || "";
const làTrangChủ = pathname === "/" && !["membership"].includes(subdomain);

if (làTrangChủ) {
const tênWebsite = meta.og?.site_name || phầnTênWebsiteTrongHtmlTitle?.trim() || metaTitle || htmlTitle;
return {
"Trang chủ": {
tên: tênWebsite,
tên: tênWebsite || hostname,
môTả: meta.og?.description || meta?.description || document.querySelector("p")?.textContent,
ảnh: meta.og?.image as string,
slug: tênWebsite?.replace(/\s/g, ""),
slug: tạoSlugTừUrlWebsite(tênWebsite, làTrangChủ),
},
};
} else {
const tênBàiĐăng = metaTitle || phầnTênBàiTrongHtmlTitle?.trim() || htmlTitle;
return {
"Bài đăng": {
tên: tênBàiĐăng || hostname,
môTả: meta.og?.description || meta?.description || document.querySelector("p")?.textContent,
ảnh: meta.og?.image as string,
slug: tạoSlugTừUrlWebsite(url),
},
};
}
const tênBàiĐăng = metaTitle || htmlTitleSplit?.[0].trim() || htmlTitle;
return {
"Bài đăng": {
tên: tênBàiĐăng,
môTả: meta.og?.description || meta?.description || document.querySelector("p")?.textContent,
ảnh: meta.og?.image as string,
slug: tạoSlugTừUrlWebsite(url),
},
};
/** Nếu */
function tạoSlugTừUrlWebsite(url: URL) {
const { pathname } = url;
const pathnameWithoutTrailingSlash = pathname.slice(-1) === "/" ? pathname.slice(0, -1) : pathname;
const pathnameLastSection = pathnameWithoutTrailingSlash.split("/").slice(-1)[0];
const đuôiHTML = /\.(htm|html|php)$/;
const đuôiTậpTin = /\.(jpg|png|gif|pdf|doc|docx)$/;

let slug = pathnameLastSection;
if (đuôiHTML.test(pathnameLastSection)) slug = pathnameLastSection.replace(đuôiHTML, "");
if (đuôiTậpTin.test(pathnameLastSection)) slug = pathnameLastSection.replace(".", "");
return decodeURIComponent(slug);
}
}
3 changes: 2 additions & 1 deletion Code chạy trên local, server, KV/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@
*/
import { kvSignal, readUnitSignal, writeUnitSignal } from "./Signal KV.ts";
import { kvGet, kvList } from "./Hàm cho KV.ts";
import { copyDữLiệuTrênDeployXuốngLocal, tạoBàiĐăng, tạoNơiĐăng, xoáDữLiệuTrênKv } from "./Tạo dữ liệu.ts";
import { tạoBàiĐăng, tạoNơiĐăng } from "./Tạo dữ liệu.ts";
import { tạoCache } from "./Hàm cho cache.ts";
import { VậtThểTiếpThị } from "../Code chạy trên client/Hàm và kiểu cho vật thể tiếp thị.ts";

const currentTime = Temporal.Now.plainTimeISO();
// import { chạyTrênDeployChứKhôngChạyTrênLocal, copyDữLiệuTrênDeployXuốngLocal, xoáDữLiệuTrênKv } from "./Tạo dữ liệu.ts";
// await chạyTrênDeployChứKhôngChạyTrênLocal();
// await copyDữLiệuTrênDeployXuốngLocal();

Expand Down
7,871 changes: 4,213 additions & 3,658 deletions Cấu hình và dữ liệu/Danh sách bài đăng tạo trên local.json

Large diffs are not rendered by default.

Loading

0 comments on commit e30d488

Please sign in to comment.