Add initial files for election coordination and integrity assessment, including .gitignore and multiple JavaScript files for scraping data. Also, include JSON files for menu data and HTML debug pages.

This commit is contained in:
MacM1 2026-01-13 14:11:14 +07:00
parent fe60294656
commit a5b7c145e9
17 changed files with 24050 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,217 @@
// หน้าแรก > งานบริการ > ศูนย์ประสานงานการเลือกตั้งสมาชิกสภาเทศบาลและนายกเทศมนตรี
const { execSync } = require("child_process");
const cheerio = require("cheerio");
const fs = require("fs");
const path = require("path");
const axios = require("axios").default;
const BASE = "https://ladsawai.go.th";
const OUT = path.join(process.cwd(), "ศูนย์ประสานงานการเลือกตั้งสมาชิกสภาเทศบาลและนายกเทศมนตรี");
fs.mkdirSync(OUT, { recursive: true });
function curlHtml(url) {
return execSync(
`curl -L -s "${url}" -H "User-Agent: Mozilla/5.0" -H "Accept-Language: th-TH,th;q=0.9"`,
{ encoding: "utf8", maxBuffer: 30 * 1024 * 1024 }
);
}
function absUrl(href) {
if (!href) return null;
if (href.startsWith("http")) return href;
if (href.startsWith("/")) return BASE + href;
return BASE + "/" + href;
}
function buildUrl(menuId, page) {
return `${BASE}/public/list/data/index/menu/${menuId}/page/${page}`;
}
function detectTotalPages($) {
let maxPage = 1;
$("a").each((_, a) => {
const t = $(a).text().trim();
if (/^\d+$/.test(t)) maxPage = Math.max(maxPage, Number(t));
});
return maxPage;
}
function extractFileLinksFromDetail(detailUrl) {
const html = curlHtml(detailUrl);
const $ = cheerio.load(html);
const files = [];
$("a.uploadconfig_link").each((_, a) => {
const el = $(a);
const href = el.attr("href");
const dataHref = el.attr("data-href");
const fileUrl = absUrl(dataHref || href);
if (!fileUrl) return;
files.push({
text: el.text().replace(/\s+/g, " ").trim() || null,
url: fileUrl,
});
});
// fallback: ลิงก์ไฟล์แบบตรง ๆ
$("a[href]").each((_, a) => {
const href = $(a).attr("href");
const u = absUrl(href);
if (!u) return;
if (/\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar)(\?|$)/i.test(u)) {
if (!files.some((f) => f.url === u)) {
files.push({ text: $(a).text().trim() || null, url: u });
}
}
});
return files;
}
// ✅ ยิง api /status/1/ เพื่อเอา path จริง
async function resolveRealFilePath(fileUrl) {
try {
// กันกรณีมี / ท้ายอยู่แล้ว
const statusUrl = fileUrl.replace(/\/$/, "") + "/status/1/";
const res = await axios.get(statusUrl, { timeout: 30000 });
return res?.data?.path || null;
} catch (e) {
return null;
}
}
// ✅ limit concurrency แบบง่าย (กันยิงหนักเกิน)
async function mapLimit(arr, limit, mapper) {
const ret = [];
let i = 0;
async function worker() {
while (i < arr.length) {
const idx = i++;
ret[idx] = await mapper(arr[idx], idx);
}
}
const workers = Array.from({ length: Math.min(limit, arr.length) }, worker);
await Promise.all(workers);
return ret;
}
async function scrapeOnePage(menuId, page, saveHtml = false) {
const url = buildUrl(menuId, page);
const html = curlHtml(url);
if (saveHtml) {
fs.writeFileSync(
path.join(OUT, `debug-menu-${menuId}-page-${page}.html`),
html,
"utf8"
);
}
const $ = cheerio.load(html);
// ✅ แปลง rows เป็น array ก่อน
const rows = $(".row.data-row").toArray();
// ✅ ประมวลผลแบบมี limit (เช่น 5 concurrent)
const items = (await mapLimit(rows, 5, async (row) => {
const el = $(row);
const a = el.find("a.listdataconfig_link[href]").first();
if (!a.length) return null;
const title =
a.find("label.font-weight").text().replace(/\s+/g, " ").trim() ||
a.text().replace(/\s+/g, " ").trim();
if (!title) return null;
const detailUrl = absUrl(a.attr("href"));
let files = [];
let realPath = null;
try {
if (detailUrl) files = extractFileLinksFromDetail(detailUrl);
const firstFileUrl = files?.[0]?.url ? absUrl(files[0].url) : null;
if (firstFileUrl) {
realPath = await resolveRealFilePath(firstFileUrl);
}
} catch (e) {
files = [];
realPath = null;
}
return {
title,
detailUrl: detailUrl || null,
fileUrl: files?.[0]?.url ? absUrl(files[0].url) : null, // ไฟล์จากหน้า detail
filePath: `https://ladsawai.go.th/public/` + realPath, // ✅ ของจริงจาก api /status/1/
sourcePage: page,
sourceUrl: url,
};
}))
.filter(Boolean); // ตัด null ออก
const output = {
source: url,
scrapedAt: new Date().toISOString(),
menuId,
page,
count: items.length,
items,
};
fs.writeFileSync(
path.join(OUT, `menu-${menuId}-page-${page}.json`),
JSON.stringify(output, null, 2),
"utf8"
);
console.log(`✅ page ${page} -> items ${items.length}`);
return { $, items };
}
(async function main() {
const menuId = 1543;
const first = await scrapeOnePage(menuId, 1, true);
const totalPages = detectTotalPages(first.$);
console.log("✅ totalPages =", totalPages);
const all = [];
const seen = new Set();
function addItems(items) {
for (const it of items) {
const key = `${it.title}|${it.detailUrl || ""}|${it.filePath || ""}`;
if (seen.has(key)) continue;
seen.add(key);
all.push(it);
}
}
addItems(first.items);
for (let p = 2; p <= totalPages; p++) {
const { items } = await scrapeOnePage(menuId, p, false);
addItems(items);
}
const merged = {
menuId,
totalPages,
scrapedAt: new Date().toISOString(),
totalItems: all.length,
items: all,
};
const outAll = path.join(OUT, `menu-${menuId}-all.json`);
fs.writeFileSync(outAll, JSON.stringify(merged, null, 2), "utf8");
console.log("🎉 Saved all:", outAll);
console.log("🎉 Total unique:", all.length);
})();

