* 나의 환경 정보
장비 : 라즈베리파이 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);
}
}
안녕하세요. 케이블tv epg를 찾다가 오게되었습니다. 좋은 정보감사합니다.
답글삭제네 안녕하세요
삭제만들고 혼자서 연습삼아서 대충올렸는데 도움이되었다니 다행이네요