안녕하세요 케이입니다.

앞에서는 텔레그램 뉴스봇에서 제가 원하는 언론사만 골라서 받아보는 기능을 만들어봤습니다.

그렇게 출처까지 어느 정도 정리하고 나니까 확실히 뉴스가 깔끔해졌습니다.

그런데 계속 사용하다 보니 이번에는 제목 자체에서 걸리는 게 생겼습니다.

분명 같은 검색어로 찾은 뉴스인데도 제가 전혀 관심 없는 내용이 섞여 나오는 경우가 있었습니다.

예를 들어 제가 인공지능이라고 검색했는데

연예인 이름이 붙은 기사나

주가 전망 기사나

광고에 가까운 제목이 같이 나오는 식이었습니다.

검색어는 맞는데 제가 보고 싶은 방향과는 조금 다른 뉴스였습니다.

그래서 이번에는 특정 단어가 제목에 들어 있으면 아예 보내지 않도록 만들어봤습니다.

이 기능은 생각보다 간단했지만 실제 사용에서는 꽤 만족도가 높았습니다.

이번에도 원리는 아주 단순했습니다

제가 이해한 방식은 이렇습니다.

뉴스 제목을 하나 확인합니다.

그 제목 안에 제가 제외하고 싶은 단어가 있는지 봅니다.

있으면 건너뜁니다.

없으면 텔레그램으로 보냅니다.

결국 앞에서 언론사 주소를 확인했던 것과 거의 비슷했습니다.

다만 이번에는 링크가 아니라 제목을 확인하는 것입니다.

예를 들어

if (item.title.includes("연예")) {
  continue;
}

이렇게 만들 수 있습니다.

뜻은 간단했습니다.

뉴스 제목 안에 연예라는 단어가 들어 있으면 그 뉴스는 보내지 말고 다음 뉴스로 넘어가라는 의미입니다.

앞에서 이미 continue를 몇 번 사용해봤기 때문에 이번에는 훨씬 이해하기 쉬웠습니다.

하나만 넣어보니 바로 한계가 보였습니다

처음에는 제외하고 싶은 단어를 하나만 넣어봤습니다.

그런데 실제로 사용하다 보니 제외하고 싶은 단어가 금방 늘어났습니다.

예를 들어

연예

주가

추천주

광고

같은 단어였습니다.

처음에는 조건문을 계속 늘렸습니다.

if (item.title.includes("연예")) {
  continue;
}

if (item.title.includes("주가")) {
  continue;
}

if (item.title.includes("추천주")) {
  continue;
}

이렇게 해도 작동은 했습니다.

그런데 단어가 늘어날수록 코드가 지저분해졌습니다.

그래서 앞에서 언론사 목록을 따로 만들었던 것처럼 제외 단어도 목록으로 따로 만들어봤습니다.

제외 단어 목록을 따로 만들어봤습니다

저는 이런 식으로 정리했습니다.

var blockedKeywords = [
  "연예",
  "주가",
  "추천주",
  "광고"
];

이렇게 해두면 나중에 빼고 싶은 단어가 생겼을 때 목록에 하나만 추가하면 됩니다.

예를 들어

var blockedKeywords = [
  "연예",
  "주가",
  "추천주",
  "광고",
  "협찬"
];

처럼 한 줄만 추가하면 됩니다.

저처럼 코드를 자주 수정하기 부담스러운 사람한테는 이런 방식이 훨씬 편했습니다.

제목에 제외 단어가 있는지 하나씩 확인했습니다

목록을 만들고 나면 뉴스 제목에 이 단어들이 들어 있는지 확인해야 합니다.

제가 사용한 방식은 대략 이런 형태였습니다.

var blocked = false;

for (var j = 0; j < blockedKeywords.length; j++) {
  if (item.title.includes(blockedKeywords[j])) {
    blocked = true;
    break;
  }
}

처음 봤을 때는 조금 복잡해 보였습니다.

그런데 하나씩 보면 단순했습니다.

blocked는 처음에는 false입니다.

즉

아직 제외 대상이 아니라는 뜻입니다.

그리고 blockedKeywords 목록을 하나씩 확인합니다.

제목 안에 제외 단어가 하나라도 들어 있으면

blocked = true;

로 바꿉니다.

그다음

break;

로 반복을 끝냅니다.

이미 제외 단어를 하나 찾았으니 나머지 단어까지 계속 확인할 필요가 없기 때문입니다.

제외 대상으로 확인되면 그냥 넘겼습니다

이제 아래에 한 줄만 추가하면 됩니다.