View File

@ -0,0 +1,249 @@
// หน้าแรก > งานบริการ > การประเมินคุณธรรม และความโปร่งใส (ITA)
const { execSync } = require("child_process");
const cheerio = require("cheerio");
const fs = require("fs");
const path = require("path");
const axios = require("axios").default;
const BASE = "https://ladsawai.go.th";
const OUT = path.join(process.cwd(), "การประเมินคุณธรรม และความโปร่งใส (ITA)");
fs.mkdirSync(OUT, { recursive: true });
function curlHtml(url) {
return execSync(
`curl -L -s "${url}" -H "User-Agent: Mozilla/5.0" -H "Accept-Language: th-TH,th;q=0.9"`,
{ encoding: "utf8", maxBuffer: 30 * 1024 * 1024 }
);
}
function absUrl(href) {
if (!href) return null;
if (href.startsWith("http")) return href;
if (href.startsWith("/")) return BASE + href;
return BASE + "/" + href;
}
function buildUrl(menuId, page) {
return `${BASE}/public/list/data/index/menu/${menuId}/page/${page}`;
}
function detectTotalPages($) {
let maxPage = 1;
$("a").each((_, a) => {
const t = $(a).text().trim();
if (/^\d+$/.test(t)) maxPage = Math.max(maxPage, Number(t));
});
return maxPage;
}
function extractFileLinksFromDetail(detailUrl) {
const html = curlHtml(detailUrl);
const $ = cheerio.load(html);
const files = [];
$("a.uploadconfig_link").each((_, a) => {
const el = $(a);
const href = el.attr("href");
const dataHref = el.attr("data-href");
const fileUrl = absUrl(dataHref || href);
if (!fileUrl) return;
files.push({
text: el.text().replace(/\s+/g, " ").trim() || null,
url: fileUrl,
});
});
// fallback: ลิงก์ไฟล์แบบตรง ๆ
$("a[href]").each((_, a) => {
const href = $(a).attr("href");
const u = absUrl(href);
if (!u) return;
if (/\.(pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar)(\?|$)/i.test(u)) {
if (!files.some((f) => f.url === u)) {
files.push({ text: $(a).text().trim() || null, url: u });
}
}
});
return files;
}
// ✅ ยิง api /status/1/ เพื่อเอา path จริง
async function resolveRealFilePath(fileUrl) {
try {
// กันกรณีมี / ท้ายอยู่แล้ว
const statusUrl = fileUrl.replace(/\/$/, "") + "/status/1/";
const res = await axios.get(statusUrl, { timeout: 30000 });
return res?.data?.path || null;
} catch (e) {
return null;
}
}
// ✅ limit concurrency แบบง่าย (กันยิงหนักเกิน)
async function mapLimit(arr, limit, mapper) {
const ret = [];
let i = 0;
async function worker() {
while (i < arr.length) {
const idx = i++;
ret[idx] = await mapper(arr[idx], idx);
}
}
const workers = Array.from({ length: Math.min(limit, arr.length) }, worker);
await Promise.all(workers);
return ret;
}
async function scrapeOnePage(menuId, page, saveHtml = false) {
const url = buildUrl(menuId, page);
const html = curlHtml(url);
if (saveHtml) {
fs.writeFileSync(
path.join(OUT, `debug-menu-${menuId}-page-${page}.html`),
html,
"utf8"
);
}
const $ = cheerio.load(html);
// ✅ แปลง rows เป็น array ก่อน
const rows = $(".row.data-row").toArray();
// ✅ ประมวลผลแบบมี limit (เช่น 5 concurrent)
const items = (await mapLimit(rows, 5, async (row) => {
const el = $(row);
const a = el.find("a.listdataconfig_link[href]").first();
if (!a.length) return null;
const title =
a.find("label.font-weight").text().replace(/\s+/g, " ").trim() ||
a.text().replace(/\s+/g, " ").trim();
if (!title) return null;
const detailUrl = absUrl(a.attr("href"));
let files = [];
let realPath = null;
try {
if (detailUrl) files = extractFileLinksFromDetail(detailUrl);
const firstFileUrl = files?.[0]?.url ? absUrl(files[0].url) : null;
if (firstFileUrl) {
realPath = await resolveRealFilePath(firstFileUrl);
}
} catch (e) {
files = [];
realPath = null;
}
let detailHtmlPath = ''
try {
// Extract id and menu from URL: /public/list/data/detail/id/{id}/menu/{menu}/page/{page}
const urlMatch = detailUrl.match(/\/id\/(\d+)\/menu\/(\d+)/);
const id = urlMatch ? urlMatch[1] : null;
// const menu = urlMatch ? urlMatch[2] : null;
const detailPageHtml = curlHtml(detailUrl);
detailHtmlPath = `debug-menu-${menuId}-detail-${id}.html`
fs.writeFileSync(
path.join(OUT, detailHtmlPath),
detailPageHtml,
"utf8"
);
if(realPath == null){
return {
title,
detailUrl: detailUrl || null,
detailPageHtml: detailHtmlPath, // ไฟล์จากหน้า detail
sourcePage: page,
sourceUrl: url,
};
}
} catch (error) {
console.error('error :', error)
detailHtmlPath = ''
}
return {
title,
detailUrl: detailUrl || null,
fileUrl: files?.[0]?.url ? absUrl(files[0].url) : null, // ไฟล์จากหน้า detail
filePath: `https://ladsawai.go.th/public/` + realPath, // ✅ ของจริงจาก api /status/1/
detailPageHtml: detailHtmlPath ?? undefined, // ไฟล์จากหน้า detail
sourcePage: page,
sourceUrl: url,
};
}))
.filter(Boolean); // ตัด null ออก
const output = {
source: url,
scrapedAt: new Date().toISOString(),
menuId,
page,
count: items.length,
items,
};
fs.writeFileSync(
path.join(OUT, `menu-${menuId}-page-${page}.json`),
JSON.stringify(output, null, 2),
"utf8"
);
console.log(`✅ page ${page} -> items ${items.length}`);
return { $, items };
}
(async function main() {
const menuId = 1262;
const first = await scrapeOnePage(menuId, 1, true);
const totalPages = detectTotalPages(first.$);
console.log("✅ totalPages =", totalPages);
const all = [];
const seen = new Set();
function addItems(items) {
for (const it of items) {
const key = `${it.title}|${it.detailUrl || ""}|${it.filePath || ""}`;
if (seen.has(key)) continue;
seen.add(key);
all.push(it);
}
}
addItems(first.items);
for (let p = 2; p <= totalPages; p++) {
const { items } = await scrapeOnePage(menuId, p, false);
addItems(items);
}
const merged = {
menuId,
totalPages,
scrapedAt: new Date().toISOString(),
totalItems: all.length,
items: all,
};
const outAll = path.join(OUT, `menu-${menuId}-all.json`);
fs.writeFileSync(outAll, JSON.stringify(merged, null, 2), "utf8");
console.log("🎉 Saved all:", outAll);
console.log("🎉 Total unique:", all.length);
})();

