새창 작성 수정 목록 링크 Edit G카랜다 HDD HDD HDD 게시물 주소 복사


● epg2xml 최신 정보 작업

♨ 카랜더 일정 : 2022년04월06일
  • 링크

  • 첨부

  • 컨텐츠 정보

    본문

    ● epg2xml 최신 정보 작업


    https://github.com/epg2xml/epg2xml



    소개

    웹상의 여러 소스를 취합하여 XML 규격의 EPG(Electronic Program Guide)를 만드는 파이썬 프로그램

    v1 버전과 차이점

    • PHP 버전 제거
    • SKB → SK를 대체 (기존의 SK는 제거)
    • DAUM 제공자 추가
    • 설정 방법을 포함한 전반적인 사용법 개선
    • Python 3.6 이상 그리고 모듈화

    요구 조건

    1. Python 3.6 이상
    2. Python Package requestsbeautifulsoup4
    3. Python Package lxml (선택 사항으로 속도 향상을 기대할 수 있다.)

    플랫폼마다 파이썬 버전, 패키지 설치 가능 여부와 방법이 다르므로 검색을 통해 해결한다. 유명한 패키지들이라 어렵지 않을 것이다.

    실행

    1. 저장소를 git clone하거나

      git clone https://github.com/epg2xml/epg2xml

      zip 파일로 다운로드 하여 적절한 장소에 압축을 해제한다.

      curl -LJO https://github.com/epg2xml/epg2xml/archive/main.zip
    2. v1 버전과는 다르게 epg2xml 폴더만 보이고 epg2xml.py 파일이 없는데 모듈 -m로 실행해야 하며, 하위 명령어 run을 입력해야 한다. 없으면 도움말만 보이고 종료함.

      python -m epg2xml run

      그러면 아래와 같은 결과가 나온다.

      2021/03/04 02:19:51 INFO     CONFIG   183: No config file found. Creating a default one...
      2021/03/04 02:19:51 INFO     CONFIG   206: Your config was upgraded. You may check the changes here: 'epg2xml.json'

      처음 실행하면 설정 파일이 없기에 기본값의 epg2xml.json을 생성하고 종료한다.

    3. 다시 같은 명령어로 실행해보자.

      python -m epg2xml run
      2021/03/04 02:22:37 INFO     PROV     114: [KT   ] 307 service channels successfully fetched from server.
      2021/03/04 02:22:47 INFO     PROV     114: [LG   ] 310 service channels successfully fetched from server.
      2021/03/04 02:22:49 INFO     PROV     114: [SK   ] 265 service channels successfully fetched from server.
      2021/03/04 02:22:58 INFO     PROV     114: [DAUM ] 336 service channels successfully fetched from server.
      2021/03/04 02:23:04 INFO     PROV     114: [NAVER] 470 service channels successfully fetched from server.
      2021/03/04 02:23:06 INFO     PROV     114: [WAVVE] 119 service channels successfully fetched from server.
      2021/03/04 02:23:32 INFO     PROV     114: [TVING] 350 service channels successfully fetched from server.
      2021/03/04 02:23:32 INFO     PROV      48: Channel file was upgraded. You may check the changes here: Channel.json
      2021/03/04 02:23:32 INFO     MAIN      99: Writing xmltv.dtd header ...
      2021/03/04 02:23:32 INFO     MAIN     121: Done.
      2021/02/27 15:03:30 INFO     MAIN      95: Writing xmltv.dtd header ...
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE tv SYSTEM "xmltv.dtd">
      
      <tv generator-info-name="epg2xml v2.0.0">
      </tv>

      Channel.json 파일이 없기 때문에 서버에서 받아와서 저장한 다음 xml 작성을 시작한다. 그런데 사용자 지정 채널이 epg2xml.json에 명시되지 않았기 때문에 빈 껍데기만 출력하고 종료한다.

      아래 설정 파일 작성법을 참고하여 원하는 채널을 포함시켜주고 다시 실행하면 epg를 얻을 수 있다.

    4. epg를 파일로 출력하려면 다음과 같이 --xmlfile 옵션을 지정한다. 그렇지 않으면 언제나 화면 출력이 기본이다.

      python -m epg2xml run --xmlfile=xmltv.xml

    채널 파일(Channel.json)에 대하여

    Channel.json 파일은 서버로부터 서비스 가능한 채널 정보를 받아 저장해두고 사용자가 참고할 수 있도록 하는 캐시이자 레퍼런스 파일이다. 삭제하면 다시 생성하며, 업데이트 된지 오래되어 만료된 채널 목록은 실행할때마다 확인하여 자동 업데이트 된다.

    다시 말해, 이 파일은 사용자가 직접 뭔가를 쓰거나 수정하는 대상이 아닌 읽기 전용이므로 염두에 둔다.

    형식

    기본 골격은 다음과 같다.

    {
      "KT": {
        "UPDATED": "2021-02-27T15:02:38.470691",
        "TOTAL": 307,
        "CHANNELS": [
          { "Name": "NQQ", "No": "0", "ServiceId": "0" },
          ...
        ]
      },
      ...
    }

    다른 제공자와 채널이 있으므로 더 길지만 말줄임표(...)로 생략하였다. 각 제공자마다 언제 업데이트 되었는지 UPDATED와 채널 갯수 TOTAL, 채널 목록 CHANNELS를 가지고 있다.

    채널 목록 CHANNELS 아래 각 채널은 NameNoServiceIdCategoryIcon_url을 가질 수 있는데 제공자마다 다르며 이 값을 사용할지 여부도 프로그램 설정에 따라 다르다.

    다시 말하지만 이 파일은 참고용, 읽기 전용이다. 내용을 편집하거나 삭제하지 않는다.

    설정 파일 작성법

    {
      "GLOBAL": {
        "ENABLED": true,
        "FETCH_LIMIT": 2,
        "ID_FORMAT": "{ServiceId}.{Source.lower()}",
        "ADD_REBROADCAST_TO_TITLE": false,
        "ADD_EPNUM_TO_TITLE": true,
        "ADD_DESCRIPTION": true,
        "ADD_XMLTV_NS": false,
        "GET_MORE_DETAILS": false,
        "ADD_CHANNEL_ICON": true
      },
      "KT": {
        "MY_CHANNELS": []
      },
      "LG": {
        "MY_CHANNELS": []
      },
      "SK": {
        "MY_CHANNELS": []
      },
      "DAUM": {
        "MY_CHANNELS": []
      },
      "NAVER": {
        "MY_CHANNELS": []
      },
      "WAVVE": {
        "MY_CHANNELS": []
      },
      "TVING": {
        "MY_CHANNELS": []
      }
    }

    GLOBAL 설정값이 있고 각 제공자마다 그 항목을 따로 명시하지 않으면 GLOBAL을 따른다.

    • ENABLEDtrue or false 각 제공자를 끄거나 켤 수 있다. 끄면 채널 업데이트도 하지 않는다.
    • FETCH_LIMIT: 가져올 기간. 기본값 2는 오늘, 내일해서 2일을 의미한다. 각 제공자마다 제한값이 존재한다. 따옴표 없는 숫자로 입력한다.
    • ID_FORMAT: 기존의 Id 값은 이제 강제사항이 아니며 사용자가 개별 채널마다 직접 지정하거나 f-string 포맷으로 일괄 적용할 수 있다.
    • GET_MORE_DETAILS: 추가 정보를 가져오는 로직을 실행하느냐 여부이며 현재는 WAVVE만 지원한다.
    • ADD_CHANNEL_ICON: 기본 제공되는 Icon_url을 포함하고 싶지 않다면 false를 입력한다. 기본값 true.
    • 나머지는 기존의 옵션에서 이름만 변경되었다.

    MY_CHANNELS는 채널 파일 Channel.json을 참고하여 작성한다.

    • ServiceId: 필수. 각 제공자 안에서 고유한 값이며, 이 값으로 서버에서 조회가 가능하다.
    • Id: 개별 채널 사용자 값 > ID_FORMAT 형식 > 기본값 순으로 적용되며, 다음은 약간의 예외가 있다.
    • NameNoCategoryIcon_url: 사용자가 지정하지 않으면 채널 파일에 존재하는 값을 적용한다.

    도움말 및 옵션

    usage: epg2xml [-h] [-v] [--config [CONFIG]] [--logfile [LOGFILE]]
                   [--loglevel {DEBUG,INFO,WARNING,ERROR}]
                   [--channelfile [CHANNELFILE]] [--xmlfile [XMLFILE]]
                   [--xmlsock [XMLSOCK]] [--parallel]
                   command
    
    웹 상의 소스를 취합하여 EPG를 만드는 프로그램
    
    positional arguments:
      command               "run": XML 형식으로 출력
                            "update_channels": 채널 정보 업데이트
    
    optional arguments:
      -h, --help            show this help message and exit
      -v, --version         show program's version number and exit
      --config [CONFIG]     config file path (default: epg2xml.json)
      --logfile [LOGFILE]   log file path (default: None)
      --loglevel {DEBUG,INFO,WARNING,ERROR}
                            loglevel (default: INFO)
      --channelfile [CHANNELFILE]
                            channel file path (default: Channel.json)
      --xmlfile [XMLFILE]   write output to file if specified
      --xmlsock [XMLSOCK]   send output to unix socket if specified
      --parallel            run in parallel (experimental)
    
    Online help: <https://github.com/epg2xml/epg2xml>

    지원 소스 및 각각의 특징

    소스요청수소요시간1크기2참고
    KT#channels * #days2.51s28.06 kb가끔 업데이트 지연
    LG#channels * #days2.48s30.11 kb5일치만 제공
    SK#channels * #days2.89s12.61 kb4일치만 제공
    DAUM#channels1.86s85.93 kb최대 7일치를 한 번에
    NAVER#channels * #days2.39s22.95 kb
    WAVVE10.03s26.49 kb옵션으로 추가 정보 가능
    TVING#channels/20 * #days * 24/31.72s104.67 kb

    1 이틀 치를 기준으로, 채널당 평균 소요시간. 네트워크 환경에 따라 다를 수 있음. 

    2 이틀 치를 기준으로, 채널당 평균 xml 파일 크기. 

     https://11q.kr 에 등록된 자료 입니다. ♠ 정보찾아 공유 드리며 출처는 링크 참조 바랍니다♠1.png

    [ 추가 정보 ... 더보기) ]
    뷰PDF 1,2



    office view

    관련자료

    댓글목록

    등록된 댓글이 없습니다.


    새창 작성 수정 목록 링크 Edit G카랜다 HDD HDD HDD 게시물 주소 복사


    ♥간단_메모글♥


    최근글


    새댓글



    PHP 안에 HTML ☞ 홈페이지 화면갱신 시간은 ♨
    ▶ 2024-11-23 11:37:55

    오늘의 홈 현황


    • 현재 접속자♨ 308 명
    • 오늘 가입자※ 0 명
    • 어제 가입자※ 3 명
    • 주간 가입자※ 9 명
    • 오늘 방문자 2,349 명
    • 어제 방문자 3,461 명
    • 최대 방문자 13,042 명
    • 전체 방문자 4,804,966 명
    • 전체 게시물※ 8,856 개
    • 전체 댓글수※ 25,231 개
    • 전체 회원수 11,325 명

    QR코드


    ☞ QR코드 스캔은 kakao앱 자체 QR코드

    알림 0








    최신글↑