기본 콘텐츠로 건너뛰기

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

      삭제

댓글 쓰기

이 블로그의 인기 게시물

라즈베리파이 miniDLNA 1.2.1

1. 라이브러리를 설치한다. sudo apt-get install autopoint debhelper dh-autoreconf gcc libavutil-dev libavcodec-dev libavformat-dev libjpeg-dev libsqlite3-dev libexif-dev libid3tag0-dev libogg-dev libvorbis-dev libflac-dev -y 2. 소스파일을 다운로드 받는다. wget  http://downloads.sourceforge.net/project/minidlna/minidlna/1.2.1/minidlna-1.2.1.tar.gz 만약 다운로드가 안되면 직접사이트에 들어가서 다운받는다. 3. 다운받은 파일 압축을 푼다. tar -xvf minidlna-1.2.1.tar.gz 4. minidlna 디렉토리로 들어간다. cd minidlna-1.2.1 5. configure, make, 그리고 minidlna 를 ...

라즈베리파이 TVHeadend EPG 설치 및 설정

1.다운로드 받은 폴더로 이동한다. cd /home/pi/epg2xml-1.2.4 2. 실행권한을 부여한다. sudo chmod -x epg2xml.py 3. 접근권한을 부여한다. sudo chmod 755 Channel.json epg2xml.py , Channel.json  2개 파일의 실행 권한을 준다. 4. python-setuptools 설치한다. sudo apt-get install python-setuptools 5. beautifulsoup 설치한다. sudo easy_install beautifulsoup 6. lxml 설치한다. sudo easy_install lxml 6-1. lxml 설치오류나면 아래 프로그램을 순서대로 설치한다. 6-2. libxml2-dev 설치한다. sudo apt-get install libxml2-dev 6...

라즈베리파이 외장하드 UUID 확인 방법

외장하드 마운트할때 유용하게 쓸수있는 명령어이다. => sudo blkid