View File

@ -0,0 +1,43 @@
{
"breadcrumb": "หน้าแรก > งานบริการ > ประมวลจริยธรรม",
"menuUrl": "https://ladsawai.go.th/public/list/data/index/menu/1287",
"scrapedAt": "2026-01-13T03:07:30.792Z",
"totalItems": 5,
"items": [
{
"title": "การจัดประชุมมอบนโยบายและชี้แจงแนวทางการปฏิบัติราชการให้แก่พนักงานเทศบาลและพนักงานจ้าง เทศบาลเมืองลาดสวาย ประจำปีงบประมาณ พ.ศ. 2568",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/3790/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_1550/files_3790_2.pdf",
"sourcePage": 1,
"downloadCount": 0
},
{
"title": "ประมวลจริยธรรมผู้บริหารท้องถิ่นและประมวลจริยธรรมสมาชิกสภาท้องถิ่น",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/3790/seq/2",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_1550/files_3790_1.pdf",
"sourcePage": 1,
"downloadCount": 11
},
{
"title": "ประมวลจริยธรรมข้าราชการ พนักงานจ้าง ปี 67-69",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/9201/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_1550/files_9201_1.pdf",
"sourcePage": 1,
"downloadCount": 1
},
{
"title": "ข้อกำหนดจริยธรรมของข้าราชการ พนักงานจ้าง",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/9202/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_1550/files_9202_1.pdf",
"sourcePage": 1,
"downloadCount": 1
},
{
"title": "เจตนารมณ์ร่วมกันของหน่วยงาน",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/9203/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_1550/files_9203_1.pdf",
"sourcePage": 1,
"downloadCount": 0
}
]
}

