Source code for kingfisher_scrapy.spiders.kosovo
from datetime import timedelta
from kingfisher_scrapy.base_spiders import SimpleSpider
from kingfisher_scrapy.util import handle_http_error, parameters
[docs]
class Kosovo(SimpleSpider):
"""
Domain
Public Procurement Regulatory Commission
Spider arguments
from_date
Download only data with a tender period end date from this time onward (YYYY-MM-DD format).
Defaults to '2000-01-01'.
until_date
Download only data with a tender period end date until this time (YYYY-MM-DD format). Defaults to now.
Note: This date is non-inclusive.
API documentation
https://ocdskrpp.rks-gov.net/Help
"""
name = 'kosovo'
# BaseSpider
date_format = 'date'
date_required = True
default_from_date = '2000-01-01'
# SimpleSpider
data_type = 'release_package'
def start_requests(self):
# The API is slow even with short periods, so we request one day at a time.
delta = self.until_date - self.from_date
for days in reversed(range(delta.days + 1)):
start = self.from_date + timedelta(days=days - 1)
end = self.from_date + timedelta(days=days)
url = 'https://ocdskrpp.rks-gov.net/krppapi/tenderrelease?endDateFrom=' \
f'{start.strftime("%Y-%m-%d")}&endDateEnd={end.strftime("%Y-%m-%d")}'
yield self.build_request(url, formatter=parameters('endDateFrom', 'endDateEnd'))
@handle_http_error
def parse(self, response):
# The API returns a release package with an empty releases array if no releases were found.
if response.json()['releases']:
yield self.build_file_from_response(response, data_type=self.data_type)