if (blocked) {
  continue;
}

이렇게 하면 제외 단어가 들어간 뉴스는 텔레그램으로 보내지 않고 다음 뉴스로 넘어갑니다.

전체 흐름은 생각보다 단순했습니다.

뉴스 제목 확인

→ 제외 단어 목록과 비교

→ 하나라도 포함돼 있으면 건너뜀

→ 없으면 계속 진행

이런 구조였습니다.

실제로 테스트해보니 체감이 컸습니다

코드를 수정한 뒤 평소처럼 텔레그램에서 뉴스를 검색해봤습니다.

예전에는 검색 결과 중에 제가 보기 싫었던 주제들이 섞여 있었는데 이번에는 확실히 줄었습니다.

특히 검색어 자체가 넓은 경우에 효과가 컸습니다.

예를 들어 AI 같은 단어는 워낙 여러 분야에서 사용되다 보니까 제가 원하지 않는 기사도 많이 섞였습니다.

그런데 제외 단어를 몇 개 넣어두니 제가 관심 있는 뉴스 비율이 꽤 높아졌습니다.

이때부터 뉴스봇이 그냥 검색 결과를 받아오는 도구가 아니라

조금씩 제 취향에 맞춰지는 느낌이 들었습니다.

대문자와 소문자 때문에 또 한 번 헷갈렸습니다

영어 단어를 제외할 때는 또 문제가 하나 있었습니다.

예를 들어 제가

AD

라는 단어를 제외 목록에 넣었다고 해도

제목에는

Ad

나

ad

처럼 들어올 수 있습니다.

코드에서는 이런 글자를 서로 다르게 볼 수 있습니다.

그래서 영어 단어를 비교할 때는 제목을 모두 소문자로 바꿔서 확인하는 방법도 있었습니다.

예를 들어

var titleLower = item.title.toLowerCase();

이렇게 하면 제목 안의 영어 글자가 모두 소문자로 바뀝니다.

그리고 제외 단어도 소문자로 넣어두면 됩니다.

예를 들어

var blockedKeywords = [
  "ad",
  "sponsored"
];

이렇게 하면 대문자와 소문자가 섞여 있어도 조금 더 편하게 확인할 수 있었습니다.

저는 한글 검색어를 주로 사용해서 처음에는 크게 신경 쓰지 않았는데 영어 키워드를 쓰기 시작하면 이 부분도 필요했습니다.

너무 짧은 단어를 넣으면 엉뚱한 기사까지 빠졌습니다

이 부분은 직접 해보고 나서야 알았습니다.

예를 들어 제외 단어를 너무 짧게 잡으면 예상하지 못한 제목까지 제외될 수 있었습니다.

특히 영어 두세 글자나 일반적인 한글 한 글자 같은 경우였습니다.

제목 어딘가에 우연히 같은 글자가 들어가기 쉽기 때문입니다.

그래서 저는 제외 단어를 정할 때 가능하면 조금 더 구체적으로 넣었습니다.

예를 들어

주

보다는

추천주

처럼 넣는 식입니다.

처음에는 많이 막을수록 좋은 줄 알았는데 너무 넓게 막으면 오히려 정상적인 기사까지 빠질 수 있었습니다.

제목에 HTML 태그가 붙어 있는 경우도 있었습니다

네이버 검색 API 결과를 사용하다 보면 뉴스 제목 안에 강조 표시 같은 태그가 들어오는 경우가 있었습니다.

예를 들어 제목이 실제로는 이런 식으로 보일 수 있습니다.

<b>인공지능</b> 관련 새로운 서비스 공개

처음에는 이런 표시가 왜 붙는지 몰랐습니다.

검색어를 강조하기 위해 붙어 있는 HTML 태그였습니다.

텔레그램으로 그대로 보내면 <b> 같은 글자가 이상하게 보일 수도 있고, 제목 비교에도 조금 불편했습니다.

그래서 제목을 사용할 때 이런 태그를 지우는 코드를 같이 넣어봤습니다.

var cleanTitle = item.title.replace(/<[^>]*>/g, "");

이 코드는 처음 봤을 때는 거의 이해하지 못했습니다.

정규식이라는 걸 사용하는 부분이었는데

저는 굳이 전부 이해하려고 하지는 않았습니다.

그냥

제목 안에 붙어 있는 HTML 태그를 지우는 부분

이라고 생각하고 사용했습니다.

그리고 이후에는 item.title 대신 cleanTitle을 기준으로 제외 단어를 확인했습니다.

필터 순서도 조금 정리해봤습니다

