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

저희 학교 공지사항이 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

신고

"이니스프리님의 댓글"

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

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
공지 시스템 점검 작업 완료 안내 10 마스터 마스터 24.09.05.16:25 3960
공지 [중요] 호스팅 만료와 관련하여 일부 수칙이 변경됩니다. 4 마스터 마스터 23.01.14.02:23 10952
공지 낚시성 불법도박 홍보 게시글을 주의하세요. 9 image 네모 네모 22.08.09.18:13 3017
공지 슬기로운 포인트 벌이를 하는 법 (22.10.11 업데이트) 64 네모 네모 18.06.17.20:25 18096
4218 리눅스를 깔아봤습니다! 14 260578 260578 19.01.14.15:36 256
4217 비밀번호에 대하여 36 Hanam09 Hanam09 19.01.14.15:10 309
4216 주먹왕 랄프 2 보고 왔습니다. 5 NoYeah NoYeah 19.01.13.12:32 316
4215 한 파 같지 않는 한파 날씨 9 핫슈 19.01.13.00:59 132
4214 독감입니다ㅠ 18 네모 네모 19.01.12.22:55 272
4213 스텔라리스 전투 장면 장관이네요! 4 image BVC_Liper_Okbul BVC_Liper_Okbul 19.01.12.19:36 302
4212 다들 바쁘신가보네요. 14 제르엘 제르엘 19.01.12.13:22 271
4211 안녕하세요 가입후 첫인사입니다 :) 12 혜임 19.01.10.13:40 174
정규식은 정말 알면알수록 신기하네요. 9 joyfuI 19.01.10.11:44 297
4209 전략게임을 제작해볼 예정입니다. 20 BVC_Liper_Okbul BVC_Liper_Okbul 19.01.09.22:09 563
4208 스텔라리스 기어이 미친짓을 저질러버렸습니다아아 4 image BVC_Liper_Okbul BVC_Liper_Okbul 19.01.08.21:34 487
4207 잡담 7 image 국내산라이츄 국내산라이츄 19.01.07.23:01 190
4206 어제 사촌 결혼식에 다녀왔습니다 7 image 국내산라이츄 국내산라이츄 19.01.06.20:02 218
4205 도박은 나쁩니다. -2:26분 수정 15 BVC_Liper_Okbul BVC_Liper_Okbul 19.01.06.14:25 489
4204 안녕하세요! 26 네모 네모 19.01.06.09:46 332
4203 으 나만 개근에서빠져있네.ㅠㅠㅠㅠㅠㅠㅠ 7 image 슬기 title: 투명 아이콘슬기 19.01.06.00:05 215
4202 맛있는 마카롱! 7 image 라엘 라엘 19.01.04.17:05 248
4201 꺄아아아아...자동 운송 인공지능 제작중입니다. 2 image BVC_Liper_Okbul BVC_Liper_Okbul 19.01.04.11:58 151
4200 제가 프로그램을 만들어 보았습니다. 1 file title: 대한민국 국기gimmepoint 19.01.03.21:06 877
4199 고통+고통....번역은 역시 힘듭니다. 4 image BVC_Liper_Okbul BVC_Liper_Okbul 19.01.03.13:24 217