2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-06-06

##はじめに##
スクレイピングする上で重要なAPIの利用の実装例です。PHPのサンプルはそこそこあったがC#で実行するサンプルが無かったので自前で
作ったのでご紹介します。

事前準備
楽天WEBサービスから「アプリID発行」する。
楽天アプリID発行.PNG
とりあえず発行するだけなので入力内容は適当でOKです。(楽天のアカウントさえあれば後からいくつでも発行できます)発行後に**「アプリID/デベロッパーID」**をメモしておいてください。

動作内容
「ドラゴンボール」と検索してヒットするページ情報をXML形式で取得しています。今回はXML形式のまま取得して必要なデータの整形は次回にしたいと思います。

開発環境
Microsoft Visual Studio Community 2019
Version 16.6.0
コンソールアプリ(.NET Framework)

HttpClientを知りたいかたは前回までの記事
HttpClientの使い方

コピペで使うときの注意
コード内のapplicationIdの右側の”0000000000000000000”を先ほど取得したIDに書き換える。
今回は**「楽天市場商品検索API」**の入力パラメーター
で検索しています。

APIの種類によって入出力パラメータが代わります。

##メインスレッド##
内容は100行ほどのコードですので全文載せています。

Sample10.cs
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace RakutenAPI
{
    class Program
    {
        private static HttpClient client;
        static void Main(string[] args)
        {
            //楽天市場商品検索API version:2017-07-06
            string RequestURL = "https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706?";

            //検索ワード
            string seachword = "ドラゴンボール";



            //以下は入力パラメータ version:2017-07-06****************************************************
            //参照URL  https://webservice.rakuten.co.jp/api/ichibaitemsearch/ 
            //検索には必須条件と任意条件があるため必要なパラメータは指定しない場合Default値が参照される。
            //入力値(右側)はすべてダブルクォーテーション"で囲む。
            //入力値(左側)は参照URLから「パラメーター」の項目をそのまま入力。


            var dic = new Dictionary<string, string>();
            dic.Add("applicationId", "0000000000000000000");
            dic.Add("keyword", ToUTF8(seachword));
            dic.Add("format", "xml"); //取得方法 json または xml
            //dic.Add("formatVersion", "2"); //jsonのみ2を使える Default 1
            //dic.Add("hits", "5");  //1ページあたりの取得件数 Default 30
            //dic.Add("page", "1"); //取得ページ数 Default 1


            //入力パラメータここまで************************************************************************
            var mylist = new List<string>();
            foreach(var m in dic)
                mylist.Add(m.Key + "=" + m.Value);

            RequestURL += string.Join("&", mylist);

            //クライアント接続開始
            try{   client = new HttpClient();  }
            catch (Exception ex){  Console.WriteLine("【接続エラー】:" + ex.Message);   }

            string HTMLtext = "";
            try
            { 
                //URLでHTMLを取得する。
                    Task<string> task_get = GetRequest(RequestURL);
                    HTMLtext = task_get.Result;
            }
            catch (Exception ex)
            {
                Console.WriteLine("【応答エラー】:" + ex.Message);
            }

            Console.WriteLine(RequestURL);
            Console.WriteLine(HTMLtext);
            Console.ReadKey();
           
        }

        //keywordだけUTF8のバイト変換が必要
        public static string ToUTF8(string Keyword)
        {
            //String型を16進数バイト型文字列に変換 ”楽天”→”%E6%A5%BD%E5%A4%A9”
            byte[] bytedata = Encoding.UTF8.GetBytes(Keyword);
            Keyword = "%" + BitConverter.ToString(bytedata).Replace("-", "%");
            return Keyword;
        }


        //URLからHTMLをゲット
        async static Task<string> GetRequest(string url)
        {
            HttpResponseMessage response = await client.GetAsync(url);
            string contentstr = response.StatusCode.ToString();
            Console.WriteLine("【GetRequest Response】" + contentstr);

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                contentstr = await response.Content.ReadAsStringAsync();
            }
            else if (response.StatusCode == HttpStatusCode.Redirect)
            {
                //StatusCode リダイレクトのときの処理
                var r = client.GetAsync(url).Result;
                Uri uri = new Uri(new Uri(url), r.Headers.Location);
                contentstr = client.GetAsync(uri).Result.Content.ReadAsStringAsync().Result;
            }

            return contentstr;
        }


    }
}


コンソールアプりが起動して下のような画面が出たら成功です。今回は「ドラゴンボール」で検索してxmlデータで取得しています。jsonでも良かったのですがC#だとここから必要な個所を取り出すのにAngleSharpなりJson変換などのNuGetパッケージが追加で必要になるので今回はここまでとします。

実行結果.PNG

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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?