Feed43 로 제작해본 Band in a Box News Feed

요즘 RSS feed 는 점점 줄어가고 있는 추세라고, 벌써 몇번이나 글을 남긴 듯 하다. 그래도 난 여전히 쓰고 있고, 내가 정보를 접하는 수단 중 가장 강력한(?) 수단이라고 할 수도 있겠다.

오늘, Band in a Box 홈페이지를 갔다가, 혹시나 RSS 서비스를 하나 해서 찾아봤는데, 역시나 없었다. 다만, 뉴스 전용 페이지가 있을 뿐이었다.

혹시나 해서, 무심코 그 페이지를 Inoreader 에 붙여넣어봤더니, Feed43 이란 사이트에서 수동으로 Feed 를 만들 수 있다는 알림이 떴다.
이건 또 뭐야??


그리하여 또 한시간여를 헤매다가, 대충은 방법을 알아낼 수 있었다.

Feed43 은, HTML Tag 를 이용하여, HTML 문서 중, 같은 형식(Tag)을 사용하는 부분을 추출하여 피드로 만들어준다.
예를 들어, BiaB 처럼, 뉴스 페이지가 따로 있고, 그 페이지에 계속 새로운 소식이 추가될 때, ‘새롭게 추가되는 부분’만을 따로 Feed 로 만들어줄 수 있다는 뜻이다.

기본으로 간단하게 사용하려면 무료이고, 기타 복잡하게 사용하려면 돈이 든다. 내겐 무료판으로도 충분할 정도.

사용법은 그리 어렵지는 않으나, 문법 중 {*} 를 어떻게 써야할 지를 잘 모르겠다. {*} 는 설명이 자세히 나와있질 않다. 대충 미루어 짐작을 해보는 수밖엔 없다.
Tutorial 을 봐도, 다른 사용자들의 작품(?)을 봐도 잘 이해가 안된다.

….

몇시간째 뚫어져라 쳐다보다가, 문득 든 생각이 있었다. feed43.com 은 원하는 내용 선택을 위해 Regex 를 사용한다고 보여진다.

  • {%} 는 HTML 문서중 원하는 부분을 택할 때 사용한다. Regex 에서는 .* 와 같다.
  • {*} 는 불필요한 부분을 택할 때 사용한다. 이 부분도 역시 .* 와 같다.
  • 위 두 선택자 모두, 개행문자를 포함하며, 정확하게는  (.*)? 인 듯 하다.

다만, {%} 는 앞뒤로 조건이 붙는다. 예를 들어, 아래의 예에서 보면, <div class="newsp">{%}</div> 처럼 {%} 를 택하기 위해 앞 뒤로 매칭 상황을 정확하게 묘사해준다.
이 부분을 Regex 로 표현하면 이렇다. (Regex 에서 . 이 개행문자를 포함한다는 가정 하에)

<div class="newsp">(.*)?</div>

여기서 매칭한 $1 은 div tag 중간에 뭔가가 있거나, 없더라도(Null 문자) 그 사이의 내용을 선택하게 해준다.
이렇게 가정을 하고 아래의 예를 보자.
BiaB News HTML 페이지를 일부 옮겨본다.

<div class="newspost">
<a id="002979"></a>

<p class="date">December 14, 2018</p>

<h3><a href="http://www.pgmusic.com/forums/ubbthreads.php?ubb=showflat&Number=509530&page=1">Notation Enhancements in Band-in-a-Box® 2019 for Windows! </a></h3>

<div class="newsp">
본문
</div>
</div>

위 HTML 을 기본으로, 아래처럼 Item Search Pattern 을 줘봤다.

<div class="newspost">
{*}
<p class="date">{%}</p>
<h3><a href="{%}">
{%}</a></h3>

<div class="newsp">
{%}
</div>
</div>

위 명령으로는 오류가 발생한다.
왜?
1~3행까지는 문제가 없다. 오류는 4행에서 발생한다. (이건 내 가설(?)이긴 하지만 내 스스로에겐 꽤 설득력이 있다.)
1~3행까지, Feed43 은 Regex 문법으로 매칭을 시도해나간다. </p> 까지 끝나고, 그 다음 매칭인 <h3> 를 찾으려 했다. 그러나 <h3> 를 찾지 못했고, 오류를 발생했다.

있는데 왜 못찾아? 눈 뜬 장님이야?

이유는 </p> 와 <h3> 사이에 있는 문자를 빠뜨렸기 때문이 아닐까? 바로 개행문자 말이다. 위 HTML 코드는 BiaB News 페이지의 HTML 문서 그대로다. 줄바꿈은 내가 맘대로 넣은게 아니다. 한 줄이 비어 있으므로, 개행문자는 2개가 들어가 있는 셈이다.
Feed43 의 Item Search Pattern 입력창에서 줄바꿈을 한다고 해서, 원 HTML 문서의 개행문자를 인식하는 건 아니다. 따라서, 개행문자를 인식하고, 무시해주게끔 명령을 넣어야 하지 않겠나?

