- 0
- 100 단어
안녕하세요 케이입니다.
앞에서는 같은 뉴스가 계속 반복해서 오는 문제를 줄이기 위해 중복 뉴스 제거 기능을 만들어봤습니다.
그렇게 해놓으니까 확실히 보기 편해졌습니다.
그런데 며칠 사용해보니 이번에는 또 다른 불편함이 생겼습니다.
검색 결과에 제가 자주 보는 언론사도 있었지만, 평소에는 거의 들어가지 않는 사이트나 광고성 느낌이 강한 곳도 같이 섞여 나왔습니다.
처음에는 그냥 검색 결과니까 그러려니 했는데, 매일 받아보다 보니까 생각보다 신경이 쓰였습니다.
그래서 이번에는 뉴스가 검색되더라도
제가 원하는 언론사 기사만 골라서 보내도록
기능을 하나 더 추가해봤습니다.
처음에는 뉴스 내용을 분석해야 하나 싶었는데, 생각보다 간단한 방법부터 시작할 수 있었습니다.
가장 쉬운 방법은 링크 안의 주소를 확인하는 것이었습니다
뉴스 하나에는 보통 제목과 링크가 같이 들어옵니다.
예를 들어 어떤 기사의 주소가 이런 식이라고 해보겠습니다.
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, "조건에 맞는 뉴스가 없습니다.");
}
이렇게 해두면 적어도 봇이 멈춘 건지 필터 결과가 없는 건지 구분할 수 있었습니다.
이런 작은 안내가 실제 사용할 때는 꽤 중요했습니다.
언론사 이름을 직접 보여주면 더 편하겠다는 생각도 들었습니다
뉴스를 몇 개 받아보니 이번에는 제목과 링크만 보는 게 조금 아쉬웠습니다.
어느 언론사 기사인지 링크를 자세히 봐야 알 수 있었기 때문입니다.
그래서 나중에는 이런 식으로 보내면 더 보기 좋겠다고 생각했습니다.
[언론사명]
뉴스 제목
기사 링크
이렇게 하면 기사를 열기 전에도 어디서 나온 뉴스인지 바로 알 수 있습니다.
다만 이 기능은 뉴스 데이터에서 언론사 정보를 따로 가져와야 하거나 링크에서 이름을 구분해야 해서 조금 더 손을 봐야 했습니다.
이번에는 일단 사이트를 걸러내는 것까지만 적용했습니다.
직접 만들어보니 뉴스봇은 검색보다 필터가 더 중요한 것 같습니다
처음에는 뉴스봇을 만들면서
검색만 잘되면 끝이라고 생각했습니다.
그런데 계속 사용해보니까 오히려 검색 이후 과정이 더 중요했습니다.
뉴스 개수를 줄이고
중복을 제거하고
원하는 출처만 남기고
필요 없는 결과를 빼는 과정이 있어야 실제로 볼 만한 뉴스가 됐습니다.
그냥 검색 결과를 전부 가져오는 건 어렵지 않았지만
내가 보기 좋은 결과로 정리하는 것
이 실제 자동화에서는 더 중요한 것 같았습니다.
다음에는 관심 없는 단어가 들어간 뉴스도 빼보려고 합니다
언론사 필터를 적용하고 나니까 이번에는 제목 자체에서 불필요한 뉴스가 보였습니다.
예를 들어 특정 검색어를 찾았는데
제가 전혀 관심 없는 연예 뉴스나 주식 추천 같은 내용이 섞여 나오는 경우였습니다.
그래서 다음에는 언론사가 아니라
뉴스 제목 안에 특정 단어가 들어 있으면 자동으로 제외하는 기능
을 넣어보려고 합니다.
예를 들어 제외하고 싶은 단어를 몇 개 등록해두고
제목에 그 단어가 있으면 보내지 않는 방식입니다.
조금씩 필터가 늘어나고 있지만 이렇게 하나씩 만들어보니까 처음 만들었던 뉴스봇보다 훨씬 제가 실제로 사용할 만한 형태로 바뀌고 있습니다.