goofish-api 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- goofish_api/__init__.py +10 -0
- goofish_api/__version__.py +1 -0
- goofish_api/api/__init__.py +12 -0
- goofish_api/api/base.py +12 -0
- goofish_api/api/good.py +605 -0
- goofish_api/api/order.py +100 -0
- goofish_api/api/other.py +11 -0
- goofish_api/api/user.py +11 -0
- goofish_api/utils/__init__.py +0 -0
- goofish_api/utils/api_response.py +10 -0
- goofish_api/utils/base_client.py +93 -0
- goofish_api/utils/constants.py +98 -0
- goofish_api/utils/helpers.py +22 -0
- goofish_api-0.0.1.dist-info/LICENSE +21 -0
- goofish_api-0.0.1.dist-info/METADATA +10 -0
- goofish_api-0.0.1.dist-info/RECORD +18 -0
- goofish_api-0.0.1.dist-info/WHEEL +5 -0
- goofish_api-0.0.1.dist-info/top_level.txt +1 -0
goofish_api/__init__.py
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
from goofish_api import api
|
2
|
+
from goofish_api.utils.base_client import BaseClient
|
3
|
+
|
4
|
+
|
5
|
+
class GoofishClient(BaseClient):
|
6
|
+
|
7
|
+
def __init__(self, app_key, access_token, debug=False):
|
8
|
+
super().__init__(app_key, access_token, debug)
|
9
|
+
self.user = api.User(self)
|
10
|
+
self.good = api.Good(self)
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.0.1"
|
goofish_api/api/base.py
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
from goofish_api.utils.api_response import ApiResponse
|
2
|
+
|
3
|
+
|
4
|
+
class BaseAPI(object):
|
5
|
+
""" Goofish API base class """
|
6
|
+
|
7
|
+
def __init__(self, client=None):
|
8
|
+
self._client = client
|
9
|
+
|
10
|
+
def _request(self, data: dict = None) -> ApiResponse:
|
11
|
+
|
12
|
+
return self._client.request(data=data)
|
goofish_api/api/good.py
ADDED
@@ -0,0 +1,605 @@
|
|
1
|
+
from goofish_api.api.base import BaseAPI
|
2
|
+
from goofish_api.utils.api_response import ApiResponse
|
3
|
+
from goofish_api.utils.constants import ItemBizType, SpBizType, FlashSaleType, ProductStatus, SaleStatus
|
4
|
+
from goofish_api.utils.helpers import action
|
5
|
+
|
6
|
+
|
7
|
+
class Good(BaseAPI):
|
8
|
+
|
9
|
+
@action("/api/open/product/category/list")
|
10
|
+
def get_product_category_list(self, item_biz_type: ItemBizType, sp_biz_type: SpBizType = None,
|
11
|
+
flash_sale_type: FlashSaleType = None, **kwargs) -> ApiResponse:
|
12
|
+
""" 查询商品类目
|
13
|
+
:param item_biz_type: 商品类型(必需)
|
14
|
+
:param sp_biz_type: 行业类型 (可选)
|
15
|
+
:param flash_sale_type: 闲鱼特卖类型 (可选)
|
16
|
+
示例:
|
17
|
+
{
|
18
|
+
"item_biz_type": 2,
|
19
|
+
"sp_biz_type": 2
|
20
|
+
}
|
21
|
+
"""
|
22
|
+
data = {
|
23
|
+
"item_biz_type": item_biz_type,
|
24
|
+
"sp_biz_type": sp_biz_type,
|
25
|
+
"flash_sale_type": flash_sale_type
|
26
|
+
}
|
27
|
+
return self._request(data={**kwargs, **data})
|
28
|
+
|
29
|
+
@action('/api/open/product/pv/list')
|
30
|
+
def get_product_pv_list(self, item_biz_type: ItemBizType, sp_biz_type: SpBizType,
|
31
|
+
channel_cat_id: int, sub_property_id: int = '', **kwargs) -> ApiResponse:
|
32
|
+
""" 查询商品属性
|
33
|
+
:param item_biz_type: 商品类型(必需)
|
34
|
+
:param sp_biz_type: 行业类型(必需)
|
35
|
+
:param channel_cat_id: 渠道类目ID(必需)
|
36
|
+
:param sub_property_id: 属性值ID (可选)
|
37
|
+
示例:
|
38
|
+
{
|
39
|
+
"channel_cat_id":"4d8b31d719602249ac899d2620c5df2b",
|
40
|
+
"sub_property_id": "",
|
41
|
+
"item_biz_type":2,
|
42
|
+
"sp_biz_type":1
|
43
|
+
}
|
44
|
+
"""
|
45
|
+
data = {
|
46
|
+
"item_biz_type": item_biz_type,
|
47
|
+
"sp_biz_type": sp_biz_type,
|
48
|
+
"channel_cat_id": channel_cat_id,
|
49
|
+
"sub_property_id": sub_property_id,
|
50
|
+
}
|
51
|
+
return self._request(data={**kwargs, **data})
|
52
|
+
|
53
|
+
@action('/api/open/product/list')
|
54
|
+
def get_product_list(self, online_time: [], offline_time: [], sold_time: [], update_time: [], create_time: [],
|
55
|
+
product_status: ProductStatus, sale_status: SaleStatus, page_no: int = 1,
|
56
|
+
page_size: int = 50, **kwargs):
|
57
|
+
""" 查询商品列表
|
58
|
+
:param online_time: 商品上架时间 第一个元素值为开始时间戳,第二个元素值为结束时间戳
|
59
|
+
:param offline_time: 商品下架时间
|
60
|
+
:param sold_time: 商品售罄时间
|
61
|
+
:param update_time: 商品更新时间
|
62
|
+
:param create_time: 商品创建时间
|
63
|
+
:param product_status: 商品状态
|
64
|
+
:param sale_status: 商品销售状态
|
65
|
+
:param page_no: 页码 >= 1 <= 100
|
66
|
+
:param page_size: 每页数量 >= 1 <= 100
|
67
|
+
示例:
|
68
|
+
{
|
69
|
+
"online_time": [
|
70
|
+
1690300800,
|
71
|
+
1690366883
|
72
|
+
],
|
73
|
+
"offline_time": [
|
74
|
+
1690300800,
|
75
|
+
1690366883
|
76
|
+
],
|
77
|
+
"sold_time": [
|
78
|
+
1690300800,
|
79
|
+
1690366883
|
80
|
+
],
|
81
|
+
"update_time": [
|
82
|
+
1690300800,
|
83
|
+
1690366883
|
84
|
+
],
|
85
|
+
"create_time": [
|
86
|
+
1690300800,
|
87
|
+
1690366883
|
88
|
+
],
|
89
|
+
"product_status": 21,
|
90
|
+
"page_no": 1,
|
91
|
+
"page_size": 50
|
92
|
+
}
|
93
|
+
"""
|
94
|
+
data = {
|
95
|
+
'online_time': online_time,
|
96
|
+
'offline_time': offline_time,
|
97
|
+
'sold_time': sold_time,
|
98
|
+
'update_time': update_time,
|
99
|
+
'create_time': create_time,
|
100
|
+
'product_status': product_status,
|
101
|
+
'sale_status': sale_status,
|
102
|
+
'page_no': page_no,
|
103
|
+
'page_size': page_size
|
104
|
+
}
|
105
|
+
return self._request(data={**kwargs, **data})
|
106
|
+
|
107
|
+
@action('/api/open/product/detail')
|
108
|
+
def get_product_detail(self, product_id: int, **kwargs) -> ApiResponse:
|
109
|
+
""" 查询商品详情
|
110
|
+
:param product_id: 管家商品ID
|
111
|
+
示例:
|
112
|
+
{
|
113
|
+
"product_id": 1234567890
|
114
|
+
}
|
115
|
+
"""
|
116
|
+
data = {
|
117
|
+
'product_id': product_id
|
118
|
+
}
|
119
|
+
return self._request(data={**kwargs, **data})
|
120
|
+
|
121
|
+
@action('/api/open/product/sku/list')
|
122
|
+
def get_product_sku_list(self, product_id: [], **kwargs) -> ApiResponse:
|
123
|
+
""" 查询商品规格
|
124
|
+
:param product_id: 管家商品ID 最多支持100个
|
125
|
+
示例:
|
126
|
+
{
|
127
|
+
"product_id": [1234567890, 1234567891]
|
128
|
+
}
|
129
|
+
"""
|
130
|
+
data = {
|
131
|
+
'product_id': product_id
|
132
|
+
}
|
133
|
+
return self._request(data={**kwargs, **data})
|
134
|
+
|
135
|
+
@action('/api/open/product/create')
|
136
|
+
def create_product(self, product_data: dict, **kwargs) -> ApiResponse:
|
137
|
+
""" 创建商品(单个)
|
138
|
+
:param product_data: 商品数据
|
139
|
+
示例:
|
140
|
+
{
|
141
|
+
"item_biz_type": 2,
|
142
|
+
"sp_biz_type": 1,
|
143
|
+
"channel_cat_id": "e11455b218c06e7ae10cfa39bf43dc0f",
|
144
|
+
"channel_pv": [
|
145
|
+
{
|
146
|
+
"property_id": "b5e5462c028aba7f1921b9e373cead75",
|
147
|
+
"property_name": "交易形式",
|
148
|
+
"value_id": "8a3445658e0bc44687b43d68bdc44732",
|
149
|
+
"value_name": "代下单"
|
150
|
+
},
|
151
|
+
{
|
152
|
+
"property_id": "96ad8793a2fdb81bb108d382c4e6ea42",
|
153
|
+
"property_name": "面值",
|
154
|
+
"value_id": "38ed5f6522cd7ab6",
|
155
|
+
"value_name": "100元"
|
156
|
+
}
|
157
|
+
],
|
158
|
+
"price": 550000,
|
159
|
+
"original_price": 700000,
|
160
|
+
"express_fee": 10,
|
161
|
+
"stock": 10,
|
162
|
+
"outer_id": "2021110112345",
|
163
|
+
"stuff_status": 100,
|
164
|
+
"publish_shop": [
|
165
|
+
{
|
166
|
+
"images": [
|
167
|
+
"https://xxx.com/xxx1.jpg",
|
168
|
+
"https://xxx.com/xxx2.jpg"
|
169
|
+
],
|
170
|
+
"user_name": "闲鱼会员名",
|
171
|
+
"province": 130000,
|
172
|
+
"city": 130100,
|
173
|
+
"district": 130101,
|
174
|
+
"title": "商品标题",
|
175
|
+
"content": "商品描述。",
|
176
|
+
"service_support": "SDR"
|
177
|
+
}
|
178
|
+
],
|
179
|
+
"sku_items": [
|
180
|
+
{
|
181
|
+
"price": 500000,
|
182
|
+
"stock": 10,
|
183
|
+
"outer_id": "",
|
184
|
+
"sku_text": "颜色:白色;容量:128G"
|
185
|
+
},
|
186
|
+
{
|
187
|
+
"price": 600000,
|
188
|
+
"stock": 10,
|
189
|
+
"outer_id": "",
|
190
|
+
"sku_text": "颜色:白色;容量:256G"
|
191
|
+
},
|
192
|
+
{
|
193
|
+
"price": 500000,
|
194
|
+
"stock": 10,
|
195
|
+
"outer_id": "",
|
196
|
+
"sku_text": "颜色:黑色;容量:128G"
|
197
|
+
},
|
198
|
+
{
|
199
|
+
"price": 600000,
|
200
|
+
"stock": 10,
|
201
|
+
"outer_id": "",
|
202
|
+
"sku_text": "颜色:黑色;容量:256G"
|
203
|
+
}
|
204
|
+
],
|
205
|
+
"book_data": {
|
206
|
+
"title": "北京法源寺",
|
207
|
+
"author": "李敖",
|
208
|
+
"publisher": "中国友谊出版公司",
|
209
|
+
"isbn": "9787505720176"
|
210
|
+
},
|
211
|
+
"food_data": {
|
212
|
+
"pack": "罐装",
|
213
|
+
"spec": "150",
|
214
|
+
"brand": "伏特加伏特加",
|
215
|
+
"expire": {
|
216
|
+
"num": 360,
|
217
|
+
"unit": "天"
|
218
|
+
},
|
219
|
+
"production": {
|
220
|
+
"date": "2021-11-29",
|
221
|
+
"address": {
|
222
|
+
"detail": "北京市东城区x街道",
|
223
|
+
"province": 130000,
|
224
|
+
"city": 130100,
|
225
|
+
"district": 130101
|
226
|
+
}
|
227
|
+
}
|
228
|
+
},
|
229
|
+
"report_data": {
|
230
|
+
"used_car": {
|
231
|
+
"report_url": "https://xxxxxx.com"
|
232
|
+
},
|
233
|
+
"beauty_makeup": {
|
234
|
+
"org_id": 181,
|
235
|
+
"brand": "欧莱雅",
|
236
|
+
"spec": "小瓶装",
|
237
|
+
"level": "全新",
|
238
|
+
"org_name": "哈哈哈",
|
239
|
+
"images": [
|
240
|
+
"https://xxx.com/xxx1.jpg",
|
241
|
+
"https://xxx.com/xxx2.jpg"
|
242
|
+
]
|
243
|
+
},
|
244
|
+
"game": {
|
245
|
+
"qc_no": "123123",
|
246
|
+
"qc_desc": "符合",
|
247
|
+
"title": "测试游戏",
|
248
|
+
"platform": "小霸王",
|
249
|
+
"images": [
|
250
|
+
"https://xxx.com/xxx1.jpg",
|
251
|
+
"https://xxx.com/xxx2.jpg"
|
252
|
+
]
|
253
|
+
},
|
254
|
+
"curio": {
|
255
|
+
"org_id": 191,
|
256
|
+
"org_name": "NGC评级",
|
257
|
+
"size": "12mmx14mm",
|
258
|
+
"material": "陶瓷",
|
259
|
+
"qc_no": "3131319",
|
260
|
+
"images": [
|
261
|
+
"https://xxx.com/xxx1.jpg",
|
262
|
+
"https://xxx.com/xxx2.jpg"
|
263
|
+
]
|
264
|
+
},
|
265
|
+
"jewelry": {
|
266
|
+
"org_name": "某某平台",
|
267
|
+
"shape": "圆形",
|
268
|
+
"color": "白色",
|
269
|
+
"weight": "125g",
|
270
|
+
"qc_no": "3131319",
|
271
|
+
"qc_desc": "无瑕疵",
|
272
|
+
"images": [
|
273
|
+
"https://xxx.com/xxx1.jpg",
|
274
|
+
"https://xxx.com/xxx2.jpg"
|
275
|
+
]
|
276
|
+
},
|
277
|
+
"valuable": {
|
278
|
+
"org_id": 162,
|
279
|
+
"org_name": "国检",
|
280
|
+
"qc_no": "454545",
|
281
|
+
"qc_desc": "经检测符合制造商公示的制作工艺",
|
282
|
+
"images": [
|
283
|
+
"https://xxx.com/xxx1.jpg",
|
284
|
+
"https://xxx.com/xxx2.jpg"
|
285
|
+
]
|
286
|
+
},
|
287
|
+
"yx_3c": {
|
288
|
+
"class_id": 10,
|
289
|
+
"subclass_id": 1001,
|
290
|
+
"brand_id": 10000,
|
291
|
+
"brand_name": "苹果",
|
292
|
+
"model_id": 10011,
|
293
|
+
"model_name": "iPhone 14 Pro",
|
294
|
+
"model_sn": "IMEI/序列号",
|
295
|
+
"report_user": "张胜男",
|
296
|
+
"report_time": "2024-03-15 18:04:44",
|
297
|
+
"report_items": [
|
298
|
+
{
|
299
|
+
"answer_id": 11103,
|
300
|
+
"answer_name": "不开机",
|
301
|
+
"answer_type": 2,
|
302
|
+
"category_name": "拆修侵液",
|
303
|
+
"group_name": "系统情况",
|
304
|
+
"question_name": "系统情况"
|
305
|
+
}
|
306
|
+
],
|
307
|
+
"answer_ids": [
|
308
|
+
11103,
|
309
|
+
11106
|
310
|
+
]
|
311
|
+
}
|
312
|
+
}
|
313
|
+
}
|
314
|
+
"""
|
315
|
+
data = product_data
|
316
|
+
return self._request(data={**kwargs, **data})
|
317
|
+
|
318
|
+
@action('/api/open/product/batchCreate')
|
319
|
+
def product_batch_create(self, product_data: [], **kwargs):
|
320
|
+
""" 批量创建商品
|
321
|
+
1:字段参数要求与单个创建商品一致
|
322
|
+
2:每批次最多创建50个商品
|
323
|
+
3:同批次时item_key字段值要唯一
|
324
|
+
:param product_data: 商品数据列表
|
325
|
+
"""
|
326
|
+
data = product_data
|
327
|
+
return self._request(data={**kwargs, **data})
|
328
|
+
|
329
|
+
@action('/api/open/product/publish')
|
330
|
+
def product_publish(self, product_id: int, user_name: [], specify_publish_time: str, notify_url: str, **kwargs):
|
331
|
+
""" 上架商品 特别提醒:本接口会采用异步的方式更新商品信息到闲鱼App上,因此更新结果采用回调的方式进行通知。
|
332
|
+
:param product_id: 商品数据列表
|
333
|
+
:param user_name: 闲鱼会员名列表,
|
334
|
+
:param specify_publish_time: 指定上架时间,格式为yyyy-MM-dd HH:mm:ss,如果不传则默认立即上架
|
335
|
+
:param notify_url: 商品上架结果回调地址
|
336
|
+
示例:
|
337
|
+
{
|
338
|
+
"product_id": 220656347074629,
|
339
|
+
"user_name": [
|
340
|
+
"tb924343042"
|
341
|
+
]
|
342
|
+
}
|
343
|
+
"""
|
344
|
+
data = {
|
345
|
+
'product_id': product_id,
|
346
|
+
'user_name': user_name,
|
347
|
+
'specify_publish_time': specify_publish_time,
|
348
|
+
'notify_url': notify_url
|
349
|
+
}
|
350
|
+
return self._request(data={**kwargs, **data})
|
351
|
+
|
352
|
+
@action('/api/open/product/downShelf')
|
353
|
+
def product_down_shelf(self, product_id: int, **kwargs):
|
354
|
+
""" 下架商品
|
355
|
+
:param product_id: 商品数据列表
|
356
|
+
示例:
|
357
|
+
{
|
358
|
+
"product_id": 220656347074629,
|
359
|
+
}
|
360
|
+
"""
|
361
|
+
data = {
|
362
|
+
'product_id': product_id,
|
363
|
+
}
|
364
|
+
return self._request(data={**kwargs, **data})
|
365
|
+
|
366
|
+
@action('/api/open/product/edit')
|
367
|
+
def product_edit(self, product_data: dict, **kwargs) -> ApiResponse:
|
368
|
+
""" 编辑商品
|
369
|
+
:param product_data: 商品数据
|
370
|
+
示例:
|
371
|
+
{
|
372
|
+
"product_id": 443299347640581,
|
373
|
+
"item_biz_type": 2,
|
374
|
+
"sp_biz_type": 1,
|
375
|
+
"category_id": 50025386,
|
376
|
+
"channel_cat_id": "e11455b218c06e7ae10cfa39bf43dc0f",
|
377
|
+
"channel_pv": [
|
378
|
+
{
|
379
|
+
"property_id": "b5e5462c028aba7f1921b9e373cead75",
|
380
|
+
"property_name": "交易形式",
|
381
|
+
"value_id": "8a3445658e0bc44687b43d68bdc44732",
|
382
|
+
"value_name": "代下单"
|
383
|
+
},
|
384
|
+
{
|
385
|
+
"property_id": "96ad8793a2fdb81bb108d382c4e6ea42",
|
386
|
+
"property_name": "面值",
|
387
|
+
"value_id": "38ed5f6522cd7ab6",
|
388
|
+
"value_name": "100元"
|
389
|
+
}
|
390
|
+
],
|
391
|
+
"title": "iPhone 12 128G 黑色",
|
392
|
+
"price": 550000,
|
393
|
+
"original_price": 700000,
|
394
|
+
"express_fee": 10,
|
395
|
+
"stock": 10,
|
396
|
+
"outer_id": "2021110112345",
|
397
|
+
"stuff_status": 100,
|
398
|
+
"publish_shop": [
|
399
|
+
{
|
400
|
+
"images": [
|
401
|
+
"https://xxx.com/xxx1.jpg",
|
402
|
+
"https://xxx.com/xxx2.jpg"
|
403
|
+
],
|
404
|
+
"user_name": "闲鱼会员名",
|
405
|
+
"province": 130000,
|
406
|
+
"city": 130100,
|
407
|
+
"district": 130101,
|
408
|
+
"title": "商品标题",
|
409
|
+
"content": "商品描述。",
|
410
|
+
"white_images": "https://xxx.com/xxx1.jpg",
|
411
|
+
"service_support": "SDR"
|
412
|
+
}
|
413
|
+
],
|
414
|
+
"sku_items": [
|
415
|
+
{
|
416
|
+
"price": 500000,
|
417
|
+
"stock": 10,
|
418
|
+
"outer_id": "",
|
419
|
+
"sku_text": "颜色:白色;容量:128G"
|
420
|
+
},
|
421
|
+
{
|
422
|
+
"price": 600000,
|
423
|
+
"stock": 10,
|
424
|
+
"outer_id": "",
|
425
|
+
"sku_text": "颜色:白色;容量:256G"
|
426
|
+
},
|
427
|
+
{
|
428
|
+
"price": 500000,
|
429
|
+
"stock": 10,
|
430
|
+
"outer_id": "",
|
431
|
+
"sku_text": "颜色:黑色;容量:128G"
|
432
|
+
},
|
433
|
+
{
|
434
|
+
"price": 600000,
|
435
|
+
"stock": 10,
|
436
|
+
"outer_id": "",
|
437
|
+
"sku_text": "颜色:黑色;容量:256G"
|
438
|
+
}
|
439
|
+
],
|
440
|
+
"book_data": {
|
441
|
+
"title": "北京法源寺",
|
442
|
+
"author": "李敖",
|
443
|
+
"publisher": "中国友谊出版公司",
|
444
|
+
"isbn": "9787505720176"
|
445
|
+
},
|
446
|
+
"food_data": {
|
447
|
+
"pack": "罐装",
|
448
|
+
"spec": "150",
|
449
|
+
"brand": "伏特加伏特加",
|
450
|
+
"expire": {
|
451
|
+
"num": 360,
|
452
|
+
"unit": "天"
|
453
|
+
},
|
454
|
+
"production": {
|
455
|
+
"date": "2021-11-29",
|
456
|
+
"address": {
|
457
|
+
"detail": "北京市东城区x街道",
|
458
|
+
"province": 130000,
|
459
|
+
"city": 130100,
|
460
|
+
"district": 130101
|
461
|
+
}
|
462
|
+
}
|
463
|
+
},
|
464
|
+
"report_data": {
|
465
|
+
"used_car": {
|
466
|
+
"report_url": "https://xxxxxx.com"
|
467
|
+
},
|
468
|
+
"beauty_makeup": {
|
469
|
+
"org_id": 181,
|
470
|
+
"brand": "欧莱雅",
|
471
|
+
"spec": "小瓶装",
|
472
|
+
"level": "全新",
|
473
|
+
"org_name": "哈哈哈",
|
474
|
+
"qc_result": "通过",
|
475
|
+
"images": [
|
476
|
+
"https://xxx.com/xxx1.jpg",
|
477
|
+
"https://xxx.com/xxx2.jpg"
|
478
|
+
]
|
479
|
+
},
|
480
|
+
"game": {
|
481
|
+
"qc_no": "123123",
|
482
|
+
"qc_result": "符合",
|
483
|
+
"title": "测试游戏",
|
484
|
+
"platform": "小霸王",
|
485
|
+
"images": [
|
486
|
+
"https://xxx.com/xxx1.jpg",
|
487
|
+
"https://xxx.com/xxx2.jpg"
|
488
|
+
]
|
489
|
+
},
|
490
|
+
"curio": {
|
491
|
+
"org_id": 191,
|
492
|
+
"org_name": "NGC评级",
|
493
|
+
"size": "12mmx14mm",
|
494
|
+
"material": "陶瓷",
|
495
|
+
"qc_no": "3131319",
|
496
|
+
"qc_result": "真品",
|
497
|
+
"images": [
|
498
|
+
"https://xxx.com/xxx1.jpg",
|
499
|
+
"https://xxx.com/xxx2.jpg"
|
500
|
+
]
|
501
|
+
},
|
502
|
+
"jewelry": {
|
503
|
+
"org_name": "某某平台",
|
504
|
+
"shape": "圆形",
|
505
|
+
"color": "白色",
|
506
|
+
"weight": "125g",
|
507
|
+
"qc_no": "3131319",
|
508
|
+
"qc_desc": "无瑕疵",
|
509
|
+
"images": [
|
510
|
+
"https://xxx.com/xxx1.jpg",
|
511
|
+
"https://xxx.com/xxx2.jpg"
|
512
|
+
]
|
513
|
+
},
|
514
|
+
"valuable": {
|
515
|
+
"org_id": 162,
|
516
|
+
"org_name": "国检",
|
517
|
+
"qc_no": "454545",
|
518
|
+
"qc_result": "符合",
|
519
|
+
"images": [
|
520
|
+
"https://xxx.com/xxx1.jpg",
|
521
|
+
"https://xxx.com/xxx2.jpg"
|
522
|
+
]
|
523
|
+
},
|
524
|
+
"yx_3c": {
|
525
|
+
"class_id": 10,
|
526
|
+
"subclass_id": 1001,
|
527
|
+
"brand_id": 10000,
|
528
|
+
"brand_name": "苹果",
|
529
|
+
"model_id": 10011,
|
530
|
+
"model_name": "iPhone 14 Pro",
|
531
|
+
"model_sn": "IMEI/序列号",
|
532
|
+
"report_user": "张胜男",
|
533
|
+
"report_time": "2024-03-15 18:04:44",
|
534
|
+
"report_items": [
|
535
|
+
{
|
536
|
+
"answer_id": 11103,
|
537
|
+
"answer_name": "不开机",
|
538
|
+
"answer_type": 2,
|
539
|
+
"category_name": "拆修侵液",
|
540
|
+
"group_name": "系统情况",
|
541
|
+
"question_name": "系统情况"
|
542
|
+
}
|
543
|
+
],
|
544
|
+
"answer_ids": [
|
545
|
+
11103,
|
546
|
+
11106
|
547
|
+
]
|
548
|
+
}
|
549
|
+
}
|
550
|
+
}
|
551
|
+
"""
|
552
|
+
data = {
|
553
|
+
**product_data
|
554
|
+
}
|
555
|
+
return self._request(data={**kwargs, **data})
|
556
|
+
|
557
|
+
@action('/api/open/product/edit/stock')
|
558
|
+
def product_edit_stock(self, product_id: int, price: int, original_price: int,
|
559
|
+
stock: int, sku_items: [], **kwargs) -> ApiResponse:
|
560
|
+
""" 编辑商品库存
|
561
|
+
:param product_id: 商品ID
|
562
|
+
:param price: 商品价格(分)
|
563
|
+
:param original_price: 商品原价(分)
|
564
|
+
:param stock: 单规格库存
|
565
|
+
:param sku_items: 多规格库存
|
566
|
+
示例:
|
567
|
+
{
|
568
|
+
"product_id": 219530767978565,
|
569
|
+
"stock": 99999,
|
570
|
+
"sku_items": [
|
571
|
+
{
|
572
|
+
"stock": 6699,
|
573
|
+
"price":99999,
|
574
|
+
"sku_id": 219530767978561
|
575
|
+
},
|
576
|
+
{
|
577
|
+
"stock": 3982,
|
578
|
+
"price":99999,
|
579
|
+
"sku_id": 219530767978562
|
580
|
+
}
|
581
|
+
]
|
582
|
+
}
|
583
|
+
"""
|
584
|
+
data = {
|
585
|
+
'product_id': product_id,
|
586
|
+
'sku_items': sku_items,
|
587
|
+
'price': price,
|
588
|
+
'original_price': original_price,
|
589
|
+
'stock': stock
|
590
|
+
}
|
591
|
+
return self._request(data={**kwargs, **data})
|
592
|
+
|
593
|
+
@action('/api/open/product/delete')
|
594
|
+
def product_delete(self, product_id: int, **kwargs) -> ApiResponse:
|
595
|
+
""" 删除商品
|
596
|
+
:param product_id: 商品ID
|
597
|
+
示例:
|
598
|
+
{
|
599
|
+
"product_id": 219530767978565
|
600
|
+
}
|
601
|
+
"""
|
602
|
+
data = {
|
603
|
+
'product_id': product_id
|
604
|
+
}
|
605
|
+
return self._request(data={**kwargs, **data})
|
goofish_api/api/order.py
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
from goofish_api.api.base import BaseAPI
|
2
|
+
from goofish_api.utils.api_response import ApiResponse
|
3
|
+
from goofish_api.utils.constants import RefundStatus, OrderStatus
|
4
|
+
from goofish_api.utils.helpers import action
|
5
|
+
|
6
|
+
|
7
|
+
class Order(BaseAPI):
|
8
|
+
|
9
|
+
@action('/api/open/order/list')
|
10
|
+
def get_order_list(self, order_status: OrderStatus, refund_status: RefundStatus, order_time: [], pay_time: [],
|
11
|
+
consign_time: [], confirm_time: [], refund_time: [], update_time: [], page_no: int,
|
12
|
+
page_size: int, **kwargs) -> ApiResponse:
|
13
|
+
""" 获取订单列表
|
14
|
+
:param order_status: 订单状态
|
15
|
+
:param refund_status: 退款状态
|
16
|
+
:param order_time: 订单时间范围
|
17
|
+
:param pay_time: 支付时间范围
|
18
|
+
:param consign_time: 发货时间范围
|
19
|
+
:param confirm_time: 确认收货时间范围
|
20
|
+
:param refund_time: 退款时间范围
|
21
|
+
:param update_time: 更新时间范围
|
22
|
+
:param page_no: 页码
|
23
|
+
:param page_size: 每页大小
|
24
|
+
"""
|
25
|
+
data = {
|
26
|
+
"order_status": order_status,
|
27
|
+
"refund_status": refund_status,
|
28
|
+
"order_time": order_time,
|
29
|
+
"pay_time": pay_time,
|
30
|
+
"consign_time": consign_time,
|
31
|
+
"confirm_time": confirm_time,
|
32
|
+
"refund_time": refund_time,
|
33
|
+
"update_time": update_time,
|
34
|
+
"page_no": page_no,
|
35
|
+
"page_size": page_size
|
36
|
+
}
|
37
|
+
return self._request(data={**kwargs, **data})
|
38
|
+
|
39
|
+
@action('/api/open/order/detail')
|
40
|
+
def get_order_detail(self, order_no: str, **kwargs) -> ApiResponse:
|
41
|
+
""" 获取订单详情
|
42
|
+
:param order_no: 订单号
|
43
|
+
"""
|
44
|
+
data = {
|
45
|
+
"order_no": order_no
|
46
|
+
}
|
47
|
+
return self._request(data={**kwargs, **data})
|
48
|
+
|
49
|
+
@action('/api/open/order/kam/list')
|
50
|
+
def kam_order_list(self, order_no: str, **kwargs) -> ApiResponse:
|
51
|
+
""" 订单卡密列表
|
52
|
+
:param order_no: 闲鱼订单号
|
53
|
+
"""
|
54
|
+
data = {
|
55
|
+
"order_no": order_no,
|
56
|
+
}
|
57
|
+
return self._request(data={**kwargs, **data})
|
58
|
+
|
59
|
+
@action('/api/open/order/ship')
|
60
|
+
def order_ship(self, order_no: str, ship_name, ship_mobile, ship_district_id, ship_prov_name,
|
61
|
+
ship_city_name, ship_area_name, waybill_no, express_name, express_code, **kwargs) -> ApiResponse:
|
62
|
+
""" 订单物流发货
|
63
|
+
:param order_no: 订单号
|
64
|
+
:param ship_name: 收货人姓名
|
65
|
+
:param ship_mobile: 收货人手机号
|
66
|
+
:param ship_district_id: 收货人所在地区ID
|
67
|
+
:param ship_prov_name: 收货人所在省份名称
|
68
|
+
:param ship_city_name: 收货人所在城市名称
|
69
|
+
:param ship_area_name: 收货人所在区县名称
|
70
|
+
:param waybill_no: 运单号
|
71
|
+
:param express_name: 快递公司名称
|
72
|
+
:param express_code: 快递公司编码
|
73
|
+
示例:
|
74
|
+
{
|
75
|
+
"order_no": "1339920336328048683",
|
76
|
+
"ship_name": "张三",
|
77
|
+
"ship_mobile": "13800138000",
|
78
|
+
"ship_district_id": 440305,
|
79
|
+
"ship_prov_name": "广东省",
|
80
|
+
"ship_city_name": "深圳市",
|
81
|
+
"ship_area_name": "南山区",
|
82
|
+
"ship_address": "侨香路西丽街道丰泽园仓储中心",
|
83
|
+
"waybill_no": "25051016899982",
|
84
|
+
"express_name": "其他",
|
85
|
+
"express_code": "qita"
|
86
|
+
}
|
87
|
+
"""
|
88
|
+
data = {
|
89
|
+
"order_no": order_no,
|
90
|
+
"ship_name": ship_name,
|
91
|
+
"ship_mobile": ship_mobile,
|
92
|
+
"ship_district_id": ship_district_id,
|
93
|
+
"ship_prov_name": ship_prov_name,
|
94
|
+
"ship_city_name": ship_city_name,
|
95
|
+
"ship_area_name": ship_area_name,
|
96
|
+
"waybill_no": waybill_no,
|
97
|
+
"express_name": express_name,
|
98
|
+
"express_code": express_code
|
99
|
+
}
|
100
|
+
return self._request(data={**kwargs, **data})
|
goofish_api/api/other.py
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
from goofish_api.api.base import BaseAPI
|
2
|
+
from goofish_api.utils.api_response import ApiResponse
|
3
|
+
from goofish_api.utils.helpers import action
|
4
|
+
|
5
|
+
|
6
|
+
class Other(BaseAPI):
|
7
|
+
|
8
|
+
@action("/api/open/express/companies")
|
9
|
+
def get_express_companies(self, **kwargs) -> ApiResponse:
|
10
|
+
""" 获取快递公司列表 """
|
11
|
+
return self._request(data={**kwargs})
|
goofish_api/api/user.py
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
from goofish_api.api.base import BaseAPI
|
2
|
+
from goofish_api.utils.api_response import ApiResponse
|
3
|
+
from goofish_api.utils.helpers import action
|
4
|
+
|
5
|
+
|
6
|
+
class User(BaseAPI):
|
7
|
+
|
8
|
+
@action("/api/open/user/authorize/list")
|
9
|
+
def get_authorize_list(self, **kwargs) -> ApiResponse:
|
10
|
+
""" 查询闲鱼店铺 """
|
11
|
+
return self._request(data={**kwargs})
|
File without changes
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import hashlib
|
2
|
+
import http.client
|
3
|
+
import json
|
4
|
+
import time
|
5
|
+
|
6
|
+
import logging
|
7
|
+
import requests
|
8
|
+
from requests import request
|
9
|
+
|
10
|
+
from goofish_api.utils.api_response import ApiResponse
|
11
|
+
|
12
|
+
log = logging.getLogger(__name__)
|
13
|
+
|
14
|
+
|
15
|
+
# 应用配置示例,请替换应用配置
|
16
|
+
|
17
|
+
|
18
|
+
class BaseClient(object):
|
19
|
+
method = 'GET'
|
20
|
+
domain = "https://open.goofish.pro" # 正式环境域名
|
21
|
+
|
22
|
+
def __init__(self, app_key, app_secret, seller_id = None, debug = False):
|
23
|
+
self.app_key = app_key
|
24
|
+
self.app_secret = app_secret
|
25
|
+
self.seller_id = seller_id
|
26
|
+
print(app_key, app_secret)
|
27
|
+
self.debug = debug
|
28
|
+
self.headers = {
|
29
|
+
"content-type": "application/json;charset=UTF-8",
|
30
|
+
}
|
31
|
+
|
32
|
+
def get_sign(self, body_json: str, timestamp: int):
|
33
|
+
print(body_json, 'body_json')
|
34
|
+
# 将请求报文进行md5
|
35
|
+
m = hashlib.md5()
|
36
|
+
m.update(body_json.encode("utf8"))
|
37
|
+
body_md5 = m.hexdigest()
|
38
|
+
if self.seller_id:
|
39
|
+
# 商务对接模式
|
40
|
+
s = f"{self.app_key},{body_md5},{timestamp},{self.seller_id},{self.app_secret}"
|
41
|
+
else:
|
42
|
+
# 拼接字符串生成签名-自研模式
|
43
|
+
s = f"{self.app_key},{body_md5},{timestamp},{self.app_secret}"
|
44
|
+
m = hashlib.md5()
|
45
|
+
m.update(s.encode("utf8"))
|
46
|
+
sign = m.hexdigest()
|
47
|
+
return sign
|
48
|
+
|
49
|
+
def get_url(self, path: str):
|
50
|
+
"""
|
51
|
+
获取请求的完整URL
|
52
|
+
:param path: 请求路径
|
53
|
+
:return: 完整的URL
|
54
|
+
"""
|
55
|
+
return f"{self.domain}{path}"
|
56
|
+
|
57
|
+
def remove_null_values(self, data):
|
58
|
+
"""移除字典中值为 None 的键值对"""
|
59
|
+
if isinstance(data, dict):
|
60
|
+
return {k: self.remove_null_values(v) for k, v in data.items() if v is not None}
|
61
|
+
elif isinstance(data, list):
|
62
|
+
return [self.remove_null_values(item) for item in data]
|
63
|
+
else:
|
64
|
+
return data
|
65
|
+
|
66
|
+
def request(self, data: json):
|
67
|
+
# 将json对象转成json字符串
|
68
|
+
# 特别注意:使用 json.dumps 函数时必须补充第二个参数 separators=(',', ':') 用于过滤空格,否则会签名错误
|
69
|
+
# 时间戳秒
|
70
|
+
timestamp = int(time.time())
|
71
|
+
path = data.pop('path')
|
72
|
+
method = data.pop('method')
|
73
|
+
data = self.remove_null_values(data) # 移除值为 None 的键值对
|
74
|
+
body = json.dumps(data, separators=(",", ":"))
|
75
|
+
# 生成签名
|
76
|
+
sign = self.get_sign(body, timestamp)
|
77
|
+
url = f"{self.domain}{path}?appid={self.app_key}×tamp={timestamp}&sign={sign}"
|
78
|
+
if self.seller_id:
|
79
|
+
url = f"{url}&seller_id={self.seller_id}"
|
80
|
+
conn = http.client.HTTPSConnection("open.goofish.pro")
|
81
|
+
conn.request(
|
82
|
+
"POST",
|
83
|
+
url,
|
84
|
+
body,
|
85
|
+
self.headers,
|
86
|
+
)
|
87
|
+
res = conn.getresponse()
|
88
|
+
reps = res.read().decode("utf-8")
|
89
|
+
|
90
|
+
return reps
|
91
|
+
|
92
|
+
def _check_response(self, res) -> ApiResponse:
|
93
|
+
return res
|
@@ -0,0 +1,98 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
|
3
|
+
|
4
|
+
class RequestMethod(str, Enum):
|
5
|
+
GET = "GET"
|
6
|
+
POST = "POST"
|
7
|
+
PUT = "PUT"
|
8
|
+
DELETE = "DELETE"
|
9
|
+
PATCH = "PATCH"
|
10
|
+
OPTIONS = "OPTIONS"
|
11
|
+
HEAD = "HEAD"
|
12
|
+
|
13
|
+
class ItemBizType(Enum):
|
14
|
+
COMMON = 2 # 普通商品
|
15
|
+
INSPECTED = 0 # 已验货
|
16
|
+
INSPECTION_BAO = 10 # 验货宝
|
17
|
+
BRAND_AUTH = 16 # 品牌授权
|
18
|
+
XIAN_YU_SELECTED = 19 # 闲鱼严选
|
19
|
+
XIAN_YU_FLASH = 24 # 闲鱼特卖
|
20
|
+
BRAND_PICK = 26 # 品牌捡漏
|
21
|
+
|
22
|
+
class SpBizType(Enum):
|
23
|
+
MOBILE = 1 # 手机
|
24
|
+
TREND = 2 # 潮品
|
25
|
+
HOME_APPLIANCE = 3 # 家电
|
26
|
+
INSTRUMENT = 8 # 乐器
|
27
|
+
DIGITAL = 9 # 3C数码
|
28
|
+
LUXURY = 16 # 奢品
|
29
|
+
MATERNAL = 17 # 母婴
|
30
|
+
BEAUTY = 18 # 美妆个护
|
31
|
+
JEWELRY = 19 # 文玩/珠宝
|
32
|
+
GAMING = 20 # 游戏电玩
|
33
|
+
HOME = 21 # 家居
|
34
|
+
VIRTUAL_GAME = 22 # 虚拟游戏
|
35
|
+
ACCOUNT_RENTAL = 23 # 租号
|
36
|
+
BOOK = 24 # 图书
|
37
|
+
VOUCHER = 25 # 卡券
|
38
|
+
FOOD = 27 # 食品
|
39
|
+
TRENDY_TOY = 28 # 潮玩
|
40
|
+
SECOND_HAND_CAR = 29 # 二手车
|
41
|
+
PET_PLANT = 30 # 宠植
|
42
|
+
GIFT = 31 # 工艺礼品
|
43
|
+
CAR_SERVICE = 33 # 汽车服务
|
44
|
+
OTHER = 99 # 其他
|
45
|
+
|
46
|
+
class FlashSaleType(Enum):
|
47
|
+
LI_QI = 1 # 临期
|
48
|
+
GU_PIN = 2 # 孤品
|
49
|
+
DUAN_MA = 3 # 断码
|
50
|
+
WEI_XIA = 4 # 微瑕
|
51
|
+
WEI_HUO = 5 # 尾货
|
52
|
+
GUAN_FAN = 6 # 官翻
|
53
|
+
QUAN_XIN = 7 # 全新
|
54
|
+
FU_DAI = 8 # 福袋
|
55
|
+
OTHER = 99 # 其他
|
56
|
+
BRAND_WEI_XIA = 2601 # 微瑕
|
57
|
+
BRAND_LI_QI = 2602 # 临期
|
58
|
+
BRAND_QING_CANG = 2603 # 清仓
|
59
|
+
BRAND_GUAN_FAN = 2604 # 官翻
|
60
|
+
|
61
|
+
class ProductStatus(Enum):
|
62
|
+
"""管家商品状态枚举"""
|
63
|
+
UNKNOWN = 0 # 默认值
|
64
|
+
STATUS_21 = 21 # 状态21
|
65
|
+
STATUS_22 = 22 # 状态22
|
66
|
+
STATUS_23 = 23 # 状态23
|
67
|
+
STATUS_31 = 31 # 状态31
|
68
|
+
STATUS_33 = 33 # 状态33
|
69
|
+
STATUS_36 = 36 # 状态36
|
70
|
+
STATUS_NEGATIVE_1 = -1 # 状态-1
|
71
|
+
|
72
|
+
class SaleStatus(Enum):
|
73
|
+
"""销售状态枚举"""
|
74
|
+
UNKNOWN = 0 # 默认值
|
75
|
+
PENDING_PUBLICATION = 1 # 待发布
|
76
|
+
ON_SALE = 2 # 销售中
|
77
|
+
OFF_SALE = 3 # 已下架
|
78
|
+
|
79
|
+
|
80
|
+
class OrderStatus(Enum):
|
81
|
+
"""订单状态枚举"""
|
82
|
+
PENDING_PAYMENT = 11 # 待付款
|
83
|
+
PENDING_SHIPMENT = 12 # 待发货
|
84
|
+
SHIPPED = 21 # 已发货
|
85
|
+
TRANSACTION_SUCCESS = 22 # 交易成功
|
86
|
+
REFUNDED = 23 # 已退款
|
87
|
+
TRANSACTION_CLOSED = 24 # 交易关闭
|
88
|
+
|
89
|
+
class RefundStatus(Enum):
|
90
|
+
"""退款状态枚举"""
|
91
|
+
NOT_APPLIED = 0 # 未申请退款
|
92
|
+
PENDING_SELLER_APPROVAL = 1 # 待商家处理
|
93
|
+
PENDING_BUYER_RETURN = 2 # 待买家退货
|
94
|
+
PENDING_SELLER_RECEIVE = 3 # 待商家收货
|
95
|
+
REFUND_CLOSED = 4 # 退款关闭
|
96
|
+
REFUND_SUCCESS = 5 # 退款成功
|
97
|
+
REFUND_REJECTED = 6 # 已拒绝退款
|
98
|
+
PENDING_RETURN_ADDRESS_CONFIRMATION = 8 # 待确认退货地址
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import string
|
2
|
+
import random
|
3
|
+
import base64
|
4
|
+
import hashlib
|
5
|
+
import hmac
|
6
|
+
from enum import Enum
|
7
|
+
from typing import TypeVar
|
8
|
+
|
9
|
+
T = TypeVar("T")
|
10
|
+
|
11
|
+
|
12
|
+
def action(path, method="POST"):
|
13
|
+
|
14
|
+
def decorator(function: T) -> T:
|
15
|
+
def wrapper(*args, **kwargs):
|
16
|
+
kwargs.update({"path": path, "method": method})
|
17
|
+
return function(*args, **kwargs)
|
18
|
+
|
19
|
+
wrapper.__doc__ = function.__doc__
|
20
|
+
return wrapper
|
21
|
+
|
22
|
+
return decorator
|
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2020 Michael Primke
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1,18 @@
|
|
1
|
+
goofish_api/__init__.py,sha256=XfASoTB1zhCVRNb2By7lByBG_ttTLH-e8BpPreFaJOU,302
|
2
|
+
goofish_api/__version__.py,sha256=ugyuFliEqtAwQmH4sTlc16YXKYbFWDmfyk87fErB8-8,21
|
3
|
+
goofish_api/api/__init__.py,sha256=aVQ5ipR_8VdlFF9R_khDJPHYbsJwK62XAua1kwhgL7Y,161
|
4
|
+
goofish_api/api/base.py,sha256=7Dd6Fzm97FuLkMDMJHODgP5FSlbxHU9Q7V3Oi_3sbeA,290
|
5
|
+
goofish_api/api/good.py,sha256=a9-cvLLgpQp6qnD-kJcijst0uQg3Pyyx7tKL15Photg,21644
|
6
|
+
goofish_api/api/order.py,sha256=VB9oHQULdA1OewLTQdIKVRqsnjZvN563kNi_Bk26rRI,3929
|
7
|
+
goofish_api/api/other.py,sha256=DCV5htEIYWnUFaTNq6LLA-VM4aGV-3OCuT4lDVQUE5g,357
|
8
|
+
goofish_api/api/user.py,sha256=FekP846gUVN8gYBX0I11GzzePtRER8My1BUBCUfHFL8,350
|
9
|
+
goofish_api/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
|
+
goofish_api/utils/api_response.py,sha256=Gni3q14abz4RLhGnrmALeb3YieG5VHpk3jVeAT5PjXQ,170
|
11
|
+
goofish_api/utils/base_client.py,sha256=yPLigHtHqnbGAtkHTy2zfOGXaGyrQxFV4l5jDXQJnns,2976
|
12
|
+
goofish_api/utils/constants.py,sha256=UZwqg6i7uOHpLKmFjE91ju9NJJCsQZ5JaV4FepoM9Bw,3026
|
13
|
+
goofish_api/utils/helpers.py,sha256=cgvsmKMs-iOmYV2d453rkuscyFsHhwLcHHAPEp_rDGg,441
|
14
|
+
goofish_api-0.0.1.dist-info/LICENSE,sha256=d01GaRU7ASQVquyRBb16HcNMh33nipoG9rS7uoBjCXw,1070
|
15
|
+
goofish_api-0.0.1.dist-info/METADATA,sha256=jWO79RT-YDr4dQXQEkM4YbIkQ2mue_A8Z6-L_SaE3hA,238
|
16
|
+
goofish_api-0.0.1.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
|
17
|
+
goofish_api-0.0.1.dist-info/top_level.txt,sha256=6Lsqj-fn3uvEK9GzwWaiqn0XlepFtXFg1FiCua22Hgo,12
|
18
|
+
goofish_api-0.0.1.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
goofish_api
|