View File

@ -0,0 +1,63 @@
{
"menuId": 1262,
"totalPages": 1,
"scrapedAt": "2026-01-13T07:08:01.360Z",
"totalItems": 7,
"items": [
{
"title": "การประเมินคุณธรรม และความโปร่งใส (ITA) พ.ศ.2568",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3404/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-3404.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินคุณธรรมและความโปร่งใส (ITA) พ.ศ.2567",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/2990/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-2990.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินคุณธรรมและความโปร่งใส (ITA) พ.ศ.2566",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/1988/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-1988.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินคุณธรรมและความโปร่งใส (ITA) พ.ศ.2565",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/1373/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-1373.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "ขั้นตอนการดำเนินงานการกรอกข้อมูล (Integrity and Transparency Assessment : ITA)",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/830/menu/1262/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/2137/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_830/files_2137_1.pdf",
"detailPageHtml": "debug-menu-1262-detail-830.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "รายงานผลการประชุมการประเมินคุณธรรมและความโปร่งใสในการดำเนินงานของหน่วยงานภาครัฐ (ITA)",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/829/menu/1262/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/2135/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_829/files_2135_1.pdf",
"detailPageHtml": "debug-menu-1262-detail-829.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินความเสี่ยงการทุจริต (ITA) ประจำปีงบประมาณ พ.ศ. 2562",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/821/menu/1262/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/2119/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_821/files_2119_1.pdf",
"detailPageHtml": "debug-menu-1262-detail-821.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
}
]
}

