안녕하세요 케이입니다.

앞에서는 같은 뉴스가 계속 반복해서 오는 문제를 줄이기 위해 중복 뉴스 제거 기능을 만들어봤습니다.

그렇게 해놓으니까 확실히 보기 편해졌습니다.

그런데 며칠 사용해보니 이번에는 또 다른 불편함이 생겼습니다.

검색 결과에 제가 자주 보는 언론사도 있었지만, 평소에는 거의 들어가지 않는 사이트나 광고성 느낌이 강한 곳도 같이 섞여 나왔습니다.

처음에는 그냥 검색 결과니까 그러려니 했는데, 매일 받아보다 보니까 생각보다 신경이 쓰였습니다.

그래서 이번에는 뉴스가 검색되더라도

제가 원하는 언론사 기사만 골라서 보내도록

기능을 하나 더 추가해봤습니다.

처음에는 뉴스 내용을 분석해야 하나 싶었는데, 생각보다 간단한 방법부터 시작할 수 있었습니다.

가장 쉬운 방법은 링크 안의 주소를 확인하는 것이었습니다

뉴스 하나에는 보통 제목과 링크가 같이 들어옵니다.

예를 들어 어떤 기사의 주소가 이런 식이라고 해보겠습니다.

https://news.example.com/article/12345

이 링크 안에는 해당 사이트의 주소가 들어 있습니다.

그래서 저는 뉴스 링크 안에 특정 문자열이 포함되어 있는지 확인하면 되겠다고 생각했습니다.

예를 들어

