Source code for kingfisher_scrapy.spiders.ecuador_sercop_api

from kingfisher_scrapy.base_spiders import IndexSpider, PeriodicSpider
from kingfisher_scrapy.util import components, parameters, replace_path_separator


[docs] class EcuadorSERCOPAPI(IndexSpider, PeriodicSpider): """ Domain Servicio Nacional de Contratación Pública (SERCOP) Caveats The publication times out from many countries. It is known to work from: Chile, Colombia, Ecuador, Mexico, Paraguay, and the United States of America. Spider arguments from_date Download only data from this year onward (YYYY format). Defaults to '2015'. until_date Download only data until this year (YYYY format). Defaults to the current year. API documentation https://datosabiertos.compraspublicas.gob.ec/PLATAFORMA/datos-abiertos/api Bulk download documentation https://datosabiertos.compraspublicas.gob.ec/PLATAFORMA/datos-abiertos """ name = "ecuador_sercop_api" custom_settings = { # Reduce the number of concurrent requests to avoid multiple failures. "CONCURRENT_REQUESTS": 2, } # BaseSpider date_format = "year" default_from_date = "2015" # SimpleSpider data_type = "release_package" # Local url_prefix = "https://datosabiertos.compraspublicas.gob.ec/PLATAFORMA/api/" # PeriodicSpider pattern = f"{url_prefix}search_ocds?year={{0}}" formatter = staticmethod(components(-1)) start_callback = "parse_list" # IndexSpider page_count_pointer = "/pages" parse_list_callback = "parse_page" def parse_page(self, response): for data in response.json()["data"]: # Some ocids have a '/' character which cannot be in a file name. yield self.build_request( f"{self.url_prefix}record?ocid={data['ocid']}", formatter=parameters("ocid", parser=replace_path_separator), )