기본 콘텐츠로 건너뛰기

NodeJs 를 이용한 EPG 정보가져오기


* 나의 환경 정보
장비 : 라즈베리파이 3 b
OS : 라즈비안 Jessie
사용 프로그램 : NodeJs v.8.11.3
방송사 : KT 올레TV

필요한 NODE 모듈은 아래와 같다.
var cheerio = require('cheerio'),
    request = require('request'),
    iconv = require('iconv-lite'),
    charset = require('charset'),
    fs = require('fs'),
    shell = require('shelljs');

* 순서

1. node로 웹크롤링을 해와서 방송 정보 xml파일을 만든다.

2. 만들어진 xml파일을 socat 을 이용하여 tvheadend xmltv.sock 로 전송해준다.

* 소스

1. request 를 이용한 스크래핑
request.post({
        uri: epg2xml[gISP],
        headers: {'content-type': 'application/x-www-form-urlencoded'},
        body: require('querystring').stringify(postData),
        encoding: null
        },function(err,res,body){
            if(err){
                throw err;
            }

            var enc = charset(res.headers, body);
            var rst = iconv.decode(body, enc);
            var $$ = cheerio.load(rst);

2. cheerio 를 이용한 html 파싱
$$('.schedule_info tbody > tr').each(function(num, elem) {

                var tHour = "";
                var tTime = [];
                var tPgm = [];
                var tCtg = [];
                var tRat = [];
                $$(this).find('td').each(function(idx, obj) {

3. xml 파일 생성
function fnWriteXml() {

    for(var k=0; k<arrSche.length; k=k+5){

        if((k+5) >= arrSche.length){
            gXml += '   arrSche[k]+arrSche[k+1]+'00 +0900" stop="'+fnGetFullDate(gDate)+'010000 +0900" channel="'+channelInfo[gCount].Id+'">\n';
        }else{
            gXml += '   arrSche[k]+arrSche[k+1]+'00 +0900" stop="'+arrSche[k+5]+arrSche[k+6]+'00 +0900" channel="'+channelInfo[gCount].Id+'">\n';
        }
        gXml += '       '</span>+<span style="color: #9cdcfe;">arrSche</span>[<span style="color: #9cdcfe;">k</span>+<span style="color: #b5cea8;">2</span>]+<span style="color: #ce9178;">'\n';

4. xml파일 socat 전송
function fnCallSocat(){
    if(shell.exec('cat xmlv.xml | sudo socat - UNIX-CONNECT:/home/hts/.hts/tvheadend/epggrab/xmltv.sock').code !== 0){
        shell.echo('failed');
        shell.exit(1);
    }
}


댓글

  1. 안녕하세요. 케이블tv epg를 찾다가 오게되었습니다. 좋은 정보감사합니다.

    답글삭제
    답글
    1. 네 안녕하세요
      만들고 혼자서 연습삼아서 대충올렸는데 도움이되었다니 다행이네요

      삭제

댓글 쓰기

이 블로그의 인기 게시물

라즈베리파이 cpu 온도 확인

라즈베리파이 cpu온도를 확인하는 명령어이다. => vcgencmd measure_temp

Apple 애플워치3 GPS 38mm + 알루미늄 케이스 스페이스그레이(MTF02KH/A) 블랙(밴드)

  Apple 애플워치3 GPS 38mm + 알루미늄 케이스, 스페이스그레이(MTF02KH/A), 블랙(밴드) 보고 계신 상품에 대해서 소개해드립니다. 내용은 일절 과장없이 포스팅 당시 제공된 정보로 포스팅됩니다. ☆☆☆☆☆   730개 상품평 259,000 원 상품 구매하러가기 상품정보 쿠팡상품번호 1583378807-2706641887 품명 및 모델명 Apple Watch Series 3 GPS, 38mm Aluminium Case with Sport Band MTF02KH/A KC 인증 필 유무 본품 : R-CRM-APA-A1891 / 배터리 : YU10165-17011A 정격전압, 소비전력 해당없음 출시년월 2018.06 제조자(수입자) 애플INC(애플코리아) 제조국 중국 필수표기정보 더보기 상품평 〓〓〓〓〓〓〓〓〓〓〓〓〓〓 다** ★★★★★   2020.03.05 Apple 애플워치3 GPS 38mm + 알루미늄 케이스, 스페이스그레이(MTF02KH/A), 블랙(밴드) 고민은 배송을 늦출뿐... 사면 어떻게든 잘 쓰게됩니다 *한달사용리뷰예요* 운동할때 쓰려고 샀어요! 가민 제품을 살까 살짝 고민했었는데 가민은 가격이 넘 비쌌고, 아이폰을 쓰고있어서 애플워치를 한번은 써보고 싶었어요. 결정적으로 남친이 3를 처음 나왔을때부터 지금까지 쓰고있었는데, 제가 고민하는거 보더니 스마트워치 입문용으로 괜찮다고 해서, 나중에 가민으로 기변하더라두 일단 애플워치 써보고싶어서 샀어요! +신모델 고민하시는 분들도 많으실거같긴 한게 주변에 3시리즈 쓰시는 분들한테 한 번 물어보세요 아마 아직도 만족하고 짱짱하다는 평 많이 있으실듯요(제남친 포함) (사이즈) 손목이 (비교적)얇은편이라 38mm 구매했어요! 남친은 40mm쓰는데 화면이 더 커서 시원시원한 느낌은 있었디만 제 손목에 맞는 사이즈가 있는거니까요. 그렇다고 38mm가 잘 안보인다던지 그런건 절대 아니예요ㅎㅎ 이건 가격차이도 있구 크기별로 주는 느낌도 아주 조금은 다르니 매장가보시거나 친구...