View File

@ -0,0 +1,64 @@
{
"source": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1",
"scrapedAt": "2026-01-13T07:08:01.347Z",
"menuId": 1262,
"page": 1,
"count": 7,
"items": [
{
"title": "การประเมินคุณธรรม และความโปร่งใส (ITA) พ.ศ.2568",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3404/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-3404.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินคุณธรรมและความโปร่งใส (ITA) พ.ศ.2567",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/2990/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-2990.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินคุณธรรมและความโปร่งใส (ITA) พ.ศ.2566",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/1988/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-1988.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินคุณธรรมและความโปร่งใส (ITA) พ.ศ.2565",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/1373/menu/1262/page/1",
"detailPageHtml": "debug-menu-1262-detail-1373.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "ขั้นตอนการดำเนินงานการกรอกข้อมูล (Integrity and Transparency Assessment : ITA)",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/830/menu/1262/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/2137/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_830/files_2137_1.pdf",
"detailPageHtml": "debug-menu-1262-detail-830.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "รายงานผลการประชุมการประเมินคุณธรรมและความโปร่งใสในการดำเนินงานของหน่วยงานภาครัฐ (ITA)",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/829/menu/1262/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/2135/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_829/files_2135_1.pdf",
"detailPageHtml": "debug-menu-1262-detail-829.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
},
{
"title": "การประเมินความเสี่ยงการทุจริต (ITA) ประจำปีงบประมาณ พ.ศ. 2562",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/821/menu/1262/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/2119/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_821/files_2119_1.pdf",
"detailPageHtml": "debug-menu-1262-detail-821.html",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1262/page/1"
}
]
}

View File

@ -0,0 +1,40 @@
{
"menuId": 1543,
"totalPages": 1,
"scrapedAt": "2026-01-13T06:34:29.997Z",
"totalItems": 4,
"items": [
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งสมาชิกสภาเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง เขต 3",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3555/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8641/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3555/files_8641_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
},
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งสมาชิกสภาเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง เขต 2",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3554/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8639/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3554/files_8639_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
},
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งสมาชิกสภาเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง เขต 1",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3553/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8637/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3553/files_8637_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
},
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งนายกเทศมนตรีเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3552/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8635/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3552/files_8635_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
}
]
}

View File

@ -0,0 +1,41 @@
{
"source": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1",
"scrapedAt": "2026-01-13T06:34:29.979Z",
"menuId": 1543,
"page": 1,
"count": 4,
"items": [
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งสมาชิกสภาเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง เขต 3",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3555/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8641/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3555/files_8641_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
},
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งสมาชิกสภาเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง เขต 2",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3554/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8639/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3554/files_8639_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
},
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งสมาชิกสภาเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง เขต 1",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3553/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8637/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3553/files_8637_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
},
{
"title": "บัญชีรายชื่อผู้สมัครรับเลือกตั้งนายกเทศมนตรีเมืองลาดสวาย ที่ได้รับสมัครรับเลือกตั้งและไม่ได้รับสมัครรับเลือกตั้ง",
"detailUrl": "https://ladsawai.go.th/public/list/data/detail/id/3552/menu/1543/page/1",
"fileUrl": "https://ladsawai.go.th/public/centermodules/data/loadattach/id/8635/seq/1",
"filePath": "https://ladsawai.go.th/public/list_upload/backend/list_3552/files_8635_1.pdf",
"sourcePage": 1,
"sourceUrl": "https://ladsawai.go.th/public/list/data/index/menu/1543/page/1"
}
]
}