Feed43 은 HTML 을 Parse 하여 Tag 과 Class, 값등을 인식하는게 아니고, 문자열 그대로를 인식한다. 그리고 인식(Matching) 알고리즘으로 Regex 를 쓴다.

이게 내가 내린 결론이다.

위로 다시 돌아가서, 4행에서 오류가 발생하지 않게 하려면, </p> 와 <h3> 사이에 있는 무언가(개행문자 2개)를 인식하고, 그것을 무시하도록 명시해줘야 한다. 그게 바로 {*} 이다.

그 사항을 고려하여 정리하면 아래와 같다.

<div class="newspost">
{*}
<p class="date">{%}</p>
{*}
<h3><a href="{%}">
{%}</a></h3>
{*}
<div class="newsp">
{%}
</div>
</div>

좀 더 확실하게 하기 위해선 <h3>{*}<a href...> 로 해야 할 듯도 하지만, BiaB 페이지에 저렇게 되어 있으니, 앞으로도 계속 저렇게 쓰일 가능성이 있다고 보여지고, 따라서 그냥 그대로 놔뒀다. <h3>{*}<a href...> 로 넣어도 잘 작동한다.

{*} 는 이후 나오는 내용을 무시할 때 쓰면 되는 듯 하다. 그리고, 닫는 Tag 이후에는 꼭 써야하는가보다.

<div class="newpost"> 이후 바로 <p class> 가 나오기 때문에, 그냥 태그를 쭉 이어써주면 될 듯 했는데, 오류가 발생했다. 그 두 태그 사이에 {*} 를 넣어줬더니 제대로 인식했다.

그냥, ‘닫는 태그 이후엔 무조건 {*} 를 넣는다‘ 와, ‘태그와 태그 사이엔 {*} 를 넣는다‘ 를 지켜주면 될 듯 하다.
그렇지만, 이대로면 <h3><a href...> 이 사이에도 넣어줘야 되는 게 아닌가 하는 생각이 드는데.. 그렇겐 안해줘도 오류가 나지 않았으니, 정확한 문법을 알 수는 없다. (이 사이엔 {*}을 넣어줘도, 넣지 않아도 잘 작동했다.)

아니 왜 설명이 없는거야…? {%} 에 대한 설명만 있지, {*}는 왜 없어??
거참!!!

위 내용은 내가 Regex 를 생각하지 못했을 때 막무가내로 밀어붙인 이론(?)이었다. 無知는 어쩔 수 없다지만, 無識은 죄다.


이렇게 원하는 정보를 캐내고(?), {%} 를 변수로 생각해서(순서대로 {%1}, {%2} 식으로), 해당 필드(Item Title Template, Item Link Template, Item Content Template)에 넣어준다.

작성이 모두 끝나면 Feed URL 을 받게 되고, 이걸 RSS reader 에 추가해주면 된다.
최종 완성된 Feed 주소는 다음과 같다.

https://feed43.com/bandinabox_news.xml

기본 설정은 위와 같고, Preview 가 끝난 후 하단 부분에 Optional features 에서 고려할 부분이 세개가 있다.

첫째, ‘Change file name..’ 으로 Feed 주소(http:/…..)를 알기 쉽게 바꿔준다. 기본값으로는 난수로 숫자가 할당되는데, 이걸 보기 쉽게 변경해주는 게 좋겠다.

둘째, ‘Protect feed from being edited’ 를 통해, 생성한 Feed 를 타인이 맘대로 수정하지 못하게 만든다. 비밀번호를 주고, Email 주소를 넣으면, 입력한 비번과 Edit URL 주소가 내 이메일로 전달된다.
혹시라도 누군가 내 작업을 망치는 꼴을 보고 싶지 않다면, 이 설정을 켜놓는 편이 좋다.

셋째, 나중에 이 Feed 를 고치고 싶다면, 다시 Feed43 페이지로 접속해야 한다. Feed43 에 가입이 되어 있다면 로그인해서 작업할 수 있겠지만, 그렇지 않은 경우엔 다시 이 페이지로 오려면 주소를 기억하고 있어야 한다.
이 주소가 바로 Edit URL 주소다. 가장 하단에 있는 Send me summary e-mail 을 사용해서 이 주소를 내 이메일로 보내놓으면, 나중에 쉽게 접근하여 수정이 가능하다.
물론, 둘째 사항을 선택했다면, 이건 무시해도 된다.

….

또 하나 배워간다. 뭔 배울게 이리 많은지.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.