기본 콘텐츠로 건너뛰기

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

      삭제

댓글 쓰기

이 블로그의 인기 게시물

라즈베리파이 토렌트 다운로드완료 후 seed 자동삭제

1. 쉘파일저장할 폴더를 생성한다.
sudo mkdir /home/pi/shell 2. 생성한 폴더의 권한을 설정한다.
sudo chmod 777 /home/pi/shell 3. 폴더의 소유자를 변경한다.
sudo chown -R pi /home/pi/shell 4. shell 파일을 생성한다
 sudo nano /home/pi/shell/autoDelSeed.sh
 ‎
 ‎5. shell스크립트 내용을 입력한다. 포트,아이디,비밀번호만 수정하면된다.
#!/bin/sh
SERVER="포트 --auth 아이디:비밀번호"
TORRENTLIST=`transmission-remote $SERVER --list | sed -e '1d;$d;s/$ for TORRENTID in $TORRENTLIST
do
    DL_COMPLETED=`transmission-remote $SERVER --torrent $TORRENTID$    STATE_STOPPED=`transmission-remote $SERVER --torrent $TORRENTI$    if [ "$DL_COMPLETED" ] && [ "$STATE_STOPPED" ]; then
        transmission-remote $SERVER --torrent $TORRENTID --remove
    fi
done 6. 생성한 쉘스크립트파일의 실행권한을 추가한다.
 sudo chmod +x /home/pi/shell/autoDelSeed.sh 7. 트랜스미션을 정지한다.
sudo /etc/init.d/transmission-daemon stop 8. Transmission-daemon 설정 변경
sudo nano /etc/transmission-daemon/settings.json 9. 설정이 필요한 아이템을 수정한다.
"script-torrent-done-enabled": true,
"script-to…

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

1.다운로드 받은 폴더로 이동한다.
cd /home/pi/epg2xml-1.2.42. 실행권한을 부여한다.
sudo chmod -x epg2xml.py3. 접근권한을 부여한다.
sudo chmod 755 Channel.jsonepg2xml.py, Channel.json  2개 파일의 실행 권한을 준다.4. python-setuptools 설치한다.
sudo apt-get install python-setuptools5. beautifulsoup 설치한다.
sudo easy_install beautifulsoup6. lxml 설치한다.
sudo easy_install lxml6-1. lxml 설치오류나면 아래 프로그램을 순서대로 설치한다.
6-2. libxml2-dev 설치한다.
sudo apt-get install libxml2-dev
6-3. libxslt1-dev 설치한다.
sudo apt-get install libxslt1-dev
6-4. python-dev 설치한다.
sudo apt-get install python-dev
=> 이미 있는거라고 나오거나 설치완료되면
sudo pip install lxml 를 설치한다.7. python-bs4 설치한다.
sudo apt-get install python-bs48. Tvheadend설정 epggrab에서 외부xmltv로 설정변경후 다음명령어를 실행한다.sudo /usr/bin/python /home/pi/epg2xml-1.2.4/epg2xml.py -i KT -s /home/hts/.hts/tvheadend/epggrab/xmltv.sock

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

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