xbmc9 XBMC 스크래퍼 만들기 처음시작하기스크래퍼를 만드는데에는 XML과 Regular Expression에 익숙해야 합니다.아마 perl/python같은 스크립트 언어나 적어도 vi 를 쓰시는 분들은 시작하는데 큰 어려움은 없을 겁니다.스크래퍼의 XML 구조는 XBMC Wiki 에 설명되어 있습니다. 그런데 오래 되기도 했고, 너무 간략한 설명이 되나서 이것만 보고는 절대 시작할 수 없습니다.차라리 HOW-TO write Media Info Scrapers 문서가 예를 들어서 설명하기 때문에 꼭 읽어야할 문서입니다. 사실 그래도 막상 만들려면 엄청 귀찮습니다. 특히 " 등과 같은 특수문자들이 난무하면 암만 regular expression에 자신있어도 눈이 빠집니다.그럴때를 위해서 ScraperXML Editor 가 있습니다.아.. 2015. 4. 2. XBMC 플러그인 만들기 - 8강: 메뉴 추가 플러그인에서도 context menu(키보드 C)가 동작하며 사용자가 추가할 수도 있다.예를 들어 다운로드 명령을 추가하여 재생가능 비디오를 저장도 할 수 있게 할 수 있다.# -*- coding: utf-8 -*- from xbmcswift2 import Plugin plugin = Plugin() @plugin.route('/') def main_menu(): vid_url = 'http://goo.gl/Za1tw' items = [ {'label':'Hello World', 'path':vid_url, 'thumbnail':'http://goo.gl/zRbCi', 'is_playable':True, 'context_menu': [ ('Download', actions.background(plugin.. 2015. 4. 2. XBMC 플러그인 만들기 - 7강: 언어와 설정 불러오기 2강때 language/ 폴더와 settings.xml에 대해서 설명을 했었다. 1. 언어resources/languages/ 폴더 아래 각 언어 디렉토리를 만들고 아래와 같은 strings.xml 을 만든다. 예로 영어라면 English/ 라는 이름으로, 한국어라면 Korean/ 이라는 이름의 폴더를 만든다. 사용자 이름 다른옵션 사용 ... %s 자막 검색 ... 스트링의 id로 번호를 할당하며 plugin.get_string 함수에 이 id를 넘겨주어 해당 스트링을 가져올 수 있다. msg = plugin.get_string(30100) % fileName plugin.log.info(msg)또한 스트링 id는 뒤에 설명하는 settings.xml 에서도 사용된다. 2. 설정resources/ 디렉.. 2015. 4. 2. XBMC 플러그인 만들기 - 6강: 즉석 비디오 재생 지금까지는 비디오 파일의 주소를 걸어놓고 사용자가 선택을 하면 재생되는 경우였다.그런데 많은 웹사이트들에서 video id에서 실제 주소가 쉽게 변환되는 것이 아니고 한번 이상의 변환이 필요하게 된다. 이럴 때 선택하지 않은 비디오에 대해서도 변환하는 것은 시간낭비가 된다.이럴 때 최종 함수에선 video id를 받아서 곧바로 비디오 재생에 들어가면 유용하다.@plugin.route('/play/') def play_video(video_id): title, video_url = translateVideoId(video_id) plugin.play_video({'label':title, 'path':video_url}) 만약 User-Agent나 Cookie를 지정해야 하면 xbmc에서는 URL에 '|U.. 2015. 4. 2. XBMC 플러그인 만들기 - 5강: 페이지 만들기 한 화면에 표시할게 많으면 다음 페이지로 넘어가 거기에다 표시되게 하고 싶죠.또 이전 페이지로도 돌아가게 하고 싶구요. # -*- coding: utf-8 -*- from xbmcswift2 import Plugin plugin = Plugin() @plugin.route('/') def main_menu(): return [{'label':'Video', 'path':plugin.url_for('video_menu', page='-')}] @plugin.route('/video/') def video_menu(page): page2 = 1 if page == '-' else int(page) result = parse_site() items = result[page-1] if page2 > 1: ite.. 2015. 4. 2. XBMC 플러그인 만들기 - 4강: 트리 만들기 이전장에서 가장 간단한 형태를 봤지만, 실제로 동영상만 있는 경우는 드물겁니다. 즉 그룹으로 묶여 있기를 원하죠.플러스, 모름지기 함수라면 argument를 넘겨받아 다용도로 사용도 되어야죠. # -*- coding: utf-8 -*- from xbmcswift2 import Plugin plugin = Plugin() @plugin.route('/') def main_menu(): items = [ {'label':'Video', 'path':plugin.url_for('video_menu')}, {'label':'Image', 'path':plugin.url_for('image_menu', enable="yes")}, ] return items @plugin.route('/video/') def vi.. 2015. 3. 27. XBMC 플러그인 만들기 - 3강: addon.py 형태 이제 본격적인 프로그래밍에 들어가도록 합시다. 모든 프로그래밍의 1장은 Hello World죠. 그래서 xbmc에서도 Hello World를 만들어봤습니다.# -*- coding: utf-8 -*- from xbmcswift2 import Plugin plugin = Plugin() @plugin.route('/') def main_menu(): items = [ {'label':'Hello World', 'path':'http://goo.gl/Za1tw', 'thumbnail':'http://goo.gl/zRbCi', 'is_playable':True} ] return items if __name__ == "__main__": plugin.run() # vim:sw=4:sts=4:et간단하죠? (이전에.. 2015. 3. 27. XBMC 플러그인 만들기 - 2강: 추가기능의 구조 v10(Dharma)이전에 SVN repo라는 비공식 플러그인 관리툴이 있었습니다. 그러다 Dharma로 가면서 스크래퍼, 플러그인, 스크립트 등의 모든 사용자 확장을 Addon 이라는 이름으로 묶고 이를 Addon manager라는 메뉴에서 통합관리하게 되었죠. 통합관리이다 보니 구조가 원하는 형태로 정형화되어 있습니다. addon.py addon.xml changelog.txt fanart.jpg icon.png LICENSE.txt /resources settings.xml /language/ /English/ /Korean/ /lib/ /media/addon.xml가장 중요한 것은 addon.xml 입니다. 아래는 Daum tvPot의 addon.xml이 되겠습니다. video Daum Strea.. 2015. 3. 27. XBMC 플러그인 만들기 - 1강: 개요 한번 써봐야지 생각만 하다 저질르고 보자라는 생각에 시작합니다.쓰게된 이유는 원래 플러그인이 꽤 너저분해졌는데 xbmcswift2라는 플랫폼이 나오면서 상당히 깔끔하게 정리가 되었습니다. 그래서 그걸 기준으로 정리하고자 합니다. 우선 xbmc이 다른 동영상 재생기와 다른 두가지 점은 스크래퍼와 플러그인입니다. 이제는 둘다 추가기능(addon)이라는 이름으로 묶여있죠.우선 스크래퍼로 웹에서 영화, 드라마, 음악 정보를 가져와 화려하게 보여줍니다.플러그인은 기능적인 면을 보강해줍니다. 예로 유튜브 동영상을 xbmc에서 보게 해주는 것은 플러그인이 담당합니다.그외에 가사나 자막을 찾아서 가져와주거나 날씨를 보여주는 것은 스크립트라고 하는데 플러그인과 구분이 모호합니다. 스크래퍼와 플러그인은 기능상으로도 차이가.. 2015. 3. 27. 이전 1 다음