if (item.link.includes("example.com")) {

이런 식입니다.

뜻은 아주 단순했습니다.

뉴스 링크 안에 example.com이라는 글자가 들어 있으면 조건을 통과하는 방식입니다.

저처럼 코딩을 모르는 입장에서는 includes도 처음에는 생소했는데

그냥

이 글자가 안에 들어 있는지 확인한다

정도로 이해하면 편했습니다.

먼저 한 개 언론사만 골라봤습니다

처음부터 여러 언론사를 한꺼번에 넣으면 또 헷갈릴 것 같아서 한 곳만 테스트해봤습니다.

예를 들어 제가 example.com이라는 사이트의 뉴스만 받고 싶다고 하면 이렇게 만들 수 있습니다.

if (!item.link.includes("example.com")) {
  continue;
}

여기에서 !가 처음에는 가장 헷갈렸습니다.

제가 이해한 방식은

!가 붙으면 반대라고 생각하면 됐습니다.

즉

item.link.includes("example.com")

은

“링크 안에 example.com이 들어 있다”

라는 뜻이고

!item.link.includes("example.com")

은

“링크 안에 example.com이 들어 있지 않다”

라는 뜻입니다.

그래서 전체적으로 보면

원하는 언론사가 아니라면 이번 뉴스는 건너뛰어라

라는 의미가 됩니다.

앞에서 중복 뉴스를 건너뛸 때 사용했던 continue가 여기서도 다시 나왔습니다.

실제로 테스트해봤습니다

코드를 수정한 뒤 텔레그램에서 다시 뉴스 검색을 해봤습니다.

먼저

/news

를 입력하고

인공지능

이라고 검색했습니다.

기존에는 여러 사이트의 기사가 섞여서 나왔는데

이번에는 제가 지정한 주소가 들어간 기사만 남았습니다.

처음에는 꽤 신기했습니다.

뉴스 검색 자체는 그대로인데 그중에서 제가 원하는 사이트만 걸러내는 방식이었습니다.

검색 기능을 새로 만든 게 아니라 기존 결과에 필터 하나를 추가한 것뿐인데 체감은 꽤 컸습니다.

여러 언론사를 동시에 받고 싶어졌습니다

한 곳만 받아보니까 이번에는 또 욕심이 생겼습니다.

한 언론사만 보는 것도 조금 답답했습니다.

그래서 제가 자주 보는 몇 개 사이트를 같이 받아보는 방식으로 바꿔봤습니다.

처음에는 이렇게 만들었습니다.

var allowed =
  item.link.includes("site1.com") ||
  item.link.includes("site2.com") ||
  item.link.includes("site3.com");

if (!allowed) {
  continue;
}

여기에서 ||라는 표시가 또 처음 보는 기호였습니다.

제가 이해한 방식은

또는

입니다.

즉

site1.com이 들어 있거나

site2.com이 들어 있거나

site3.com이 들어 있으면

통과시키라는 뜻입니다.

생각보다 어렵지 않았습니다.

여러 조건 중 하나만 맞아도 되는 경우에 사용하는 방식이었습니다.

언론사 목록을 따로 만들어보니 더 보기 편했습니다

그런데 사이트가 늘어나니까 코드가 점점 길어졌습니다.

그래서 이번에는 허용할 사이트들을 목록으로 따로 만들어봤습니다.

var allowedSites = [
  "site1.com",
  "site2.com",
  "site3.com"
];

그리고 뉴스 링크가 이 목록 중 하나에 해당하는지 확인했습니다.

처음에는 배열이라는 말도 익숙하지 않았습니다.

지금은 그냥

여러 값을 묶어놓은 목록

정도로 생각하고 있습니다.

이렇게 해두면 나중에 언론사를 추가하고 싶을 때도 목록에 한 줄만 더 넣으면 되니까 훨씬 편했습니다.

예를 들어

var allowedSites = [
  "site1.com",
  "site2.com",
  "site3.com",
  "site4.com"
];

처럼 하나만 추가하면 됩니다.

반대로 특정 사이트만 제외하는 방법도 있었습니다

사용하다 보니까 꼭 원하는 언론사만 고르는 방식이 정답은 아니었습니다.

검색 결과는 다양하게 보고 싶은데

유독 보기 싫은 사이트 몇 개만 제외하고 싶을 수도 있었습니다.

그럴 때는 반대로 생각하면 됐습니다.

예를 들어

if (item.link.includes("blocksite.com")) {
  continue;
}

이렇게 하면 해당 주소가 들어간 뉴스는 그냥 넘어갑니다.

저는 처음에는

허용 목록 방식

을 사용했는데, 실제로 써보니 경우에 따라서는

제외 목록 방식

이 더 편할 수도 있겠다는 생각이 들었습니다.

검색 결과를 너무 좁히면 뉴스가 거의 안 나오는 경우도 있었기 때문입니다.

저는 결국 제외 목록 방식도 같이 생각해봤습니다

처음에는 제가 원하는 언론사만 받는 게 좋을 줄 알았습니다.

그런데 실제로 검색해보니 새로운 사이트에서 괜찮은 기사가 나오는 경우도 있었습니다.

그래서 완전히 제한하기보다는

정말 보고 싶지 않은 사이트만 몇 개 제외하는 방식도 괜찮았습니다.

예를 들어

var blockedSites = [
  "block1.com",
  "block2.com"
];

이런 식으로 목록을 만들고 해당 사이트는 제외하는 방식입니다.

결국 사용 목적에 따라 선택하면 될 것 같았습니다.

뉴스 출처를 아주 엄격하게 관리하고 싶다면 허용 목록

대부분의 결과를 보되 몇 곳만 빼고 싶다면 제외 목록

이런 식으로 생각하면 이해가 쉬웠습니다.

중복 제거 기능과 같이 사용해봤습니다

앞 글에서 만들었던 중복 뉴스 제거 기능과 같이 붙이니까 훨씬 쓸 만해졌습니다.

제가 사용한 흐름은 대략 이랬습니다.

뉴스 검색

→ 이미 본 기사인지 확인

→ 제외할 사이트인지 확인

→ 조건에 맞으면 텔레그램으로 전송

→ 보낸 뉴스 기록 저장

→ 5개가 되면 종료

기능이 하나씩 붙으니까 코드도 점점 길어졌지만, 오히려 전체 흐름은 조금 더 이해가 되기 시작했습니다.

처음에는 코드 전체가 그냥 영어와 기호 덩어리처럼 보였는데

이제는 대략

“여기는 중복 체크”

“여기는 언론사 체크”

“여기는 메시지 보내는 부분”

정도는 구분할 수 있게 됐습니다.

필터를 너무 강하게 걸면 뉴스가 안 나올 수도 있었습니다

이 부분도 직접 해보고 알았습니다.

허용한 언론사가 너무 적으면 검색 결과에 해당 사이트가 없을 수 있습니다.

그런 경우에는 뉴스가 한 개도 안 오는 상황도 생겼습니다.

처음에는 또 봇이 고장 난 줄 알았습니다.

그런데 실제로는 검색은 정상적으로 됐지만 필터 조건에서 모두 제외된 것이었습니다.

그래서 저는 조건에 맞는 뉴스가 하나도 없을 때 안내 메시지를 하나 넣는 게 좋겠다고 생각했습니다.

예를 들어

if (sentCount == 0) {
  sendMessage(chatId, "조건에 맞는 뉴스가 없습니다.");
}

이렇게 해두면 적어도 봇이 멈춘 건지 필터 결과가 없는 건지 구분할 수 있었습니다.

이런 작은 안내가 실제 사용할 때는 꽤 중요했습니다.

언론사 이름을 직접 보여주면 더 편하겠다는 생각도 들었습니다

뉴스를 몇 개 받아보니 이번에는 제목과 링크만 보는 게 조금 아쉬웠습니다.

어느 언론사 기사인지 링크를 자세히 봐야 알 수 있었기 때문입니다.

그래서 나중에는 이런 식으로 보내면 더 보기 좋겠다고 생각했습니다.

[언론사명]

뉴스 제목

기사 링크

이렇게 하면 기사를 열기 전에도 어디서 나온 뉴스인지 바로 알 수 있습니다.

다만 이 기능은 뉴스 데이터에서 언론사 정보를 따로 가져와야 하거나 링크에서 이름을 구분해야 해서 조금 더 손을 봐야 했습니다.

이번에는 일단 사이트를 걸러내는 것까지만 적용했습니다.

직접 만들어보니 뉴스봇은 검색보다 필터가 더 중요한 것 같습니다

처음에는 뉴스봇을 만들면서

검색만 잘되면 끝이라고 생각했습니다.

그런데 계속 사용해보니까 오히려 검색 이후 과정이 더 중요했습니다.

뉴스 개수를 줄이고

중복을 제거하고

원하는 출처만 남기고

필요 없는 결과를 빼는 과정이 있어야 실제로 볼 만한 뉴스가 됐습니다.

그냥 검색 결과를 전부 가져오는 건 어렵지 않았지만

내가 보기 좋은 결과로 정리하는 것

이 실제 자동화에서는 더 중요한 것 같았습니다.

다음에는 관심 없는 단어가 들어간 뉴스도 빼보려고 합니다

언론사 필터를 적용하고 나니까 이번에는 제목 자체에서 불필요한 뉴스가 보였습니다.

예를 들어 특정 검색어를 찾았는데

제가 전혀 관심 없는 연예 뉴스나 주식 추천 같은 내용이 섞여 나오는 경우였습니다.

그래서 다음에는 언론사가 아니라

뉴스 제목 안에 특정 단어가 들어 있으면 자동으로 제외하는 기능

을 넣어보려고 합니다.

예를 들어 제외하고 싶은 단어를 몇 개 등록해두고

제목에 그 단어가 있으면 보내지 않는 방식입니다.

조금씩 필터가 늘어나고 있지만 이렇게 하나씩 만들어보니까 처음 만들었던 뉴스봇보다 훨씬 제가 실제로 사용할 만한 형태로 바뀌고 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

글쓴이

bluekei9@keinote.com

관련 게시물

코딩 하나도 모르던 제가 결국 개인 뉴스 자동화 시스템을 만든 전체 과정

안녕하세요 케이입니다. 처음 이걸 시작할 때만 해도 텔레그램 봇이 정확히 어떻게 움직이는지 잘 몰랐습니다. API라는 말은 많이 들어봤지만 정확히 어떤 역할을 하는지도...

모두 읽어보기

텔레그램 봇 코드를 수정했는데 반영이 안 돼서 직접 원인을 찾아봤습니다

안녕하세요 케이입니다. 텔레그램 봇을 만들면서 꽤 답답했던 문제가 하나 있었습니다. 분명 Google Apps Script에서 코드를 수정했습니다. 저장도 했습니다. 그런데 텔레그램에서 테스트해보면 예전...

모두 읽어보기

텔레그램 뉴스봇이 갑자기 멈췄을 때 초보자인 제가 확인한 순서

안녕하세요 케이입니다. 앞에서는 Google Apps Script의 트리거를 이용해서 정해진 시간에 뉴스가 자동으로 오도록 만들어봤습니다. 자동으로 뉴스가 도착하니까 상당히 편했습니다. 그런데 며칠 사용하다...

모두 읽어보기

매번 검색하기 귀찮아서 자주 보는 뉴스 키워드를 저장해봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램으로 오는 뉴스 메시지를 조금 더 보기 좋게 꾸며봤습니다. 제목은 굵게 만들고, 설명은 짧게 붙이고, 긴 링크도 기사 보기처럼...

모두 읽어보기

텔레그램 뉴스 메시지가 너무 지저분해서 보기 좋게 꾸며봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램 뉴스봇에 뉴스 제목뿐만 아니라 간단한 설명까지 같이 표시해봤습니다. 기능 자체는 만족스러웠습니다. 제목만 볼 때보다 내용을 훨씬 빨리 파악할...

모두 읽어보기

뉴스 제목만 오던 텔레그램 봇에 간단한 내용까지 표시해봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램 뉴스봇에서 관심 없는 단어가 들어간 뉴스는 자동으로 제외하도록 만들어봤습니다. 뉴스 개수도 줄이고, 같은 기사도 어느 정도 걸러내고, 원하는...

모두 읽어보기