본문 바로가기
Program/Language

[C#] 쿠팡파트너스 API 사용 예제 search

by 소중하루 2020. 12. 29.
반응형

[C#] 쿠팡파트너스 API 사용 예제 search

 

 

쿠팡파트너스 API 사용 예제로

제품을 검색하는 search 를 하는 예제 입니다.

쿠팡파트너스 API 에 POST 방식으로만 예제가 나와있어서

C# GET 방식으로 호출하는 예제 입니다.

 

쿠팡파트너스 API는 POST 방식과 GET 방식의 두가지가 존재합니다.

쿠팡파트너스에서 검색 키워드로 상품정보를 리스트를 가져오기 위해서는

/products/search 로 호출을 해야 합니다.

 

Parameters 로는 Keyword 는 필수, limit, subId 가 허용됩니다.

Responses 로는 rCode, rMessage, data 의 json 형식으로 받게 됩니다.

 

Get 방식이라 별문제 없이 코딩이 될줄 알았는데

쿠팡 API 호출 인증키 생성에서 애를 좀 먹었습니다.

 

영문검색은 대문자

한국어검색은 UrlEnHttpUtility.UrlEncode 을 해줘야 합니다.

 

C# 쿠팡파트너스 API 로 제품 검색하는 예제 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Net;
using System.Text;
using System.Web;
using System.Windows.Forms;
 
namespace Tool
{
    public class CoupangSearch
    {
        private DataTable getCoupangSearchList1()
        {
            DataTable _dt = new DataTable();
            _dt.Columns.Add("RANK"typeof(string));
            _dt.Columns.Add("IS_ROCKET"typeof(string));
            _dt.Columns.Add("IS_FREE_SHIPPING"typeof(string));
            _dt.Columns.Add("PRODUCT_ID"typeof(string));
            _dt.Columns.Add("IMAGE_URL"typeof(string));
            _dt.Columns.Add("PRODUCT_NAME"typeof(string));
            _dt.Columns.Add("PRODUCT_PRICE"typeof(string));
            _dt.Columns.Add("PRODUCT_URL"typeof(string));
 
 
            string _sAccess_key = "xxxxxxxxxxx";
            string _sSecret_key = "xxxxxxxxxxxxxxx";
 
            string _sKeyword = HttpUtility.UrlEncode("노트북"Encoding.UTF8).ToUpper().Replace("+""%20");
            string _sLimit = "20";  // 기본 20개
            string _sSubID = "xxxxx";  // 채널 아이디
 
            string _sRequestMethod = "GET";
            string _sDomain = "https://api-gateway.coupang.com";
            string _sURL = "/v2/providers/affiliate_open_api/apis/openapi/v1/products/search";
            string _sQuery = string.Format("keyword={0}&limit={1}&subId={2}", _sKeyword, _sLimit, _sSubID);
            string _sAccessTokenURL = _sDomain + _sURL;
 
            // API 호출 인증키
            string _sSignature = HmacGenerator.GenerateHmac(_sRequestMethod, _sURL, _sQuery, _sAccess_key, _sSecret_key);
 
            WebClient webClient;
            webClient = new WebClient();
            webClient.QueryString.Add("keyword", _sKeyword);
            webClient.QueryString.Add("limit", _sLimit);
            webClient.QueryString.Add("subId", _sSubID);
            webClient.Headers.Add("Authorization", _sSignature);
 
 
            Stream _sStream = webClient.OpenRead(_sAccessTokenURL);
            string _sResultJson = new StreamReader(_sStream).ReadToEnd();
 
            CoupangSearchItem _resSearchItem = JsonConvert.DeserializeObject<CoupangSearchItem>(_sResultJson);
 
            if (_resSearchItem.rCode == "0")
            {
                if (_resSearchItem.data.productData.Count > 0)
                {
                    for (int i = 0; i < _resSearchItem.data.productData.Count; i++)
                    {
                        DataRow _dr = _dt.NewRow();
 
                        _dr["RANK"= _resSearchItem.data.productData[i].rank;
                        _dr["IS_ROCKET"= _resSearchItem.data.productData[i].isRocket;
                        _dr["IS_FREE_SHIPPING"= _resSearchItem.data.productData[i].isFreeShipping;
                        _dr["PRODUCT_ID"= _resSearchItem.data.productData[i].productId;
                        _dr["IMAGE_URL"= _resSearchItem.data.productData[i].productImage;
                        _dr["PRODUCT_NAME"= _resSearchItem.data.productData[i].productName;
                        _dr["PRODUCT_PRICE"= _resSearchItem.data.productData[i].productPrice;
                        _dr["PRODUCT_URL"= _resSearchItem.data.productData[i].productUrl;
 
                        _dt.Rows.Add(_dr);
                    }
 
                    _dt.AcceptChanges();
                }
            }
            else
            {
                MessageBox.Show("[" + _resSearchItem.rCode + "]" + _resSearchItem.rMessage);
            }
 
 
 
            return _dt;
        }
    }
 
    public class CoupangSearchItem
    {
        public string rCode { get; set; }
        public string rMessage { get; set; }
        public CoupangProductList data { get; set; }
    }
 
    public class CoupangProductList
    {
        public string landingUrl { get; set; }
 
        public List<CoupangProductData> productData { get; set; }
    }
 
    public class CoupangProductData
    {
        public string keyword { get; set; }
        public string rank { get; set; }
        public string isRocket { get; set; }
        public string isFreeShipping { get; set; }
        public string productId { get; set; }
        public string productImage { get; set; }
        public string productName { get; set; }
        public string productPrice { get; set; }
        public string productUrl { get; set; }
    }
}
 
cs
반응형

댓글