@@ -337,7 +337,7 @@ def __do_series_search(self, url):
337
337
data = None
338
338
return data , num_results_total
339
339
340
- def __get_search_results (self , url , limit , order_by , sort_order ):
340
+ def __get_search_results (self , url , limit , order_by , sort_order , filter ):
341
341
"""
342
342
helper function for getting search results up to specified limit on the number of results. The Fred HTTP API
343
343
truncates to 1000 results per request, so this may issue multiple HTTP requests to obtain more available data.
@@ -352,6 +352,12 @@ def __get_search_results(self, url, limit, order_by, sort_order):
352
352
else :
353
353
raise ValueError ('%s is not in the valid list of order_by options: %s' % (order_by , str (order_by_options )))
354
354
355
+ if filter is not None :
356
+ if len (filter ) == 2 :
357
+ url = url + '&filter_variable=%s&filter_value=%s' % (filter [0 ], filter [1 ])
358
+ else :
359
+ raise ValueError ('Filter should be a 2 item tuple like (filter_variable, filter_value)' )
360
+
355
361
sort_order_options = ['asc' , 'desc' ]
356
362
if sort_order is not None :
357
363
if sort_order in sort_order_options :
@@ -375,7 +381,7 @@ def __get_search_results(self, url, limit, order_by, sort_order):
375
381
data = data .append (next_data )
376
382
return data .head (max_results_needed )
377
383
378
- def search (self , text , limit = 1000 , order_by = None , sort_order = None ):
384
+ def search (self , text , limit = 1000 , order_by = None , sort_order = None , filter = None ):
379
385
"""
380
386
Do a fulltext search for series in the Fred dataset. Returns information about matching series in a DataFrame.
381
387
@@ -391,6 +397,9 @@ def search(self, text, limit=1000, order_by=None, sort_order=None):
391
397
'popularity'
392
398
sort_order : str, optional
393
399
sort the results by ascending or descending order. Valid options are 'asc' or 'desc'
400
+ filter : tuple, optional
401
+ filters the results. Expects a tuple like (filter_variable, filter_value).
402
+ Valid filter_variable values are 'frequency', 'units', and 'seasonal_adjustment'
394
403
395
404
Returns
396
405
-------
@@ -399,10 +408,10 @@ def search(self, text, limit=1000, order_by=None, sort_order=None):
399
408
"""
400
409
url = "%s/series/search?search_text=%s&" % (self .root_url ,
401
410
quote_plus (text ))
402
- info = self .__get_search_results (url , limit , order_by , sort_order )
411
+ info = self .__get_search_results (url , limit , order_by , sort_order , filter )
403
412
return info
404
413
405
- def search_by_release (self , release_id , limit = 0 , order_by = None , sort_order = None ):
414
+ def search_by_release (self , release_id , limit = 0 , order_by = None , sort_order = None , filter = None ):
406
415
"""
407
416
Search for series that belongs to a release id. Returns information about matching series in a DataFrame.
408
417
@@ -418,19 +427,22 @@ def search_by_release(self, release_id, limit=0, order_by=None, sort_order=None)
418
427
'popularity'
419
428
sort_order : str, optional
420
429
sort the results by ascending or descending order. Valid options are 'asc' or 'desc'
430
+ filter : tuple, optional
431
+ filters the results. Expects a tuple like (filter_variable, filter_value).
432
+ Valid filter_variable values are 'frequency', 'units', and 'seasonal_adjustment'
421
433
422
434
Returns
423
435
-------
424
436
info : DataFrame
425
437
a DataFrame containing information about the matching Fred series
426
438
"""
427
439
url = "%s/release/series?release_id=%d" % (self .root_url , release_id )
428
- info = self .__get_search_results (url , limit , order_by , sort_order )
440
+ info = self .__get_search_results (url , limit , order_by , sort_order , filter )
429
441
if info is None :
430
442
raise ValueError ('No series exists for release id: ' + str (release_id ))
431
443
return info
432
444
433
- def search_by_category (self , category_id , limit = 0 , order_by = None , sort_order = None ):
445
+ def search_by_category (self , category_id , limit = 0 , order_by = None , sort_order = None , filter = None ):
434
446
"""
435
447
Search for series that belongs to a category id. Returns information about matching series in a DataFrame.
436
448
@@ -446,6 +458,9 @@ def search_by_category(self, category_id, limit=0, order_by=None, sort_order=Non
446
458
'popularity'
447
459
sort_order : str, optional
448
460
sort the results by ascending or descending order. Valid options are 'asc' or 'desc'
461
+ filter : tuple, optional
462
+ filters the results. Expects a tuple like (filter_variable, filter_value).
463
+ Valid filter_variable values are 'frequency', 'units', and 'seasonal_adjustment'
449
464
450
465
Returns
451
466
-------
@@ -454,7 +469,7 @@ def search_by_category(self, category_id, limit=0, order_by=None, sort_order=Non
454
469
"""
455
470
url = "%s/category/series?category_id=%d&" % (self .root_url ,
456
471
category_id )
457
- info = self .__get_search_results (url , limit , order_by , sort_order )
472
+ info = self .__get_search_results (url , limit , order_by , sort_order , filter )
458
473
if info is None :
459
474
raise ValueError ('No series exists for category id: ' + str (category_id ))
460
475
return info
0 commit comments