@heripo/research-radar 3.2.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +142 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +142 -0
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/dist/index.cjs
CHANGED
|
@@ -1002,6 +1002,86 @@ function getUniqIdFromNrichMajorEvent(element) {
|
|
|
1002
1002
|
return ((element.attr('onclick') ?? '').match(/fnViewPage\('(.*)'\)/)?.[1] ?? '');
|
|
1003
1003
|
}
|
|
1004
1004
|
|
|
1005
|
+
const BASE_URL$1 = 'https://www.seamuse.go.kr';
|
|
1006
|
+
/**
|
|
1007
|
+
* Extracts the nttId from seamuse.go.kr detail page HTML.
|
|
1008
|
+
* The page contains a JS init call like: noticeFunc.infoInit(4394)
|
|
1009
|
+
* or og:url meta tag: https://www.seamuse.go.kr/news/notice/info/4394
|
|
1010
|
+
*/
|
|
1011
|
+
const extractNttId = (html) => {
|
|
1012
|
+
// Try og:url meta tag first
|
|
1013
|
+
const ogUrlMatch = html.match(/property="og:url"\s+content="[^"]*\/info\/(\d+)"/);
|
|
1014
|
+
if (ogUrlMatch) {
|
|
1015
|
+
return ogUrlMatch[1];
|
|
1016
|
+
}
|
|
1017
|
+
// Fallback: JS init call pattern like infoInit(4394)
|
|
1018
|
+
const initMatch = html.match(/\.infoInit\((\d+)\)/);
|
|
1019
|
+
if (initMatch) {
|
|
1020
|
+
return initMatch[1];
|
|
1021
|
+
}
|
|
1022
|
+
return '';
|
|
1023
|
+
};
|
|
1024
|
+
/**
|
|
1025
|
+
* Parses the list page from seamuse.go.kr (국립해양유산연구소).
|
|
1026
|
+
* The site uses client-side rendering — list data is fetched from a JSON API.
|
|
1027
|
+
* URL pattern: /news/notice/list/1 → API: POST /news/notice/listData/1
|
|
1028
|
+
*
|
|
1029
|
+
* @param listDataPath - API path segment (e.g., "/news/notice" or "/resources/academiccultural")
|
|
1030
|
+
* @param infoPathPrefix - Detail page path prefix (e.g., "/news/notice/info")
|
|
1031
|
+
*/
|
|
1032
|
+
const parseSeamuseList = async (_html, listDataPath, infoPathPrefix, customFetch, searchCategory) => {
|
|
1033
|
+
const body = searchCategory ? `searchCategory=${searchCategory}` : '';
|
|
1034
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${listDataPath}/listData/1`, {
|
|
1035
|
+
method: 'POST',
|
|
1036
|
+
headers: {
|
|
1037
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
1038
|
+
},
|
|
1039
|
+
body,
|
|
1040
|
+
});
|
|
1041
|
+
const data = await response.json();
|
|
1042
|
+
const posts = [];
|
|
1043
|
+
for (const item of data.resultList) {
|
|
1044
|
+
posts.push({
|
|
1045
|
+
uniqId: String(item.nttId),
|
|
1046
|
+
title: item.nttSj?.trim() ?? '',
|
|
1047
|
+
date: item.frstRegisterPnttm ?? '',
|
|
1048
|
+
detailUrl: `${BASE_URL$1}${infoPathPrefix}/${item.nttId}`,
|
|
1049
|
+
dateType: core.DateType.REGISTERED,
|
|
1050
|
+
});
|
|
1051
|
+
}
|
|
1052
|
+
return posts;
|
|
1053
|
+
};
|
|
1054
|
+
/**
|
|
1055
|
+
* Parses the detail page from seamuse.go.kr.
|
|
1056
|
+
* The site uses client-side rendering — detail data is fetched from a JSON API.
|
|
1057
|
+
* URL pattern: /news/notice/info/4394 → API: GET /news/notice/infoData/4394?nttId=4394
|
|
1058
|
+
*
|
|
1059
|
+
* @param infoDataPath - API path segment (e.g., "/news/notice")
|
|
1060
|
+
*/
|
|
1061
|
+
const parseSeamuseDetail = async (html, infoDataPath, customFetch) => {
|
|
1062
|
+
const nttId = extractNttId(html);
|
|
1063
|
+
if (!nttId) {
|
|
1064
|
+
return {
|
|
1065
|
+
detailContent: '',
|
|
1066
|
+
hasAttachedFile: false,
|
|
1067
|
+
hasAttachedImage: false,
|
|
1068
|
+
};
|
|
1069
|
+
}
|
|
1070
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${infoDataPath}/infoData/${nttId}?nttId=${nttId}`, {
|
|
1071
|
+
method: 'GET',
|
|
1072
|
+
headers: {
|
|
1073
|
+
'Content-Type': 'application/json',
|
|
1074
|
+
},
|
|
1075
|
+
});
|
|
1076
|
+
const data = await response.json();
|
|
1077
|
+
const content = data.result.nttCn ?? '';
|
|
1078
|
+
return {
|
|
1079
|
+
detailContent: new TurndownService().turndown(content),
|
|
1080
|
+
hasAttachedFile: (data.files?.length ?? 0) > 0,
|
|
1081
|
+
hasAttachedImage: content.includes('<img'),
|
|
1082
|
+
};
|
|
1083
|
+
};
|
|
1084
|
+
|
|
1005
1085
|
const LIST_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttListAjax.ink';
|
|
1006
1086
|
const DETAIL_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttDetailAjax.ink';
|
|
1007
1087
|
const BASE_URL = 'http://www.yngogo.or.kr';
|
|
@@ -1222,6 +1302,48 @@ function createCrawlingTargetGroups(customFetch) {
|
|
|
1222
1302
|
parseList: parseNrichPortalList,
|
|
1223
1303
|
parseDetail: parseNrichPortalDetail,
|
|
1224
1304
|
},
|
|
1305
|
+
{
|
|
1306
|
+
id: '국립해양유산연구소_공지사항',
|
|
1307
|
+
name: '국립해양유산연구소 공지사항',
|
|
1308
|
+
url: 'https://www.seamuse.go.kr/news/notice/list/1',
|
|
1309
|
+
parseList: (html) => parseSeamuseList(html, '/news/notice', '/news/notice/info', customFetch),
|
|
1310
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/news/notice', customFetch),
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
id: '국립해양유산연구소_학술지',
|
|
1314
|
+
name: '국립해양유산연구소 학술지 해양유산연구',
|
|
1315
|
+
url: 'https://www.seamuse.go.kr/resources/academiccultural/list/1',
|
|
1316
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academiccultural', '/resources/academiccultural/info', customFetch),
|
|
1317
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academiccultural', customFetch),
|
|
1318
|
+
},
|
|
1319
|
+
{
|
|
1320
|
+
id: '국립해양유산연구소_학술보고서_수중유산조사',
|
|
1321
|
+
name: '국립해양유산연구소 학술보고서 수중유산 조사',
|
|
1322
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1',
|
|
1323
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT001'),
|
|
1324
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1325
|
+
},
|
|
1326
|
+
{
|
|
1327
|
+
id: '국립해양유산연구소_학술보고서_수중유산보존',
|
|
1328
|
+
name: '국립해양유산연구소 학술보고서 수중유산 보존',
|
|
1329
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab2',
|
|
1330
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT002'),
|
|
1331
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1332
|
+
},
|
|
1333
|
+
{
|
|
1334
|
+
id: '국립해양유산연구소_학술보고서_전통선박',
|
|
1335
|
+
name: '국립해양유산연구소 학술보고서 전통 선박',
|
|
1336
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab3',
|
|
1337
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT003'),
|
|
1338
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1339
|
+
},
|
|
1340
|
+
{
|
|
1341
|
+
id: '국립해양유산연구소_학술보고서_해양문화역사',
|
|
1342
|
+
name: '국립해양유산연구소 학술보고서 해양문화역사',
|
|
1343
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab4',
|
|
1344
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT004'),
|
|
1345
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1346
|
+
},
|
|
1225
1347
|
{
|
|
1226
1348
|
id: '국립고궁박물관_공지사항',
|
|
1227
1349
|
name: '국립고궁박물관 공지사항',
|
|
@@ -1727,6 +1849,26 @@ class AnalysisProvider {
|
|
|
1727
1849
|
targetUrl: 'https://www.kaah.kr/ipcopen',
|
|
1728
1850
|
minScore: 6,
|
|
1729
1851
|
},
|
|
1852
|
+
{
|
|
1853
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academiccultural/list/1',
|
|
1854
|
+
minScore: 6,
|
|
1855
|
+
},
|
|
1856
|
+
{
|
|
1857
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1',
|
|
1858
|
+
minScore: 6,
|
|
1859
|
+
},
|
|
1860
|
+
{
|
|
1861
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab2',
|
|
1862
|
+
minScore: 6,
|
|
1863
|
+
},
|
|
1864
|
+
{
|
|
1865
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab3',
|
|
1866
|
+
minScore: 6,
|
|
1867
|
+
},
|
|
1868
|
+
{
|
|
1869
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab4',
|
|
1870
|
+
minScore: 6,
|
|
1871
|
+
},
|
|
1730
1872
|
// Excavation report news: minimum score 2
|
|
1731
1873
|
{
|
|
1732
1874
|
targetUrl: 'https://www.e-minwon.go.kr/ge/ee/getListEcexmPrmsnAply.do',
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -981,6 +981,86 @@ function getUniqIdFromNrichMajorEvent(element) {
|
|
|
981
981
|
return ((element.attr('onclick') ?? '').match(/fnViewPage\('(.*)'\)/)?.[1] ?? '');
|
|
982
982
|
}
|
|
983
983
|
|
|
984
|
+
const BASE_URL$1 = 'https://www.seamuse.go.kr';
|
|
985
|
+
/**
|
|
986
|
+
* Extracts the nttId from seamuse.go.kr detail page HTML.
|
|
987
|
+
* The page contains a JS init call like: noticeFunc.infoInit(4394)
|
|
988
|
+
* or og:url meta tag: https://www.seamuse.go.kr/news/notice/info/4394
|
|
989
|
+
*/
|
|
990
|
+
const extractNttId = (html) => {
|
|
991
|
+
// Try og:url meta tag first
|
|
992
|
+
const ogUrlMatch = html.match(/property="og:url"\s+content="[^"]*\/info\/(\d+)"/);
|
|
993
|
+
if (ogUrlMatch) {
|
|
994
|
+
return ogUrlMatch[1];
|
|
995
|
+
}
|
|
996
|
+
// Fallback: JS init call pattern like infoInit(4394)
|
|
997
|
+
const initMatch = html.match(/\.infoInit\((\d+)\)/);
|
|
998
|
+
if (initMatch) {
|
|
999
|
+
return initMatch[1];
|
|
1000
|
+
}
|
|
1001
|
+
return '';
|
|
1002
|
+
};
|
|
1003
|
+
/**
|
|
1004
|
+
* Parses the list page from seamuse.go.kr (국립해양유산연구소).
|
|
1005
|
+
* The site uses client-side rendering — list data is fetched from a JSON API.
|
|
1006
|
+
* URL pattern: /news/notice/list/1 → API: POST /news/notice/listData/1
|
|
1007
|
+
*
|
|
1008
|
+
* @param listDataPath - API path segment (e.g., "/news/notice" or "/resources/academiccultural")
|
|
1009
|
+
* @param infoPathPrefix - Detail page path prefix (e.g., "/news/notice/info")
|
|
1010
|
+
*/
|
|
1011
|
+
const parseSeamuseList = async (_html, listDataPath, infoPathPrefix, customFetch, searchCategory) => {
|
|
1012
|
+
const body = searchCategory ? `searchCategory=${searchCategory}` : '';
|
|
1013
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${listDataPath}/listData/1`, {
|
|
1014
|
+
method: 'POST',
|
|
1015
|
+
headers: {
|
|
1016
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
1017
|
+
},
|
|
1018
|
+
body,
|
|
1019
|
+
});
|
|
1020
|
+
const data = await response.json();
|
|
1021
|
+
const posts = [];
|
|
1022
|
+
for (const item of data.resultList) {
|
|
1023
|
+
posts.push({
|
|
1024
|
+
uniqId: String(item.nttId),
|
|
1025
|
+
title: item.nttSj?.trim() ?? '',
|
|
1026
|
+
date: item.frstRegisterPnttm ?? '',
|
|
1027
|
+
detailUrl: `${BASE_URL$1}${infoPathPrefix}/${item.nttId}`,
|
|
1028
|
+
dateType: DateType.REGISTERED,
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
return posts;
|
|
1032
|
+
};
|
|
1033
|
+
/**
|
|
1034
|
+
* Parses the detail page from seamuse.go.kr.
|
|
1035
|
+
* The site uses client-side rendering — detail data is fetched from a JSON API.
|
|
1036
|
+
* URL pattern: /news/notice/info/4394 → API: GET /news/notice/infoData/4394?nttId=4394
|
|
1037
|
+
*
|
|
1038
|
+
* @param infoDataPath - API path segment (e.g., "/news/notice")
|
|
1039
|
+
*/
|
|
1040
|
+
const parseSeamuseDetail = async (html, infoDataPath, customFetch) => {
|
|
1041
|
+
const nttId = extractNttId(html);
|
|
1042
|
+
if (!nttId) {
|
|
1043
|
+
return {
|
|
1044
|
+
detailContent: '',
|
|
1045
|
+
hasAttachedFile: false,
|
|
1046
|
+
hasAttachedImage: false,
|
|
1047
|
+
};
|
|
1048
|
+
}
|
|
1049
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${infoDataPath}/infoData/${nttId}?nttId=${nttId}`, {
|
|
1050
|
+
method: 'GET',
|
|
1051
|
+
headers: {
|
|
1052
|
+
'Content-Type': 'application/json',
|
|
1053
|
+
},
|
|
1054
|
+
});
|
|
1055
|
+
const data = await response.json();
|
|
1056
|
+
const content = data.result.nttCn ?? '';
|
|
1057
|
+
return {
|
|
1058
|
+
detailContent: new TurndownService().turndown(content),
|
|
1059
|
+
hasAttachedFile: (data.files?.length ?? 0) > 0,
|
|
1060
|
+
hasAttachedImage: content.includes('<img'),
|
|
1061
|
+
};
|
|
1062
|
+
};
|
|
1063
|
+
|
|
984
1064
|
const LIST_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttListAjax.ink';
|
|
985
1065
|
const DETAIL_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttDetailAjax.ink';
|
|
986
1066
|
const BASE_URL = 'http://www.yngogo.or.kr';
|
|
@@ -1201,6 +1281,48 @@ function createCrawlingTargetGroups(customFetch) {
|
|
|
1201
1281
|
parseList: parseNrichPortalList,
|
|
1202
1282
|
parseDetail: parseNrichPortalDetail,
|
|
1203
1283
|
},
|
|
1284
|
+
{
|
|
1285
|
+
id: '국립해양유산연구소_공지사항',
|
|
1286
|
+
name: '국립해양유산연구소 공지사항',
|
|
1287
|
+
url: 'https://www.seamuse.go.kr/news/notice/list/1',
|
|
1288
|
+
parseList: (html) => parseSeamuseList(html, '/news/notice', '/news/notice/info', customFetch),
|
|
1289
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/news/notice', customFetch),
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
id: '국립해양유산연구소_학술지',
|
|
1293
|
+
name: '국립해양유산연구소 학술지 해양유산연구',
|
|
1294
|
+
url: 'https://www.seamuse.go.kr/resources/academiccultural/list/1',
|
|
1295
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academiccultural', '/resources/academiccultural/info', customFetch),
|
|
1296
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academiccultural', customFetch),
|
|
1297
|
+
},
|
|
1298
|
+
{
|
|
1299
|
+
id: '국립해양유산연구소_학술보고서_수중유산조사',
|
|
1300
|
+
name: '국립해양유산연구소 학술보고서 수중유산 조사',
|
|
1301
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1',
|
|
1302
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT001'),
|
|
1303
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1304
|
+
},
|
|
1305
|
+
{
|
|
1306
|
+
id: '국립해양유산연구소_학술보고서_수중유산보존',
|
|
1307
|
+
name: '국립해양유산연구소 학술보고서 수중유산 보존',
|
|
1308
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab2',
|
|
1309
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT002'),
|
|
1310
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
id: '국립해양유산연구소_학술보고서_전통선박',
|
|
1314
|
+
name: '국립해양유산연구소 학술보고서 전통 선박',
|
|
1315
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab3',
|
|
1316
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT003'),
|
|
1317
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1318
|
+
},
|
|
1319
|
+
{
|
|
1320
|
+
id: '국립해양유산연구소_학술보고서_해양문화역사',
|
|
1321
|
+
name: '국립해양유산연구소 학술보고서 해양문화역사',
|
|
1322
|
+
url: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab4',
|
|
1323
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academicreport', '/resources/academicreport/info', customFetch, 'ACARPT004'),
|
|
1324
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academicreport', customFetch),
|
|
1325
|
+
},
|
|
1204
1326
|
{
|
|
1205
1327
|
id: '국립고궁박물관_공지사항',
|
|
1206
1328
|
name: '국립고궁박물관 공지사항',
|
|
@@ -1706,6 +1828,26 @@ class AnalysisProvider {
|
|
|
1706
1828
|
targetUrl: 'https://www.kaah.kr/ipcopen',
|
|
1707
1829
|
minScore: 6,
|
|
1708
1830
|
},
|
|
1831
|
+
{
|
|
1832
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academiccultural/list/1',
|
|
1833
|
+
minScore: 6,
|
|
1834
|
+
},
|
|
1835
|
+
{
|
|
1836
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1',
|
|
1837
|
+
minScore: 6,
|
|
1838
|
+
},
|
|
1839
|
+
{
|
|
1840
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab2',
|
|
1841
|
+
minScore: 6,
|
|
1842
|
+
},
|
|
1843
|
+
{
|
|
1844
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab3',
|
|
1845
|
+
minScore: 6,
|
|
1846
|
+
},
|
|
1847
|
+
{
|
|
1848
|
+
targetUrl: 'https://www.seamuse.go.kr/resources/academicreport/list/1#tab4',
|
|
1849
|
+
minScore: 6,
|
|
1850
|
+
},
|
|
1709
1851
|
// Excavation report news: minimum score 2
|
|
1710
1852
|
{
|
|
1711
1853
|
targetUrl: 'https://www.e-minwon.go.kr/ge/ee/getListEcexmPrmsnAply.do',
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@heripo/research-radar",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.3.1",
|
|
6
6
|
"description": "AI-driven intelligence for Korean cultural heritage. This package serves as both a ready-to-use newsletter service and a practical implementation example for the LLM-Newsletter-Kit.",
|
|
7
7
|
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -47,12 +47,12 @@
|
|
|
47
47
|
"author": "kimhongyeon",
|
|
48
48
|
"license": "Apache-2.0",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
51
|
-
"@ai-sdk/google": "^3.0.
|
|
52
|
-
"@ai-sdk/openai": "^3.0.
|
|
50
|
+
"@ai-sdk/anthropic": "^3.0.63",
|
|
51
|
+
"@ai-sdk/google": "^3.0.52",
|
|
52
|
+
"@ai-sdk/openai": "^3.0.47",
|
|
53
53
|
"cheerio": "^1.2.0",
|
|
54
54
|
"dompurify": "^3.3.3",
|
|
55
|
-
"jsdom": "^29.0.
|
|
55
|
+
"jsdom": "^29.0.1",
|
|
56
56
|
"juice": "^11.1.1",
|
|
57
57
|
"safe-markdown2html": "^1.0.1",
|
|
58
58
|
"turndown": "^7.2.2"
|
|
@@ -62,19 +62,19 @@
|
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@eslint/js": "^10.0.1",
|
|
65
|
-
"@llm-newsletter-kit/core": "^1.3.
|
|
65
|
+
"@llm-newsletter-kit/core": "^1.3.8",
|
|
66
66
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
67
67
|
"@types/express": "^5.0.6",
|
|
68
|
-
"@types/jsdom": "^28.0.
|
|
68
|
+
"@types/jsdom": "^28.0.1",
|
|
69
69
|
"@types/node": "^25.5.0",
|
|
70
70
|
"@types/turndown": "^5.0.6",
|
|
71
|
-
"eslint": "^10.0
|
|
71
|
+
"eslint": "^10.1.0",
|
|
72
72
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
73
73
|
"express": "^5.2.1",
|
|
74
74
|
"prettier": "^3.8.1",
|
|
75
75
|
"rimraf": "^6.1.3",
|
|
76
|
-
"rollup": "^4.
|
|
77
|
-
"rollup-plugin-dts": "^6.4.
|
|
76
|
+
"rollup": "^4.60.0",
|
|
77
|
+
"rollup-plugin-dts": "^6.4.1",
|
|
78
78
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
79
79
|
"tsx": "^4.21.0",
|
|
80
80
|
"typescript": "^5.9.3",
|