Kodiのscraper addonは xmlで記述する。
http://kodi.wiki/view/Scrapers
に説明がある。
というように進んでいく。
バッファは$$1~$$20
の20個。このうち`$$1はKodiのメニューで選択したファイル名など、
入力に使われ、それ以外は変数として利用できる。
<?xml version="1.0" encoding=utf-8?>
<scraper framework="1.1" date="2016.2.29" name="yahoomovie" content="movies" language="en">
ローカルにnfoファイルがあればそこから情報を取る。
<NfoUrl dest="3">
<RegExp input="$$1" output="\1" dest="3">
<expression></expression>
</RegExp>
</NfoUrl>
選択したファイル名が$$1に入っている。 <expression></expression>ということは常にoutputで指定した結果が
$$3に出力される。
outputの指定時にはマークアップ関連文字は
< = <
> = >
" = "
というように記載する必要がある。
http://movies.yahoo.co.jp/search/?query=
に\1として検索文字列を与え検索を実行した結果を`$$3に出力。
<CreateSearchUrl clearbuffers="no" dest="3">
<RegExp input="$$1" output="<url>http://movies.yahoo.co.jp/search/?query=\1</url>" dest="3">
<expression></expression>
</RegExp>
</CreateSearchUrl>
検索した結果を受け取り、一覧を表示する。
ここでは検索結果で表示された映画の一覧をrepeat="yes"で繰り返し検索し、当てはまる行をすべて処理する。
( )でかこまれた一致部分は\1,\2となる。
ここでは作品トップのURLが$$1、解説・あらすじのURLが
$$2、キャストURLが$$3、画像URLが
$$4に入る。
<GetSearchResults clearbuffers="no" dest="8">
<RegExp input="$$6" output="<?xml version="1.02" encoding="UTF-8" standalone="yes"?><results>\1</results>" dest="8">
<RegExp input="$$1" output="<entity><title>\4</title><url>http://movies.yahoo.co.jp/movie/\2/\1/</url><url>http://movies.yahoo.co.jp/movie/\2/\1/story/</url><url>http://movies.yahoo.co.jp/movie/\2/\1/credit/</url><url>http://movies.yahoo.co.jp/movie/\2/\1/photo/</url></entity>" dest="6">
<expression repeat="yes" noclean="1"><li class="col" data-cinema-id="(.*?)">.*?<a href="/movie/(.*?)/([0-9]*?)/".*?title="(.*?)"</expression>
</RegExp>
<expression noclean="1"></expression>
</RegExp>
</GetSearchResults>
最後に、各情報を抽出していく。
Kodi 16.0になってから漢字など非アスキーでの正規表現検索が効かなくなっているため、苦労することになった。
<GetDetails dest="4">
<RegExp input="$$8" output="<details>\1</details>" dest="4">
<RegExp input="$$1" output="<title>\1</title>" dest="8">
<expression noclean="1"><title>(.*?) (.*)</title></expression>
</RegExp>
<RegExp input="$$1" output="<year>\1</year>" dest="8+">
<expression>"prdtyear":"(.*?)"</expression>
</RegExp>
<RegExp input="$$1" output="<runtime>\1</runtime>" dest="8+">
<expression>runtime":"(.*?)"</expression>
</RegExp>
<RegExp input="$$2" output="<director>\1</director>" dest="8+">
<expression><dt>.*</dt><dd><a href=".*">(.*?)</a></dd></expression>
</RegExp>
<RegExp input="$$1" output="<thumb>\1</thumb>" dest="8+">
<expression>"background-image:url\((.*?)\)"></p></expression>
</RegExp>
<RegExp input="$$7" output="<actor><name>\3</name><thumb>\1</thumb></actor>" dest="8+">
<RegExp input="$$3" output="\1" dest="7">
<expression noclean="1"><div id="cstl">(.*?)<div id="stfl"></expression>
</RegExp>
<expression repeat="yes" noclean="1"><div class="thumbnail__figure" style="background-image:url\((http://iwiz-movies.c.yimg.jp/c/movies/pict/w/p/.{2}/.{2}/(w[0-9]+-view|[0-9]+)\.jpg)\)">\s*</div>\s*</div>\s*</div>\s*<div class="box__cell pl1em">\s*<h3 class="text-middle text-break color-sub">(.*?)</h3></expression>
</RegExp>
<RegExp input="$$4" output="<fanart><thumb>\1</thumb></fanart>" dest="8+">
<expression><img src="(http://iwiz-movies.c.yimg.jp/c/movies/pict/.*?\.jpg)" alt=""></expression>
</RegExp>
<RegExp input="$$1" output="<genre>\1</genre>" dest="8+">
<expression repeat="yes">/movie/\?genre.*?">(.*?)</a></expression>
</RegExp>
<RegExp input="$$2" output="<plot>\1</plot>" dest="8+">
<expression trim="yes"><p class="text-readable">(.*?)<p class</expression>
</RegExp>
<expression noclean="1"/>
</RegExp>
</GetDetails>
</scraper>