Kodiのaddonを作る（２）

Kodiのscraper addonは xmlで記述する。
http://kodi.wiki/view/Scrapers
に説明がある。
![Scraperinterface.png](https://qiita-image-store.s3.amazonaws.com/0/85156/10cc2b0b-600b-b137-a0db-d6a77b4954e0.png)

というように進んでいく。

バッファは`$$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の指定時にはマークアップ関連文字は
\< = \&lt;
\> = \&gt;
" = \&quot;
というように記載する必要がある。

`http://movies.yahoo.co.jp/search/?query=`に\1として検索文字列を与え検索を実行した結果を`$$3に出力。

```
	<CreateSearchUrl clearbuffers="no" dest="3">
		<RegExp input="$$1" output="&lt;url&gt;http://movies.yahoo.co.jp/search/?query=\1&lt;/url&gt;" 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="&lt;?xml version=&quot;1.02&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;&lt;results&gt;\1&lt;/results&gt;" dest="8">
            <RegExp input="$$1" output="&lt;entity&gt;&lt;title&gt;\4&lt;/title&gt;&lt;url&gt;http://movies.yahoo.co.jp/movie/\2/\1/&lt;/url&gt;&lt;url&gt;http://movies.yahoo.co.jp/movie/\2/\1/story/&lt;/url&gt;&lt;url&gt;http://movies.yahoo.co.jp/movie/\2/\1/credit/&lt;/url&gt;&lt;url&gt;http://movies.yahoo.co.jp/movie/\2/\1/photo/&lt;/url&gt;&lt;/entity&gt;" dest="6">
                <expression repeat="yes" noclean="1">&lt;li class="col" data-cinema-id="(.*?)"&gt;.*?&lt;a href=&quot;/movie/(.*?)/([0-9]*?)/".*?title="(.*?)"</expression>
            </RegExp>
        <expression noclean="1"></expression>
        </RegExp>
   </GetSearchResults>
        
```

最後に、各情報を抽出していく。
Kodi 16.0になってから漢字など非アスキーでの正規表現検索が効かなくなっているため、苦労することになった。

```
	<GetDetails dest="4">
		<RegExp input="$$8" output="&lt;details&gt;\1&lt;/details&gt;" dest="4">
			<RegExp input="$$1" output="&lt;title&gt;\1&lt;/title&gt;" dest="8">
				<expression noclean="1">&lt;title&gt;(.*?) (.*)&lt;/title&gt;</expression>
			</RegExp>
            <RegExp input="$$1" output="&lt;year&gt;\1&lt;/year&gt;" dest="8+">
				<expression>&quot;prdtyear&quot;:&quot;(.*?)&quot;</expression>
            </RegExp>
            <RegExp input="$$1" output="&lt;runtime&gt;\1&lt;/runtime&gt;" dest="8+">
                <expression>runtime&quot;:&quot;(.*?)&quot;</expression>
            </RegExp>
   
            <RegExp input="$$2" output="&lt;director&gt;\1&lt;/director&gt;" dest="8+">
                <expression>&lt;dt&gt;.*&lt;/dt&gt;&lt;dd&gt;&lt;a href=&quot;.*&quot;&gt;(.*?)&lt;/a&gt;&lt;/dd&gt;</expression>
            </RegExp>
            
            <RegExp input="$$1" output="&lt;thumb&gt;\1&lt;/thumb&gt;" dest="8+">
                <expression>&quot;background-image:url\((.*?)\)&quot;&gt;&lt;/p&gt;</expression>
            </RegExp>
 
            <RegExp input="$$7" output="&lt;actor&gt;&lt;name&gt;\3&lt;/name&gt;&lt;thumb&gt;\1&lt;/thumb&gt;&lt;/actor&gt;" dest="8+">
                <RegExp input="$$3" output="\1" dest="7">
                    <expression noclean="1">&lt;div id=&quot;cstl&quot;&gt;(.*?)&lt;div id=&quot;stfl&quot;&gt;</expression>
                </RegExp>
                <expression repeat="yes" noclean="1">&lt;div class=&quot;thumbnail__figure&quot; style=&quot;background-image:url\((http://iwiz-movies.c.yimg.jp/c/movies/pict/w/p/.{2}/.{2}/(w[0-9]+-view|[0-9]+)\.jpg)\)&quot;&gt;\s*&lt;/div&gt;\s*&lt;/div&gt;\s*&lt;/div&gt;\s*&lt;div class=&quot;box__cell pl1em&quot;&gt;\s*&lt;h3 class=&quot;text-middle text-break color-sub&quot;&gt;(.*?)&lt;/h3&gt;</expression>
                
            </RegExp>
 
            
            <RegExp input="$$4" output="&lt;fanart&gt;&lt;thumb&gt;\1&lt;/thumb&gt;&lt;/fanart&gt;" dest="8+">
                <expression>&lt;img src=&quot;(http://iwiz-movies.c.yimg.jp/c/movies/pict/.*?\.jpg)&quot; alt=&quot;&quot;&gt;</expression>
            </RegExp>
  
           
            <RegExp input="$$1" output="&lt;genre&gt;\1&lt;/genre&gt;" dest="8+">
                    <expression repeat="yes">/movie/\?genre.*?"&gt;(.*?)&lt;/a&gt;</expression>
			</RegExp>
         

            
	    <RegExp input="$$2" output="&lt;plot&gt;\1&lt;/plot&gt;" dest="8+">
		    <expression trim="yes">&lt;p class=&quot;text-readable&quot;&gt;(.*?)&lt;p class</expression>
	    </RegExp>
	    <expression noclean="1"/>
	</RegExp>
	</GetDetails>
</scraper>

```