기본 콘텐츠로 건너뛰기

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

      삭제

댓글 쓰기

이 블로그의 인기 게시물

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

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

라즈베리파이 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 를 설치한다. ./configure && sudo make && sudo make install 6. 기본 설정 파일을 아래경로로 복사한다. sudo cp minidlna.conf /etc/ 7. 부팅시 자동으로 실행하게 스크립트를 등록한다. sudo cp linux/minidlna.init.d.script /etc/init.d/minidlna 8. 스크립트에 권한을 설정한다. sudo chmod +x /etc/init.d/minidlna 9. minidlna 를 기본으로 사용할 수 있게 설정한다. sudo update-rc.d minidlna defaults 10. minidlna.conf 설정하기 sudo nano /etc/minidlna.conf 아래와 같은 부분만 설정 #표시를 제거해서 주석처리를 제거한다. media_dir=V,/mnt/Tdown friendly_name=Raspberry DLNA inotify=yes media_