기본 콘텐츠로 건너뛰기

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. 네 안녕하세요
      만들고 혼자서 연습삼아서 대충올렸는데 도움이되었다니 다행이네요

      삭제

댓글 쓰기

이 블로그의 인기 게시물

413 (Request Entity Too Large)

• 파일업로드 오류시 nginx 업로드사이즈변경 1. 설정파일을 연다. sudo nano /etc/nginx/nginx.conf 2. http구문안에 아래내용을 삽입한다. http {   # Set client upload size - 100Mbyte   client_max_body_size 100M;   ...   ..   . } 3.업로드 크기가 설정되었으니 nginx를 재시작한다. nginx -s reload 또는 service nginx restart

Apple Magic Keyboard Korean MXQT2KH/A 혼합색상

  Apple Magic Keyboard Korean MXQT2KH/A, 혼합색상 보고 계신 상품에 대해서 소개해드립니다. 내용은 일절 과장없이 포스팅 당시 제공된 정보로 포스팅됩니다. ☆☆☆☆☆   60개 상품평 389,000 원 상품 구매하러가기 상품정보 쿠팡상품번호 1406902052-2442587089 품명 및 모델명 Apple Magic Keyboard for 11-inch iPad Pro (2nd generation) - Korean / (MXQT2KH/A) 인증사항 해당없음 제조국(원산지) 중국 제조자(수입자) APPLE INC. (애플코리아 유한회사) 소비자상담 관련 전화번호 쿠팡 고객센터 1577-7011 필수표기정보 더보기 상품평 〓〓〓〓〓〓〓〓〓〓〓〓〓〓 전** ★★★★★   2020.05.22 Apple Magic Keyboard Korean MXQT2KH/A, 아이패드 프로 11 1세대, 2세대, 혼합색상 무친판단 키보드, 하지만 이 가격이면 아이패드 미니를 아이패드를 노트북처럼 쓰고싶다. 아이패드로 사무업무나 문서, 웹 서핑, 타이핑을 많이한다 무조건입니다. 진짜 키보드랑 트랙패드 조합은 미쳤어요 각도 부분과 내구성이 아쉬운 부분이 있습니다. 내구성은 이전 스마트 폴리오와 달라질게 없는 내구성이라 관리가 필수적이고 각도는 해당 사진 이후로 더 안꺾입니다. 무릎에 대고 쓰면 쪼금 아쉬운 부분+이전 키보드와는 다르게 180도 안꺾여서 펜슬과 같이 쓰기 쪼오오금 아쉽네요. + 가격이면 아이패드 미니 사는데 그래도 전 키보드 살래요 〓〓〓〓〓〓〓〓〓〓〓〓〓〓 윤** ★★★★★   2020.05.18 Apple Magic Keyboard Korean MXQT2KH/A, 아이패드 프로 11 1세대, 2세대, 혼합색상 일단 보면 당신의 머릿속에 계속 맴 돌것. 장점 아이패드가 노트북으로 변신. 키감 - 그냥 노트북임.! 간지 작살... 내가 지금까지 구입한 애플 제품중에 (모든 애플 제품을 가지고 있음) 패드+이 ...