기능이 하나씩 늘어나다 보니 어떤 순서로 확인할지도 고민하게 됐습니다.

현재 제가 적용한 흐름은 대략 이런 식이었습니다.

검색된 뉴스 하나 가져오기

→ 제목 정리

→ 이미 본 뉴스인지 확인

→ 제외 언론사인지 확인

→ 제외 단어가 들어 있는지 확인

→ 조건을 통과하면 텔레그램으로 보내기

→ 보낸 기록 저장

→ 5개를 보냈으면 끝내기

이렇게 순서를 잡았습니다.

코드 전체를 보면 아직도 복잡하게 느껴지지만 이런 식으로 단계만 나눠보면 제가 뭘 하고 있는지는 어느 정도 이해할 수 있었습니다.

필터를 너무 많이 넣으면 결과가 아예 없어지기도 했습니다

이것도 주의할 부분이었습니다.

중복 제거

언론사 필터

제외 키워드

이렇게 조건이 하나씩 늘어나니까 뉴스가 한 건도 남지 않는 경우도 생겼습니다.

처음에는 또 오류가 난 줄 알았습니다.

그래서 앞에서 만들었던 안내 메시지가 여기에서도 도움이 됐습니다.

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

이렇게 해두니까 최소한 봇이 정상적으로 검색은 했지만 제가 설정한 조건 때문에 보낼 뉴스가 없다는 걸 알 수 있었습니다.

실제로 필터를 만들 때는 너무 욕심내지 않는 게 좋은 것 같습니다.

처음에는 제외 단어 두세 개 정도만 넣고 사용하면서 하나씩 추가하는 방식이 더 편했습니다.

코드 수정 없이 텔레그램에서 제외 단어를 등록하면 더 편할 것 같았습니다

이번 기능을 만들고 나니까 또 다음 단계가 생각났습니다.

현재는 제외하고 싶은 단어가 생길 때마다 Google Apps Script를 열어야 합니다.

코드를 열고

var blockedKeywords = [

부분을 찾아서 단어를 추가해야 합니다.

저는 이제 어느 정도 익숙해져서 할 수는 있지만 솔직히 조금 귀찮습니다.

그래서 나중에는

/block 광고

라고 텔레그램에 입력하면

광고

라는 단어가 자동으로 제외 목록에 등록되도록 만들면 훨씬 편할 것 같았습니다.

반대로

/unblock 광고

라고 입력하면 다시 삭제하는 식입니다.

이렇게 되면 코드를 직접 열지 않고도 텔레그램 안에서 필터를 관리할 수 있습니다.

이 부분은 조금 더 기능을 익힌 뒤 만들어보려고 합니다.

직접 사용해보니 검색보다 거르는 과정이 더 중요했습니다

처음 뉴스봇을 만들 때는 당연히 검색 기능이 가장 중요하다고 생각했습니다.

그런데 여기까지 만들어보니 생각이 많이 바뀌었습니다.

인터넷에는 이미 뉴스가 너무 많았습니다.

문제는 뉴스를 찾는 것이 아니라

내가 볼 뉴스만 골라내는 것

이었습니다.

뉴스 개수를 제한하고

같은 기사를 제거하고

원하는 언론사를 골라내고

관심 없는 단어까지 제외하니까

처음 만들었던 봇과는 사용감이 꽤 달라졌습니다.

무조건 많이 보여주는 것보다 필요한 것만 조금 보여주는 게 저한테는 훨씬 편했습니다.

다음에는 뉴스 제목만 말고 간단한 내용도 같이 받아보려고 합니다

지금까지는 텔레그램에서 주로

뉴스 제목

기사 링크

정도만 받아봤습니다.

그런데 5개 정도로 줄여놓고 보니까 이번에는 링크를 하나씩 눌러보는 게 조금 귀찮았습니다.

제목만 봐서는 무슨 내용인지 잘 모르겠는 기사도 있었기 때문입니다.

그래서 다음에는 뉴스 제목 아래에

기사 내용을 짧게 몇 줄 정도 같이 보여주는 방식

으로 바꿔보려고 합니다.

기사 전체를 가져오는 건 아니고 검색 결과에서 제공되는 간단한 설명을 같이 붙여서, 링크를 열기 전에 어떤 내용인지 대략 확인할 수 있도록 만들어보겠습니다.

답글 남기기

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

글쓴이

bluekei9@keinote.com

관련 게시물

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

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

모두 읽어보기

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

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

모두 읽어보기

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

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

모두 읽어보기

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

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

모두 읽어보기

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

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

모두 읽어보기

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

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

모두 읽어보기