@@ -119,30 +119,59 @@ def get_product_ticker(self, product_id):
119
119
"""
120
120
return self ._get ('/products/{}/ticker' .format (str (product_id )))
121
121
122
- def get_product_trades (self , product_id ):
122
+ def get_product_trades (self , product_id , before = '' , after = '' , limit = '' , result = [] ):
123
123
"""List the latest trades for a product.
124
-
125
124
Args:
126
- product_id (str): Product
127
-
125
+ product_id (str): Product
126
+ before (Optional[str]): start time in ISO 8601
127
+ after (Optional[str]): end time in ISO 8601
128
+ limit (Optional[int]): the desired number of trades (can be more than 100,
129
+ automatically paginated)
130
+ results (Optional[list]): list of results that is used for the pagination
128
131
Returns:
129
- list: Latest trades. Example::
130
- [{
131
- "time": "2014-11-07T22:19:28.578544Z",
132
- "trade_id": 74,
133
- "price": "10.00000000",
134
- "size": "0.01000000",
135
- "side": "buy"
136
- }, {
137
- "time": "2014-11-07T01:08:43.642366Z",
138
- "trade_id": 73,
139
- "price": "100.00000000",
140
- "size": "0.01000000",
141
- "side": "sell"
142
- }]
132
+ list: Latest trades. Example::
133
+ [{
134
+ "time": "2014-11-07T22:19:28.578544Z",
135
+ "trade_id": 74,
136
+ "price": "10.00000000",
137
+ "size": "0.01000000",
138
+ "side": "buy"
139
+ }, {
140
+ "time": "2014-11-07T01:08:43.642366Z",
141
+ "trade_id": 73,
142
+ "price": "100.00000000",
143
+ "size": "0.01000000",
144
+ "side": "sell"
145
+ }]
146
+ """ "
147
+ url = self .url + '/products/{}/trades' .format (str (product_id ))
148
+ params = {}
143
149
144
- """
145
- return self ._get ('/products/{}/trades' .format (str (product_id )))
150
+ if before :
151
+ params ['before' ] = str (before )
152
+ if after :
153
+ params ['after' ] = str (after )
154
+ if limit and limit < 100 :
155
+ # the default limit is 100
156
+ # we only add it if the limit is less than 100
157
+ params ['limit' ] = limit
158
+
159
+ r = requests .get (url , params = params )
160
+ # r.raise_for_status()
161
+
162
+ result .extend (r .json ())
163
+
164
+ if 'cb-after' in r .headers and limit is not len (result ):
165
+ # update limit
166
+ limit -= len (result )
167
+ if limit <= 0 :
168
+ return result
169
+
170
+ # TODO: need a way to ensure that we don't get rate-limited/blocked
171
+ # time.sleep(0.4)
172
+ return self .get_product_trades (product_id = product_id , after = r .headers ['cb-after' ], limit = limit , result = result )
173
+
174
+ return result
146
175
147
176
def get_product_historic_rates (self , product_id , start = None , end = None ,
148
177
granularity = None ):
0 commit comments