• 목록
  • 아래로
  • 위로
  • 9
  • joyfuI
  • 조회 수 265

저희 학교 공지사항이 rss를 지원하지 않아 편하게 rss로 구독하려고 php로 공지사항 페이지를 파싱해서 rss로 만들어주는 걸 만들었습니다.


php에 대해서 문외한이지만 좀 검색해보니 "PHP Simple HTML DOM Parser"라는 무진장 쉬운 파서가 있더라고요?

(단지 Quick Start 메뉴얼만 봤을 뿐인데 뚝딱뚝딱 원하는 부분만 긁어올 수 있게 되었습니다.)


원하는 부분을 따왔으니 이제 이걸 가공해서 rss 형식으로 뿌려줘야하는데 정규식이란게 생각나서 필요한 부분만 검색하며 만드니 어느새 완성했습니다.


특히 "[카테고리] 텍스트"여기에서 카테고리만 추출해야 하는데 정규식을 /^\[(.+)\]/ 이렇게 짜니까 처음엔 문제가 없는 줄 알았다가 "[카테고리] [텍스트] 텍스트"에서 "카테고리] [텍스트" 이렇게 추출되는 문제가 발생했습니다.


이걸보고 아 장난아니게 복잡해 지겠구나 했지만 역시 검색의 힘으로 단 한글자 추가로 해결되었습니다! /^\[(.+?)\]/


탐욕적 수량자, 게으른 수량자(네이밍 센스가;;;)라는데 정규식은 정말 신기한 것 같습니다.



다만 완성하고보니 페이지 접속시 파싱하는 거다보니 속도가  좀 느리네요.. 흠..

처음에 피들리에 등록이 안되서 당황했지만 꼼수로 파싱 페이지량을 줄여서 속도 빠르게 하고 등록한 뒤 다시 원래대로 바꿔 놓으니까 잘 갱신되는군요?!

댓글 9

이니스프리
profile image

정규식의 세계는 참 오묘하고 심오하더군요 ^^

 

Feed43이나 Feedity 같은 사이트를 이용하면 RSS를 제공하지 않는 사이트에서도 정규식을 사용하지 않고 RSS를 생성할 수 있어요.

다만 무료플랜에서는 업데이트 주기 등에 제한이 있습니다.

 

저도 작년에는 Feed43 유료플랜 + Feedly 조합으로 사용하다가 Feedly에서 Inoreader로 갈아타더니

결국에는 개인 홈페이지에서 PHP로 파싱해서 여러 정보를 모아서 받아보고, 반드시 급히 챙겨야 할 알림만 텔레그램 봇으로 받고 있어요.

Feed43이나 Feedity가 완벽한 것은 아니어서 RSS를 생성해서 리더로 보는 것보다 홈페이지 + 텔레그램 조합이 더 좋더군요 :)

 

접속할 때마다 파싱해서 웹페이지의 반응속도가 느리다시면, 크론탭 등을 이용하여 주기적으로 파싱하고 캐싱하는 방법을 추천드려요~!

comment menu
2019.01.10. 13:02

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 → 이니스프리
profile image

그리고 정규식으로 파싱하시려면 simple HTML DOM parser을 사용하지 않고 정규식만으로 파싱하시거나,

아니면 simple HTML DOM parser 사용 후에 $category = explode("]", $var)[0]; 같은 방법으로 정규식을 사용하지 않고 문자열 처리를 하시면

리소스 차원에서나 속도 차원에서나 조금 더 효율적이지 않을까 생각되네요 ^-^

comment menu
2019.01.10. 13:31

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

포인트 폭탄+ → 이니스프리
이니스프리님 축하합니다.
추가로 100포인트만큼 포인트 폭탄+를 받았습니다.
comment menu
2019.01.10. 13:31

신고

"포인트 폭탄+님의 댓글"

이 댓글을 신고 하시겠습니까?

삭제

"포인트 폭탄+님의 댓글"

이 댓글을 삭제하시겠습니까?

joyfuI 작성자 → 이니스프리

1. 저도 원래 feed43 쓰다가 느린 업데이트 주기 + 내용은 rss로 못 뿌려주는 문제로 직접 만들어봤습니다.(근데 이 내용을 뿌려주는 부분때문에 느리더라고요. 글에 일일이 또 접속해야하니..)

사실상 feed43로 피드를 만들다 보면 정규식이랑 다를바가없...

2. Inoreader라는 사이트는 처음들어보네요. 구글리더가 없어지고 피들리로 옮겼던건데 피들리 대비 Inoreader의 장점은 뭐가 있을까요?

3. 웹호스팅에서는 불가능한 방법..ㅠㅠ 뭐 nas가 있으니 nas에 웹서버를 설치하면되지만 스터디포어스를 사용하고 있는데 그럴 필요성까진 못 느껴서요.

4. 글 중간에 '아 장난아니게 복잡해 지겠구나' 생각했던 부분이 문자열 분할로 막 처리하는걸 생각했던건데 꽤 간단한 방법이 있었군요?!

comment menu
2019.01.10. 14:52

신고

"joyfuI님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 → joyfuI
profile image

댓글을 작성하다가 실수로 삭제를 해서 -30p 두 번 차감되고 처음부터 다시 작성하네요 ㅠㅠ

 

1. 그런 목적이라면 직접 크롤링하는 것이 가장 효율적이더군요.

RSS가 아니라 이메일로 알려주는 사이트가 있었는데 상당히 불안정했습니다 ㅠㅠ

