質問するログイン新規登録

質問編集履歴

2

コードを掲載したurlを記載

2019/10/06 04:39

投稿

hironante
hironante

スコア8

title CHANGED
File without changes
body CHANGED
@@ -8,4 +8,7 @@
8
8
  よろしくお願い致します。
9
9
  (コードに関しては書籍のため全部掲載することができないため必要と思われるファイルのみ記載しました。)
10
10
 
11
- コードが書ききれないので別urlで用意します。
11
+ コードが書ききれないので別urlで用意します。
12
+
13
+ コードは下記のurlとなります。
14
+ [https://hiroslog.com/page-332](https://hiroslog.com/page-332)

1

文字入力制限があるため別サイトでコードを掲載

2019/10/06 04:39

投稿

hironante
hironante

スコア8

title CHANGED
File without changes
body CHANGED
@@ -8,162 +8,4 @@
8
8
  よろしくお願い致します。
9
9
  (コードに関しては書籍のため全部掲載することができないため必要と思われるファイルのみ記載しました。)
10
10
 
11
- Yahoo ショッピングapi
12
- ```json
13
- {
14
- "ResultSet": {
15
- "0": {
16
- "Result": {
17
- "0": {
18
- "Name": "swift ブレーキパッド ≪type-SP (リアシュー)≫ 【bB [NCP31/NCP35(4WD)] 1500 ’00.1〜04.10】",
19
- "Description": "swift スウィフト スイフト ブレーキ ブレーキシュー シュー リヤシュー スーパースポーツ typeSP",
20
- "Headline": "スウィフトSuperSports リア用 左右セット",
21
- "Url": "https://store.shopping.yahoo.co.jp/auto-craft/swift-sp-r00059.html",
22
- "ReleaseDate": "",
23
- "Availability": "instock",
24
- "Code": "auto-craft_swift-sp-r00059",
25
- "Condition": "new",
26
- "Image": {
27
- "Id": "",
28
- "Small": "https://s.yimg.jp/images/sh/noimage/76x76.gif",
29
- "Medium": "https://s.yimg.jp/images/sh/noimage/146x146.gif"
30
- },
31
- "Review": {
32
- "Rate": "0.00",
33
- "Count": "0",
34
- "Url": "https://shopping.yahoo.co.jp/review/item/list?store_id=auto-craft&page_key=swift-sp-r00059"
35
- },
36
- "Affiliate": {
37
- "Rate": "1.0"
38
- },
39
- "Price": {
40
- "_attributes": {
41
- "currency": "JPY"
42
- },
43
- "_value": "11880"
44
- },
45
- "PremiumPrice": "",
46
-
47
- },
48
-
49
-
50
-
51
- (省略)
52
-
53
-
54
-
55
- "19": {
56
- (省略)
57
-
58
- },
59
- "Request": {
60
- "Query": "swift"
61
- },
62
- "Modules": "",
63
- "_container": "Hit"
64
- }
65
- },
66
- "totalResultsAvailable": "252014",
67
- "totalResultsReturned": 20,
68
- "firstResultPosition": "4"
69
- }
70
- }
71
- ```
72
-
73
- ItemSearchResultSet.swift
74
- ```swift
75
- import Foundation
76
-
77
- // 検索結果全体を格納するクラス
78
- class ItemSearchResultSet: Codable {
79
- var resultSet: ResultSet
80
- private enum CodingKeys: String, CodingKey {
81
- case resultSet = "ResultSet"
82
- }
83
- }
84
- // 検索結果セット格納クラス
85
- class ResultSet: Codable {
86
- var firstObject: FirstObject
87
-
88
- private enum CodingKeys: String, CodingKey {
89
- case firstObject = "0"
90
- }
91
- }
92
- // 検索結果の先頭を格納するクラス
93
- class FirstObject: Codable {
94
- var result: Result
95
- var totalResultsAvailable: String = "" // 自分で追加したコード
96
- private enum CodingKeys: String, CodingKey {
97
- case result = "Result"
98
- }
99
- }
100
-
101
-
102
- // 検索結果格納クラス
103
- class Result: Codable {
104
- var items: [ItemData] = [ItemData]()
105
- required init(from decoder: Decoder) throws {
106
- // デコードのためのコンテナを取得
107
- let container = try decoder.container(keyedBy: CodingKeys.self)
108
- // コンテナ内のキーを取得。キーが文字列であるため、数値の昇順でソートも行う
109
- let keys = container.allKeys.sorted {
110
- Int($0.rawValue)! < Int($1.rawValue)!
111
- }
112
- // キーを使用して検索結果を一件ずつ取り出す
113
- for key in keys {
114
- // 検索結果一件に対するデコード処理
115
- let item = try container.decode(ItemData.self, forKey: key)
116
- // デコード処理できたら検索結果の一覧に追加
117
- items.append(item)
118
- }
119
-
120
- }
121
- // エンコード処理
122
- func encode(to encoder: Encoder) throws {
123
- // レスポンスを解析するだけなので、実装不要
124
- }
125
- // Resultクラスが持つ値を取得するためのキー
126
- private enum CodingKeys: String, CodingKey {
127
- case hit0 = "0"
128
- case hit1 = "1"
129
- (省略)
130
- case hit20 = "20"
131
- }
132
- }
133
-
134
- // 商品情報格納クラス
135
- class ItemData: Codable {
136
- // 商品名
137
- var name: String = ""
138
- // 商品URL
139
- var url: String = ""
140
- // 商品画像情報
141
- class ImageInfo: Codable {
142
- // Imageクラスが持つ値を取得するためのキー
143
- private enum CodingKeys: String, CodingKey {
144
- case medium = "Medium"
145
- }
146
- // 商品画像URL
147
- var medium: String?
148
- }
149
- // 商品画像URL
150
- var imageInfo: ImageInfo = ImageInfo()
151
- // 価格情報
152
- class PriceInfo: Codable {
153
- // Priceクラスが持つ値を取得するためのキー
154
- private enum CodingKeys: String, CodingKey {
155
- case price = "_value"
156
- }
157
- // 価格
158
- var price: String?
159
- }
160
- // 価格
161
- var priceInfo: PriceInfo = PriceInfo()
162
- private enum CodingKeys: String, CodingKey {
163
- case name = "Name"
164
- case url = "Url"
11
+ コードが書ききれないので別urlで用意します。
165
- case imageInfo = "Image"
166
- case priceInfo = "Price"
167
- }
168
- }
169
- ```