楽天API　C#　商品検索の一覧取得する(２)

前回
[楽天API　C#　商品検索の一覧取得する(１)](https://qiita.com/Matter/items/68ae1dd7d49c2061606b "Qiita Home")
##楽天APIのつづき##
前回記事で楽天APIを使って検索結果の一覧をXML形式で取得したのは良いが、XML形式の扱いが初めてなのでいろいろと探した結果Xml.Linqというのが、どうやら使い勝手が良さそうだと分かりご紹介します。

単純にString型のデータをXML形式でパース（分解）してくれる便利なメソッドがあったのでそれを使います。XDocumentにしてしまえば、あとはSeleniumやAngleSharpと構文は変わらないので適当に処理を書いてしまえば必要な箇所だけ自由に切り抜きできます。

＜mediumImageUrls＞
<dd> ＜imageUrl＞http---------------＜/imageUrl＞</dd>
<dd> ＜imageUrl＞http---------------＜/imageUrl＞</dd>
<dd>  ＜imageUrl＞http---------------＜/imageUrl＞</dd>
＜/mediumImageUrls＞
＜pointRate＞1＜/pointRate＞
＜shopOfTheYearFlag＞0＜/shopOfTheYearFlag＞
＜affiliateRate＞3＜/affiliateRate＞
<br><br>

**入れ子構造の処理**
上のようにmediumImageUrlsタグは下にimageUrlタグを複数持っています。しかもこれは商品によっては必ず３つあるとは限らない可変の入れ子構造になっています。この点はforeachによって柔軟に取り出します。

**Element(名前)**
今回のXMLの大外のタグは"root"でしたのでXDocumentの先頭はこれを探します。
XElement ROOT = xdoc.Element("root");

Elementの引数がstringなので大文字小文字区別して完全に一致しないと検出できないのが
難点です。まぁ一度作ってしまえば問題ないので最初だけですが。


##XMLの構造解析##
```Getxml.cs


using System.Xml.Linq;


string HTMLtext;//前回記事のcs参照

            //XML解析
            XDocument xdoc = XDocument.Parse(HTMLtext);
            XElement ROOT = xdoc.Element("root");
            XElement ITEMS = ROOT.Element("Items");
            IEnumerable<XElement> ITEM = ITEMS.Elements("Item");
            foreach (XElement e in ITEM)
            {
　　　　　　　　　//出力パラメータ

　　　　　　　　　//単数（item以下に入れ子構造なし）
                var item_name = e.Element("itemName");
                var item_price = e.Element("itemPrice");
                
                Console.WriteLine(item_name.Value);
                Console.WriteLine(item_price.Value);

　　　　　　　　　//複数（item以下に入れ子構造あり）
                foreach (var u in e.Element("mediumImageUrls").Elements("imageUrl"))
                    Console.WriteLine(u.Value);
                    
                //空白行
                Console.WriteLine();
            }


```

検索結果は膨大なデータ量なので分かりにくいですが**＜Item＞商品情報＜/Item＞**の間が1つの商品に対応しています。サムネの画像ＵＲＬなどもあるのでかなり項目も多いですが人によってほしいデータも違うと思うので最大公約数的にこんなことになっているのでしょう。下のXMLデータは３件分のデータです。

##楽天APIで取得したXMLデータ（元データ）##
```RakutenApi.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <Items>
    <Item>
      <mediumImageUrls>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076566652.jpg?_ex=128x128</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076592882.jpg?_ex=128x128</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076566746.jpg?_ex=128x128</imageUrl>
      </mediumImageUrls>
      <pointRate>1</pointRate>
      <shopOfTheYearFlag>0</shopOfTheYearFlag>
      <affiliateRate>3</affiliateRate>
      <shipOverseasFlag>0</shipOverseasFlag>
      <asurakuFlag>0</asurakuFlag>
      <endTime></endTime>
      <taxFlag>0</taxFlag>
      <startTime></startTime>
      <itemCaption>龍球7個セット!! まるで本物のようなズッシリした重量感!部屋に飾ってもかっこいい! 忘年会や結婚式でゲーム、パーティーでも使い道はありそうですね! 一星球 【イーシンチウ】 二星球 【アルシンウ】 三星球 【サンシンチウ】 四星球 【 スーシンチュウ】 五星球 【ウーシンチウ】 六星球 【リュウシンチウ】 七星球 【チーシンチュウ】 ◆素材：pvc ◆セット内容：7点、 ◆本体サイズ :約7cm(※±誤差0.3-0.5cm） ◆重量(7個セット）：2Kg</itemCaption>
      <catchcopy>龍球7個セット!!BIGなケース入り</catchcopy>
      <tagIds>
        <value>1010450</value>
        <value>1041708</value>
      </tagIds>
      <smallImageUrls>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076566652.jpg?_ex=64x64</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076592882.jpg?_ex=64x64</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076566746.jpg?_ex=64x64</imageUrl>
      </smallImageUrls>
      <asurakuClosingTime></asurakuClosingTime>
      <imageFlag>1</imageFlag>
      <availability>1</availability>
      <shopAffiliateUrl></shopAffiliateUrl>
      <itemCode>rapites:10001431</itemCode>
      <postageFlag>0</postageFlag>
      <itemName>送料無料【実物大　超リアル　龍球　7点　セット　コスチューム用小物　7cm 】キャラクター　グッズ　7個セット　忘年会　孫悟空　7個　ボール　置物　コスプレ　龍珠　7個　玉　球　四星球　神龍　ハロウィン　ボールセット　ドラゴン　ボール　DORAGON BALL　宝物探し</itemName>
      <itemPrice>8980</itemPrice>
      <pointRateEndTime></pointRateEndTime>
      <shopCode>rapites</shopCode>
      <affiliateUrl></affiliateUrl>
      <giftFlag>0</giftFlag>
      <shopName>PIRATES SHOP 楽天市場店</shopName>
      <reviewCount>11</reviewCount>
      <asurakuArea></asurakuArea>
      <shopUrl>https://www.rakuten.co.jp/rapites/</shopUrl>
      <creditCardFlag>1</creditCardFlag>
      <reviewAverage>4.82</reviewAverage>
      <shipOverseasArea></shipOverseasArea>
      <genreId>112938</genreId>
      <pointRateStartTime></pointRateStartTime>
      <itemUrl>https://item.rakuten.co.jp/rapites/p-01301/</itemUrl>
    </Item>
    <Item>
      <mediumImageUrls>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/mangazenkan/cabinet/syncip_0020/to-133_01.jpg?_ex=128x128</imageUrl>
      </mediumImageUrls>
      <pointRate>1</pointRate>
      <shopOfTheYearFlag>0</shopOfTheYearFlag>
      <affiliateRate>3</affiliateRate>
      <shipOverseasFlag>1</shipOverseasFlag>
      <asurakuFlag>1</asurakuFlag>
      <endTime></endTime>
      <taxFlag>0</taxFlag>
      <startTime></startTime>
      <itemCaption>作者 : 鳥山明 出版社 : 集英社 版型 : 新書版 推定完読時間 : 14時間48分 （漫画全巻ドットコム調べ）あら すじ : 七つ集めれば、どんな願いでも一つだけ叶えてくれる「神龍(シェンロン)」を呼び出すことができる、ドラゴンボール。それ に関わる様々な冒険物語で、人里はなれた山奥に住む尻尾の生えた少年・孫悟空がドラゴンボールを求めて西の都から来た少女・ブルマと出会うところから物語は始まる! ■完全版はこちら ドラゴンボール［完全版］ 一緒に買いたい : ドラゴンボール超 ドラゴンボールSD 復刻版ドラゴンボールGTパーフェクトファイル ドラゴンボール超全集 STORY＆WORLD GUIDE 銀河パトロール ジャコ ネコマジン [完全版]ドラゴンボール 全巻セットなら、漫画、コミック専門書店の漫画全巻ドットコム</itemCaption>
      <catchcopy></catchcopy>
      <tagIds />
      <smallImageUrls>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/mangazenkan/cabinet/syncip_0020/to-133_01.jpg?_ex=64x64</imageUrl>
      </smallImageUrls>
      <asurakuClosingTime>12:00</asurakuClosingTime>
      <imageFlag>1</imageFlag>
      <availability>1</availability>
      <shopAffiliateUrl></shopAffiliateUrl>
      <itemCode>mangazenkan:10000976</itemCode>
      <postageFlag>0</postageFlag>
      <itemName>【新品/あす楽】ドラゴンボール[新書版/新装版](1-42巻 全巻) 全巻セット</itemName>
      <itemPrice>20328</itemPrice>
      <pointRateEndTime></pointRateEndTime>
      <shopCode>mangazenkan</shopCode>
      <affiliateUrl></affiliateUrl>
      <giftFlag>0</giftFlag>
      <shopName>漫画全巻ドットコム 楽天市場店</shopName>
      <reviewCount>44</reviewCount>
      <asurakuArea>群馬県/埼玉県/千葉県/東京都/神奈川県/富山県/石川県/福井県/山梨県/静岡県/滋賀県/大阪府/兵庫県/奈良県/ 和歌山県/宮城県/山形県/福島県/茨城県/栃木県</asurakuArea>
      <shopUrl>https://www.rakuten.co.jp/mangazenkan/</shopUrl>
      <creditCardFlag>1</creditCardFlag>
      <reviewAverage>4.68</reviewAverage>
      <shipOverseasArea>オーストリア/オーストラリア/ベルギー/スイス/中国/ドイツ/デンマーク/スペイン/フランス/英国/ギリシャ/香港/インドネシア/インド/イタリア/韓国/モロッコ/マレーシア/オランダ/ニュージーランド/フィリピン/ポーランド/ポルトガル/ロシア/スウェーデン/シンガポール/タイ/トルコ/台湾/ベトナム</shipOverseasArea>
      <genreId>201998</genreId>
      <pointRateStartTime></pointRateStartTime>
      <itemUrl>https://item.rakuten.co.jp/mangazenkan/10000976/</itemUrl>
    </Item>
    <Item>
      <mediumImageUrls>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_1.jpg?_ex=128x128</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_2.jpg?_ex=128x128</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_3.jpg?_ex=128x128</imageUrl>
      </mediumImageUrls>
      <pointRate>1</pointRate>
      <shopOfTheYearFlag>0</shopOfTheYearFlag>
      <affiliateRate>4</affiliateRate>
      <shipOverseasFlag>0</shipOverseasFlag>
      <asurakuFlag>0</asurakuFlag>
      <endTime>2021-06-11 01:59</endTime>
      <taxFlag>0</taxFlag>
      <startTime>2021-06-04 20:00</startTime>
      <itemCaption>■メール便発送対応■コスパモデル！ 何枚あっても！半袖Tシャツ！ 綿100％の天竺素材！ 夏には大活躍！夏以外はインナーにも♪ ヘビロテ間違いナシ！！ ※メール便発送の為、ラッピングは、ラッピング袋の同梱となります。 ☆　素材　☆ 本体：綿100％ ゴム編み部分：綿95％　ポリウレタン5％ ☆　サイズ　☆ 130cm 身長125cm?135cm 140cm 身長135cm?145cm 150cm 身 長145cm?155cm 160cm 身長155cm?165cm ※店頭でも販売している為、稀に在庫が確保できない場合もございます。予めご了承ください。 ※画面環境によっては、画像の色味に多少の差異が生じます。予めご了承ください。 ※沖縄県（本島を除く）・各県の船便地域への宅配便発送は大型便送料となります。</itemCaption>
      <catchcopy>男の子 キッズ 130cm 140cm 150cm 160cm 春物 夏物</catchcopy>
      <tagIds>
        <value>1000331</value>
        <value>1000332</value>
        <value>1000333</value>
        <value>1000859</value>
        <value>1000873</value>
        <value>1000877</value>
        <value>1000881</value>
        <value>1000885</value>
        <value>1000886</value>
        <value>1000902</value>
        <value>1001077</value>
        <value>1002298</value>
        <value>1003434</value>
        <value>1004015</value>
        <value>1005802</value>
        <value>1007663</value>
        <value>1008853</value>
        <value>1009107</value>
        <value>1013424</value>
      </tagIds>
      <smallImageUrls>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_1.jpg?_ex=64x64</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_2.jpg?_ex=64x64</imageUrl>
        <imageUrl>https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_3.jpg?_ex=64x64</imageUrl>
      </smallImageUrls>
      <asurakuClosingTime></asurakuClosingTime>
      <imageFlag>1</imageFlag>
      <availability>1</availability>
      <shopAffiliateUrl></shopAffiliateUrl>
      <itemCode>one-clothing:10018065</itemCode>
      <postageFlag>0</postageFlag>
      <itemName>ドラゴンボール超 スーパー Tシャツ 半袖 孫悟空 ベジータ スーパーサイヤ人 fo-ht03【スーパーセール】</itemName>
      <itemPrice>750</itemPrice>
      <pointRateEndTime></pointRateEndTime>
      <shopCode>one-clothing</shopCode>
      <affiliateUrl></affiliateUrl>
      <giftFlag>0</giftFlag>
      <shopName>one clothing</shopName>
      <reviewCount>4</reviewCount>
      <asurakuArea></asurakuArea>
      <shopUrl>https://www.rakuten.co.jp/one-clothing/</shopUrl>
      <creditCardFlag>1</creditCardFlag>
      <reviewAverage>4.75</reviewAverage>
      <shipOverseasArea>ワールドワイド</shipOverseasArea>
      <genreId>566092</genreId>
      <pointRateStartTime></pointRateStartTime>
      <itemUrl>https://item.rakuten.co.jp/one-clothing/fo-ht03/</itemUrl>
    </Item>

<!------------途中省略----------------->


  <pageCount>100</pageCount>
  <TagInformation />
  <hits>30</hits>
  <last>30</last>
  <count>72287</count>
  <page>1</page>
  <carrier>0</carrier>
  <GenreInformation />
  <first>1</first>
</root>

```



## ソースコードで整形したテキスト##
商品名
価格
画像ＵＲＬ（１）
画像ＵＲＬ（２）※
画像ＵＲＬ（３）※
（空行）

```getinfo.txt
送料無料【実物大　超リアル　龍球　7点　セット　コスチューム用小物　7cm 】キャラクター　グッズ　7個セット　忘年会　孫悟空　7個　ボール　置物　コスプレ　龍珠　7個　玉　球　四星球　神龍　ハロウィン　ボールセット　ドラゴン　ボール　DORAGON BALL　宝物探し
8980
https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076566652.jpg?_ex=128x128
https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076592882.jpg?_ex=128x128
https://thumbnail.image.rakuten.co.jp/@0_mall/rapites/cabinet/imgrc0076566746.jpg?_ex=128x128

【新品/あす楽】ドラゴンボール[新書版/新装版](1-42巻 全巻) 全巻セット
20328
https://thumbnail.image.rakuten.co.jp/@0_mall/mangazenkan/cabinet/syncip_0020/to-133_01.jpg?_ex=128x128

ドラゴンボール超 スーパー Tシャツ 半袖 孫悟空 ベジータ スーパーサイヤ人 fo-ht03【スーパーセール】
750
https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_1.jpg?_ex=128x128
https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_2.jpg?_ex=128x128
https://thumbnail.image.rakuten.co.jp/@0_mall/one-clothing/cabinet/image14/fo-ht03_3.jpg?_ex=128x128



///途中まで。


```

※は商品によっては画像は2枚目以降が無い場合があるので可変です。

##終わりに##
今回楽天ＡＰＩを使ってデータの抜き取りにチャレンジしてみましたがHttpClientでドはまりした分を取り返すべくスムーズに開発ができました。ソフトを作っていくうちに、「これはお金がもらえる技術なのでは？」と思い始めたのですが誰か金払っても良いよ！って奇特な方いましたらご連絡くださいw
<br>
データ量が多すぎて抜粋しかできませんでしたが一瞬で１００ページのデータが入手できるので工夫次第では非常に有益な情報を仕入れれると思います。
<br>


次回
[AmazonAPIで商品検索](https://qiita.com/Matter/items/06fec99b79211f9d285a "Qiita Home")