(제 기억이 맞다면 a태그 타고 들어가서 이메일로 내용까지도 알려줄 수 있었어요)

 

2. Inoreader는 Feedly보다 무료플랜에서 제약이 덜 해요.

가격이 정확히 기억나지 않지만 예전에 비교했을 때 유료플랜에서 가성비도 더 좋았던 것 같구요.

하지만 전반적인 디자인이나 기능성은 Feedly가 우위에 있다고 생각되네요(업계 1위).

 

3. SFU Expert에서는 cronjob 가능하지 않나요?

웹사이트 중에서 간단한 cronjob을 대신 돌려주는 사이트도 있고, 그누보드의 m3cron처럼 설치형 crontab 플러그인도 있구요.

텔레그램 봇은 파이썬이나 자바를 사용하지 않아도 PHP에서도 돌아갑니다 ^^

텔레그램 봇으로 제목, 내용, 첨부파일(a태그) 모두 크롤링할 수 있죠.

 

4. 크롤링이 절반이고, 문자열 처리가 나머지 절반이란 격언(?)이 있더군요.

어떤 경우에는 문자열 처리가 크롤링보다 더 어려운 때도 있더군요 ㅠㅠ

comment menu
2019.01.10. 16:48

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

joyfuI 작성자 → 이니스프리

Inoreader 홈페이지 가보니 무려 한국어를 지원하길래 30분 정도 써봤습니다. 근데 번역 수준이 번역기더라고요. 설정이 다양해서 좋은데 발번역하고 합쳐지니까 영어인 피들리보다 설정 알아먹기 힘들어지는 효과가..ㄷ

comment menu
2019.01.10. 17:02

신고

"joyfuI님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 → joyfuI
profile image

그래서 저도 언어를 영어로 설정해서 사용하고 있네요 ^^

Feedly 프리플랜이 피드 100개까지만 지원되는 것이 제가 Inoreader로 옮긴 가장 큰 이유였어요.

RSS 리더가 전반적으로 사양길을 걷고 있어서 장기적으로는 Tiny Tiny RSS 같은 self-hosted 방식을 사용하게 될 것 같아요 ㅠㅠ

comment menu
2019.01.10. 17:09

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

title: 황금 서버 (30일)humit
profile image

아무래도 저랗게 간단한 경우엔 이니스프리님의 말처럼 정규식보단 strpos와 substr을 적절히 조합해 사용하는 것이 좋습니다.

comment menu
2019.01.10. 19:53

신고

"humit님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 → humit
profile image

저도 사실 저번에 humit 님께 배운 것이에요~! ^-^

그 전까지는 beautifulsoup으로 크롤링해놓고 다시 정규식으로 문자열 처리를 하고는 했죠 ㄷㄷ

다시 한 번 감사드립니다!!

comment menu
2019.01.10. 20:11

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 [1차 해결 및 추가] 서버 접속 불가 문제 안내 12 마스터 마스터 24.06.20.15:22 475
공지 [작업 완료] 설 명절 맞이 서버 업데이트 안내 3 마스터 마스터 24.02.11.17:21 2509
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 6198
공지 낚시성 불법도박 홍보 게시글을 주의하세요. 9 image 네모 네모 22.08.09.18:13 844
공지 슬기로운 포인트 벌이를 하는 법 (22.10.11 업데이트) 64 네모 네모 18.06.17.20:25 15733
2333 생존 신고 합니다 ^^ 6 핫슈 17.03.06.10:28 141
2332 오늘은 삼일절이 아닌게 .. 6 image 대전댁 title: 은메달대전댁 17.03.05.23:45 141
2331 이번에는 위키에 그라데이션을 집어넣어봤습니다. 6 image Kongjak Kongjak 17.03.03.22:38 141
2330 흐으으으으음 11 하루살이 title: 황금 서버 (30일)하루살이 17.02.17.16:31 141
2329 가입인사를 가장한 질문. ISPConfig 는 lxc를 이용하나요? 3 나우닥 16.12.19.21:28 141
2328 워우 요즘 바빠서 오랜만에 왔는데 스포스가 bbb 2 Femiz 16.12.01.08:49 141
2327 심슨 작가가 예견한 것들 4 image BlackTeddyBear 16.11.12.16:39 141
2326 네이버 지식인 7 image humit title: 황금 서버 (30일)humit 16.11.12.16:15 141
2325 컴퓨터를 어찌 해야하련지 ... 19 대전댁 title: 은메달대전댁 16.10.17.18:22 141
2324 크읔.... 극딜을 당했습니다 6 file title: 은메달도다 16.10.01.00:03 141
2323 GEUN-HWANG 10 image 국내산라이츄 국내산라이츄 23.10.02.01:52 140
2322 안녕하세요! 11 JadeHan 21.04.05.21:09 140
2321 호스팅 포인트 모으기 12 image Apache Apache 20.06.18.00:08 140
2320 생존중 5 Nginx Nginx 19.12.26.20:36 140
2319 공식홈페이지가 바귀엿다@ 2 핫슈 19.12.07.09:34 140
2318 다들 즐추하세요. 홀민 홀민 19.09.11.16:51 140
2317 안녕하세요 3 OAUTH2 19.07.19.16:06 140
2316 와 요즘 날씨 습기때문에 더 푹푹찌네요 3 혜임 19.06.27.09:49 140
2315 슬슬 31절 축전 준비해야하네요.. 6 image 국내산라이츄 국내산라이츄 19.02.20.23:52 140
2314 새해 복 많이 받으세요 !!! 17 image 자뻑보이 자뻑보이 19.02.05.12:33 140