@heripo/research-radar 1.2.5 → 1.2.7

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 CHANGED
@@ -799,12 +799,11 @@ const parseNrichNoticeList = (html) => {
799
799
  const $ = cheerio__namespace.load(html);
800
800
  const posts = [];
801
801
  const baseUrl = 'https://www.nrich.go.kr';
802
- $('table.table-list tbody tr').each((index, element) => {
803
- const columns = $(element).find('td');
804
- if (columns.length === 0) {
802
+ $('ul.list-body li').each((index, element) => {
803
+ if ($(element).hasClass('bg-notice')) {
805
804
  return;
806
805
  }
807
- const titleElement = columns.eq(1).find('a');
806
+ const titleElement = $(element).find('.col2 a.cont-link');
808
807
  const relativeHref = titleElement.attr('href');
809
808
  if (!relativeHref) {
810
809
  return;
@@ -812,33 +811,38 @@ const parseNrichNoticeList = (html) => {
812
811
  const fullUrl = new URL(`/kor/${relativeHref}`, baseUrl);
813
812
  const detailUrl = fullUrl.href;
814
813
  const uniqId = fullUrl.searchParams.get('bbs_idx') ?? undefined;
815
- const title = titleElement.attr('title')?.trim() ?? titleElement.text()?.trim() ?? '';
816
- const date = getDate(columns.eq(3).text().trim());
817
- posts.push({
818
- uniqId,
819
- title,
820
- date,
821
- detailUrl: cleanUrl(detailUrl),
822
- dateType: core.DateType.REGISTERED,
823
- });
814
+ const title = titleElement.text()?.trim() ?? '';
815
+ const date = getDate($(element).find('.col5 .cont-txt').text().trim());
816
+ if (posts.length < 10) {
817
+ posts.push({
818
+ uniqId,
819
+ title,
820
+ date,
821
+ detailUrl: cleanUrl(detailUrl),
822
+ dateType: core.DateType.REGISTERED,
823
+ });
824
+ }
824
825
  });
825
826
  return posts;
826
827
  };
827
828
  const parseNrichMajorEventList = (html) => {
828
829
  const $ = cheerio__namespace.load(html);
829
830
  const posts = [];
830
- $('ul.event-list li a').each((index, element) => {
831
- const uniqId = getUniqIdFromNrichMajorEvent($(element));
831
+ $('ul.list-body li').each((index, element) => {
832
+ const linkElement = $(element).find('a[onclick]').first();
833
+ const uniqId = getUniqIdFromNrichMajorEvent(linkElement);
832
834
  const detailUrl = `https://www.nrich.go.kr/kor/majorView.do?menuIdx=286&bbs_idx=${uniqId}`;
833
- const title = $(element)
834
- .find('strong')
835
- .clone()
836
- .children('span')
837
- .remove()
838
- .end()
839
- .text()
840
- .trim();
841
- const dateSplit = getDate($(element).find('span.date').text().replaceAll('행사기간 : ', '').trim()).split(' ~ ');
835
+ const title = $(element).find('.info-tit strong.tit').text().trim();
836
+ let dateText = '';
837
+ $(element)
838
+ .find('.info-detail .detail-box')
839
+ .each((i, box) => {
840
+ const boxTitle = $(box).find('span.tit').text().trim();
841
+ if (boxTitle === '행사기간') {
842
+ dateText = $(box).find('span.cont').text().trim();
843
+ }
844
+ });
845
+ const dateSplit = getDate(dateText).split(' ~ ');
842
846
  const startDate = dateSplit[0];
843
847
  const endDate = dateSplit[1];
844
848
  const hasEndDate = startDate !== endDate;
@@ -858,21 +862,17 @@ const parseNrichJournalList = (html) => {
858
862
  const $ = cheerio__namespace.load(html);
859
863
  const posts = [];
860
864
  const baseUrl = 'https://www.nrich.go.kr';
861
- $('table.table-list tbody tr').each((index, element) => {
862
- const columns = $(element).find('td');
863
- if (columns.length === 0) {
864
- return;
865
- }
866
- const titleElement = columns.eq(1).find('a');
865
+ $('ul.list-body li').each((index, element) => {
866
+ const titleElement = $(element).find('.col2 a.cont-link');
867
867
  const relativeHref = titleElement.attr('href');
868
868
  if (!relativeHref) {
869
869
  return;
870
870
  }
871
871
  const fullUrl = new URL(`${relativeHref}`, baseUrl);
872
872
  const detailUrl = fullUrl.href;
873
- const uniqId = fullUrl.searchParams.get('bbs_idx') ?? undefined;
874
- const title = titleElement.attr('title')?.trim() ?? titleElement.text()?.trim() ?? '';
875
- const date = getDate(columns.eq(2).text().trim());
873
+ const uniqId = fullUrl.searchParams.get('idx') ?? undefined;
874
+ const title = titleElement.text()?.trim() ?? '';
875
+ const date = getDate($(element).find('.col3 .cont-txt').text().trim());
876
876
  posts.push({
877
877
  uniqId,
878
878
  title,
@@ -914,18 +914,16 @@ const parseNrichPortalList = (html) => {
914
914
  };
915
915
  const parseNrichNoticeDetail = (html) => {
916
916
  const $ = cheerio__namespace.load(html);
917
- const trList = $('table.table-view tbody tr');
918
- const content = trList.eq(3).find('td');
917
+ const content = $('.view-content .info-txt');
919
918
  return {
920
919
  detailContent: new TurndownService().turndown(content.html() ?? ''),
921
- hasAttachedFile: trList.length > 4,
920
+ hasAttachedFile: $('.board-file').length > 0,
922
921
  hasAttachedImage: content.find('img').length > 0,
923
922
  };
924
923
  };
925
924
  const parseNrichMajorEventDetail = (html) => {
926
925
  const $ = cheerio__namespace.load(html);
927
- const trList = $('table.table-view tbody tr');
928
- const content = trList.eq(4).find('td');
926
+ const content = $('.view-content');
929
927
  return {
930
928
  detailContent: new TurndownService().turndown(content.html() ?? ''),
931
929
  hasAttachedFile: false,
@@ -936,16 +934,12 @@ const parseNrichJournalDetail = (html) => {
936
934
  const $ = cheerio__namespace.load(html);
937
935
  $('script, style').remove();
938
936
  const articles = [];
939
- // 테이블의행을 순회하면서 논문 정보 추출
940
- $('table.table-list tbody tr').each((index, element) => {
941
- const columns = $(element).find('td');
942
- if (columns.length === 0) {
943
- return;
944
- }
945
- const number = columns.eq(0).text().trim();
946
- const titleElement = columns.eq(1).find('a');
937
+ // 리스트의항목을 순회하면서 논문 정보 추출
938
+ $('ul.list-body li').each((index, element) => {
939
+ const number = $(element).find('.col1 .cont-txt').text().trim();
940
+ const titleElement = $(element).find('.col2 a.cont-link');
947
941
  const title = titleElement.text().trim();
948
- const author = columns.eq(2).text().trim();
942
+ const author = $(element).find('.col3 .cont-txt').text().trim();
949
943
  if (title && author) {
950
944
  articles.push(`${number}. **${title}**\n 저자: ${author}`);
951
945
  }
@@ -2183,7 +2177,7 @@ const createNewsletterHtmlTemplate = (targets) => `<!DOCTYPE html>
2183
2177
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">heripo는 고고학 연구 환경의 실질적인 디지털 전환을 지향하는 연구 플랫폼입니다.</p>
2184
2178
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">발굴조사보고서(PDF) 속에 갇힌 텍스트와 도면을 분석 가능한 구조화된 데이터로 전환하여, 연구자가 자료를 보다 체계적으로 탐색하고 재사용할 수 있는 인프라를 구축하고 있습니다.</p>
2185
2179
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
2186
- color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heriop-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
2180
+ color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heripo-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
2187
2181
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.com" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>
2188
2182
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
2189
2183
  color: #444444; margin: 0 0 18px 0;">보고 계신 뉴스레터(리서치 레이더)는 heripo의 초기 선행 기능 중 하나입니다. 뉴스레터 소스 추가 요청은 <a href="https://github.com/heripo-lab/heripo-research-radar/issues" target="_blank">GitHub 이슈</a>를 통해 언제든 환영합니다.</p>
@@ -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
@@ -778,12 +778,11 @@ const parseNrichNoticeList = (html) => {
778
778
  const $ = cheerio.load(html);
779
779
  const posts = [];
780
780
  const baseUrl = 'https://www.nrich.go.kr';
781
- $('table.table-list tbody tr').each((index, element) => {
782
- const columns = $(element).find('td');
783
- if (columns.length === 0) {
781
+ $('ul.list-body li').each((index, element) => {
782
+ if ($(element).hasClass('bg-notice')) {
784
783
  return;
785
784
  }
786
- const titleElement = columns.eq(1).find('a');
785
+ const titleElement = $(element).find('.col2 a.cont-link');
787
786
  const relativeHref = titleElement.attr('href');
788
787
  if (!relativeHref) {
789
788
  return;
@@ -791,33 +790,38 @@ const parseNrichNoticeList = (html) => {
791
790
  const fullUrl = new URL(`/kor/${relativeHref}`, baseUrl);
792
791
  const detailUrl = fullUrl.href;
793
792
  const uniqId = fullUrl.searchParams.get('bbs_idx') ?? undefined;
794
- const title = titleElement.attr('title')?.trim() ?? titleElement.text()?.trim() ?? '';
795
- const date = getDate(columns.eq(3).text().trim());
796
- posts.push({
797
- uniqId,
798
- title,
799
- date,
800
- detailUrl: cleanUrl(detailUrl),
801
- dateType: DateType.REGISTERED,
802
- });
793
+ const title = titleElement.text()?.trim() ?? '';
794
+ const date = getDate($(element).find('.col5 .cont-txt').text().trim());
795
+ if (posts.length < 10) {
796
+ posts.push({
797
+ uniqId,
798
+ title,
799
+ date,
800
+ detailUrl: cleanUrl(detailUrl),
801
+ dateType: DateType.REGISTERED,
802
+ });
803
+ }
803
804
  });
804
805
  return posts;
805
806
  };
806
807
  const parseNrichMajorEventList = (html) => {
807
808
  const $ = cheerio.load(html);
808
809
  const posts = [];
809
- $('ul.event-list li a').each((index, element) => {
810
- const uniqId = getUniqIdFromNrichMajorEvent($(element));
810
+ $('ul.list-body li').each((index, element) => {
811
+ const linkElement = $(element).find('a[onclick]').first();
812
+ const uniqId = getUniqIdFromNrichMajorEvent(linkElement);
811
813
  const detailUrl = `https://www.nrich.go.kr/kor/majorView.do?menuIdx=286&bbs_idx=${uniqId}`;
812
- const title = $(element)
813
- .find('strong')
814
- .clone()
815
- .children('span')
816
- .remove()
817
- .end()
818
- .text()
819
- .trim();
820
- const dateSplit = getDate($(element).find('span.date').text().replaceAll('행사기간 : ', '').trim()).split(' ~ ');
814
+ const title = $(element).find('.info-tit strong.tit').text().trim();
815
+ let dateText = '';
816
+ $(element)
817
+ .find('.info-detail .detail-box')
818
+ .each((i, box) => {
819
+ const boxTitle = $(box).find('span.tit').text().trim();
820
+ if (boxTitle === '행사기간') {
821
+ dateText = $(box).find('span.cont').text().trim();
822
+ }
823
+ });
824
+ const dateSplit = getDate(dateText).split(' ~ ');
821
825
  const startDate = dateSplit[0];
822
826
  const endDate = dateSplit[1];
823
827
  const hasEndDate = startDate !== endDate;
@@ -837,21 +841,17 @@ const parseNrichJournalList = (html) => {
837
841
  const $ = cheerio.load(html);
838
842
  const posts = [];
839
843
  const baseUrl = 'https://www.nrich.go.kr';
840
- $('table.table-list tbody tr').each((index, element) => {
841
- const columns = $(element).find('td');
842
- if (columns.length === 0) {
843
- return;
844
- }
845
- const titleElement = columns.eq(1).find('a');
844
+ $('ul.list-body li').each((index, element) => {
845
+ const titleElement = $(element).find('.col2 a.cont-link');
846
846
  const relativeHref = titleElement.attr('href');
847
847
  if (!relativeHref) {
848
848
  return;
849
849
  }
850
850
  const fullUrl = new URL(`${relativeHref}`, baseUrl);
851
851
  const detailUrl = fullUrl.href;
852
- const uniqId = fullUrl.searchParams.get('bbs_idx') ?? undefined;
853
- const title = titleElement.attr('title')?.trim() ?? titleElement.text()?.trim() ?? '';
854
- const date = getDate(columns.eq(2).text().trim());
852
+ const uniqId = fullUrl.searchParams.get('idx') ?? undefined;
853
+ const title = titleElement.text()?.trim() ?? '';
854
+ const date = getDate($(element).find('.col3 .cont-txt').text().trim());
855
855
  posts.push({
856
856
  uniqId,
857
857
  title,
@@ -893,18 +893,16 @@ const parseNrichPortalList = (html) => {
893
893
  };
894
894
  const parseNrichNoticeDetail = (html) => {
895
895
  const $ = cheerio.load(html);
896
- const trList = $('table.table-view tbody tr');
897
- const content = trList.eq(3).find('td');
896
+ const content = $('.view-content .info-txt');
898
897
  return {
899
898
  detailContent: new TurndownService().turndown(content.html() ?? ''),
900
- hasAttachedFile: trList.length > 4,
899
+ hasAttachedFile: $('.board-file').length > 0,
901
900
  hasAttachedImage: content.find('img').length > 0,
902
901
  };
903
902
  };
904
903
  const parseNrichMajorEventDetail = (html) => {
905
904
  const $ = cheerio.load(html);
906
- const trList = $('table.table-view tbody tr');
907
- const content = trList.eq(4).find('td');
905
+ const content = $('.view-content');
908
906
  return {
909
907
  detailContent: new TurndownService().turndown(content.html() ?? ''),
910
908
  hasAttachedFile: false,
@@ -915,16 +913,12 @@ const parseNrichJournalDetail = (html) => {
915
913
  const $ = cheerio.load(html);
916
914
  $('script, style').remove();
917
915
  const articles = [];
918
- // 테이블의행을 순회하면서 논문 정보 추출
919
- $('table.table-list tbody tr').each((index, element) => {
920
- const columns = $(element).find('td');
921
- if (columns.length === 0) {
922
- return;
923
- }
924
- const number = columns.eq(0).text().trim();
925
- const titleElement = columns.eq(1).find('a');
916
+ // 리스트의항목을 순회하면서 논문 정보 추출
917
+ $('ul.list-body li').each((index, element) => {
918
+ const number = $(element).find('.col1 .cont-txt').text().trim();
919
+ const titleElement = $(element).find('.col2 a.cont-link');
926
920
  const title = titleElement.text().trim();
927
- const author = columns.eq(2).text().trim();
921
+ const author = $(element).find('.col3 .cont-txt').text().trim();
928
922
  if (title && author) {
929
923
  articles.push(`${number}. **${title}**\n 저자: ${author}`);
930
924
  }
@@ -2162,7 +2156,7 @@ const createNewsletterHtmlTemplate = (targets) => `<!DOCTYPE html>
2162
2156
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">heripo는 고고학 연구 환경의 실질적인 디지털 전환을 지향하는 연구 플랫폼입니다.</p>
2163
2157
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">발굴조사보고서(PDF) 속에 갇힌 텍스트와 도면을 분석 가능한 구조화된 데이터로 전환하여, 연구자가 자료를 보다 체계적으로 탐색하고 재사용할 수 있는 인프라를 구축하고 있습니다.</p>
2164
2158
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
2165
- color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heriop-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
2159
+ color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heripo-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
2166
2160
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.com" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>
2167
2161
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
2168
2162
  color: #444444; margin: 0 0 18px 0;">보고 계신 뉴스레터(리서치 레이더)는 heripo의 초기 선행 기능 중 하나입니다. 뉴스레터 소스 추가 요청은 <a href="https://github.com/heripo-lab/heripo-research-radar/issues" target="_blank">GitHub 이슈</a>를 통해 언제든 환영합니다.</p>
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": "1.2.5",
5
+ "version": "1.2.7",
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",
@@ -42,7 +42,7 @@
42
42
  "author": "kimhongyeon",
43
43
  "license": "Apache-2.0",
44
44
  "dependencies": {
45
- "@ai-sdk/openai": "^3.0.24",
45
+ "@ai-sdk/openai": "^3.0.25",
46
46
  "cheerio": "^1.2.0",
47
47
  "turndown": "^7.2.2"
48
48
  },
@@ -51,10 +51,10 @@
51
51
  },
52
52
  "devDependencies": {
53
53
  "@eslint/js": "^9.39.2",
54
- "@llm-newsletter-kit/core": "^1.1.3",
54
+ "@llm-newsletter-kit/core": "^1.1.5",
55
55
  "@trivago/prettier-plugin-sort-imports": "^6.0.2",
56
56
  "@types/express": "^5.0.6",
57
- "@types/node": "^25.1.0",
57
+ "@types/node": "^25.2.0",
58
58
  "@types/turndown": "^5.0.6",
59
59
  "eslint": "^9.39.2",
60
60
  "eslint-plugin-unused-imports": "^4.3.0",