in psaw/PushshiftAPI.py [0:0]
def _search(self,
kind,
stop_condition=lambda x: False,
return_batch=False,
dataset='reddit',
**kwargs):
self.metadata_ = {}
self.payload = copy.deepcopy(kwargs)
endpoint = '{dataset}/{kind}/search'.format(dataset=dataset, kind=kind)
url = self.base_url.format(endpoint=endpoint)
for response in self._handle_paging(url):
if 'aggs' in response:
yield response['aggs']
# Aggs responses are unreliable in subsequent batches with
# current search paging implementation. Enforce aggs result
# is only returned once.
self.payload.pop('aggs')
self.metadata_ = response.get('metadata', {})
log.debug('Metadata: %s' % self.metadata_)
results = response['data']
shards_down_message = "Not all PushShift shards are active. Query results may be incomplete"
if self.shards_are_down and (self.shards_down_behavior is not None) :
if self.shards_down_behavior == 'warn':
warnings.warn(shards_down_message)
if self.shards_down_behavior == 'stop':
raise RuntimeError(shards_down_message)
if len(results) == 0:
return
if return_batch:
batch = []
for thing in results:
thing = self._wrap_thing(thing, kind)
if return_batch:
batch.append(thing)
else:
yield thing
if stop_condition(thing):
if return_batch:
return batch
return
if return_batch:
yield batch
# For paging.
if self.payload.get('sort') == 'desc':
self.payload['before'] = thing.created_utc
else:
self.payload['after'] = thing.created_utc