- 9
- joyfuI
- 조회 수 284
저희 학교 공지사항이 rss를 지원하지 않아 편하게 rss로 구독하려고 php로 공지사항 페이지를 파싱해서 rss로 만들어주는 걸 만들었습니다.
php에 대해서 문외한이지만 좀 검색해보니 "PHP Simple HTML DOM Parser"라는 무진장 쉬운 파서가 있더라고요?
(단지 Quick Start 메뉴얼만 봤을 뿐인데 뚝딱뚝딱 원하는 부분만 긁어올 수 있게 되었습니다.)
원하는 부분을 따왔으니 이제 이걸 가공해서 rss 형식으로 뿌려줘야하는데 정규식이란게 생각나서 필요한 부분만 검색하며 만드니 어느새 완성했습니다.
특히 "[카테고리] 텍스트"여기에서 카테고리만 추출해야 하는데 정규식을 /^\[(.+)\]/ 이렇게 짜니까 처음엔 문제가 없는 줄 알았다가 "[카테고리] [텍스트] 텍스트"에서 "카테고리] [텍스트" 이렇게 추출되는 문제가 발생했습니다.
이걸보고 아 장난아니게 복잡해 지겠구나 했지만 역시 검색의 힘으로 단 한글자 추가로 해결되었습니다! /^\[(.+?)\]/
탐욕적 수량자, 게으른 수량자(네이밍 센스가;;;)라는데 정규식은 정말 신기한 것 같습니다.
다만 완성하고보니 페이지 접속시 파싱하는 거다보니 속도가 좀 느리네요.. 흠..
처음에 피들리에 등록이 안되서 당황했지만 꼼수로 파싱 페이지량을 줄여서 속도 빠르게 하고 등록한 뒤 다시 원래대로 바꿔 놓으니까 잘 갱신되는군요?!
댓글 9
그리고 정규식으로 파싱하시려면 simple HTML DOM parser을 사용하지 않고 정규식만으로 파싱하시거나,
아니면 simple HTML DOM parser 사용 후에 $category = explode("]", $var)[0]; 같은 방법으로 정규식을 사용하지 않고 문자열 처리를 하시면
리소스 차원에서나 속도 차원에서나 조금 더 효율적이지 않을까 생각되네요 ^-^
1. 저도 원래 feed43 쓰다가 느린 업데이트 주기 + 내용은 rss로 못 뿌려주는 문제로 직접 만들어봤습니다.(근데 이 내용을 뿌려주는 부분때문에 느리더라고요. 글에 일일이 또 접속해야하니..)
사실상 feed43로 피드를 만들다 보면 정규식이랑 다를바가없...
2. Inoreader라는 사이트는 처음들어보네요. 구글리더가 없어지고 피들리로 옮겼던건데 피들리 대비 Inoreader의 장점은 뭐가 있을까요?
3. 웹호스팅에서는 불가능한 방법..ㅠㅠ 뭐 nas가 있으니 nas에 웹서버를 설치하면되지만 스터디포어스를 사용하고 있는데 그럴 필요성까진 못 느껴서요.
4. 글 중간에 '아 장난아니게 복잡해 지겠구나' 생각했던 부분이 문자열 분할로 막 처리하는걸 생각했던건데 꽤 간단한 방법이 있었군요?!
댓글을 작성하다가 실수로 삭제를 해서 -30p 두 번 차감되고 처음부터 다시 작성하네요 ㅠㅠ
1. 그런 목적이라면 직접 크롤링하는 것이 가장 효율적이더군요.
RSS가 아니라 이메일로 알려주는 사이트가 있었는데 상당히 불안정했습니다 ㅠㅠ
(제 기억이 맞다면 a태그 타고 들어가서 이메일로 내용까지도 알려줄 수 있었어요)
2. Inoreader는 Feedly보다 무료플랜에서 제약이 덜 해요.
가격이 정확히 기억나지 않지만 예전에 비교했을 때 유료플랜에서 가성비도 더 좋았던 것 같구요.
하지만 전반적인 디자인이나 기능성은 Feedly가 우위에 있다고 생각되네요(업계 1위).
3. SFU Expert에서는 cronjob 가능하지 않나요?
웹사이트 중에서 간단한 cronjob을 대신 돌려주는 사이트도 있고, 그누보드의 m3cron처럼 설치형 crontab 플러그인도 있구요.
텔레그램 봇은 파이썬이나 자바를 사용하지 않아도 PHP에서도 돌아갑니다 ^^
텔레그램 봇으로 제목, 내용, 첨부파일(a태그) 모두 크롤링할 수 있죠.
4. 크롤링이 절반이고, 문자열 처리가 나머지 절반이란 격언(?)이 있더군요.
어떤 경우에는 문자열 처리가 크롤링보다 더 어려운 때도 있더군요 ㅠㅠ
Inoreader 홈페이지 가보니 무려 한국어를 지원하길래 30분 정도 써봤습니다. 근데 번역 수준이 번역기더라고요. 설정이 다양해서 좋은데 발번역하고 합쳐지니까 영어인 피들리보다 설정 알아먹기 힘들어지는 효과가..ㄷ
그래서 저도 언어를 영어로 설정해서 사용하고 있네요 ^^
Feedly 프리플랜이 피드 100개까지만 지원되는 것이 제가 Inoreader로 옮긴 가장 큰 이유였어요.
RSS 리더가 전반적으로 사양길을 걷고 있어서 장기적으로는 Tiny Tiny RSS 같은 self-hosted 방식을 사용하게 될 것 같아요 ㅠㅠ
아무래도 저랗게 간단한 경우엔 이니스프리님의 말처럼 정규식보단 strpos와 substr을 적절히 조합해 사용하는 것이 좋습니다.
저도 사실 저번에 humit 님께 배운 것이에요~! ^-^
그 전까지는 beautifulsoup으로 크롤링해놓고 다시 정규식으로 문자열 처리를 하고는 했죠 ㄷㄷ
다시 한 번 감사드립니다!!
정규식의 세계는 참 오묘하고 심오하더군요 ^^
Feed43이나 Feedity 같은 사이트를 이용하면 RSS를 제공하지 않는 사이트에서도 정규식을 사용하지 않고 RSS를 생성할 수 있어요.
다만 무료플랜에서는 업데이트 주기 등에 제한이 있습니다.
저도 작년에는 Feed43 유료플랜 + Feedly 조합으로 사용하다가 Feedly에서 Inoreader로 갈아타더니
결국에는 개인 홈페이지에서 PHP로 파싱해서 여러 정보를 모아서 받아보고, 반드시 급히 챙겨야 할 알림만 텔레그램 봇으로 받고 있어요.
Feed43이나 Feedity가 완벽한 것은 아니어서 RSS를 생성해서 리더로 보는 것보다 홈페이지 + 텔레그램 조합이 더 좋더군요 :)
접속할 때마다 파싱해서 웹페이지의 반응속도가 느리다시면, 크론탭 등을 이용하여 주기적으로 파싱하고 캐싱하는 방법을 추천드려요~!