prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  yettel_bg is broken
  The spider does not return anything. It seems like they've moved the page for getting their store data. I wasn't able to find the new address or how the data reaches their store locator page.
  
  Store locator: https://www.yettel.bg/faq/digital-customer-service/store-locator
  
  Spider: https://github.com/alltheplaces/alltheplaces/blob/master/locations/spiders/yettel_bg.py
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `locations/spiders/yettel_bg.py`
  Content:
  ```
  1 from scrapy import Selector, Spider
  2 
  3 from locations.items import Feature
  4 
  5 
  6 class YettelBGSpider(Spider):
  7     name = "yettel_bg"
  8     item_attributes = {
  9         "brand": "Yettel",
  10         "brand_wikidata": "Q14915070",
  11         "country": "BG",
  12     }
  13     start_urls = ["https://www.yettel.bg/store-locator/json"]
  14 
  15     def parse(self, response):
  16         for store in response.json()["features"]:
  17             item = Feature()
  18 
  19             item["lon"], item["lat"] = store["geometry"]["coordinates"]
  20 
  21             item["ref"] = store["properties"]["title"]
  22 
  23             address_block = Selector(text=store["properties"]["gsl_addressfield"])
  24 
  25             item["street_address"] = address_block.xpath('//div[@class="thoroughfare"]/text()').get()
  26             item["postcode"] = address_block.xpath('//span[@class="postal-code"]/text()').get()
  27             item["city"] = address_block.xpath('//span[@class="locality"]/text()').get()
  28 
  29             yield item
  30
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/locations/spiders/yettel_bg.py b/locations/spiders/yettel_bg.py
  --- a/locations/spiders/yettel_bg.py
  +++ b/locations/spiders/yettel_bg.py
  @@ -1,5 +1,9 @@
  -from scrapy import Selector, Spider
  +import io
   
  +from openpyxl import load_workbook
  +from scrapy import Spider
  +
  +from locations.hours import OpeningHours, day_range
   from locations.items import Feature
   
   
  @@ -10,20 +14,50 @@
           "brand_wikidata": "Q14915070",
           "country": "BG",
       }
  -    start_urls = ["https://www.yettel.bg/store-locator/json"]
  +    start_urls = ["https://www.yettel.bg/faq/digital-customer-service/store-locator"]
  +    no_refs = True
  +    custom_settings = {"ROBOTSTXT_OBEY": False}
   
       def parse(self, response):
  -        for store in response.json()["features"]:
  -            item = Feature()
  -
  -            item["lon"], item["lat"] = store["geometry"]["coordinates"]
  -
  -            item["ref"] = store["properties"]["title"]
  -
  -            address_block = Selector(text=store["properties"]["gsl_addressfield"])
  -
  -            item["street_address"] = address_block.xpath('//div[@class="thoroughfare"]/text()').get()
  -            item["postcode"] = address_block.xpath('//span[@class="postal-code"]/text()').get()
  -            item["city"] = address_block.xpath('//span[@class="locality"]/text()').get()
  -
  -            yield item
  +        yield response.follow(
  +            url=response.xpath('//input[@id="hdnExcelFile"]/@value').get(), callback=self.parse_spreadsheet
  +        )
  +
  +    def parse_spreadsheet(self, response):
  +        if "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" in response.headers.get(
  +            "Content-Type"
  +        ).decode("utf-8"):
  +            excel_file = response.body
  +
  +            excel_data = io.BytesIO(excel_file)
  +            workbook = load_workbook(excel_data, read_only=True)
  +
  +            sheet = workbook.active
  +
  +            data = []
  +            for row in sheet.iter_rows(values_only=True):
  +                data.append(row)
  +
  +            headers = data[0]
  +            json_data = []
  +            for row in data[1:]:
  +                json_data.append({headers[i]: cell for i, cell in enumerate(row)})
  +
  +            for store in json_data:
  +                item = Feature()
  +
  +                item["lat"] = store["latitude"]
  +                item["lon"] = store["longitude"]
  +
  +                item["street_address"] = store["address_loc"]
  +                item["city"] = store["city_loc"]
  +
  +                item["opening_hours"] = OpeningHours()
  +                item["opening_hours"].add_days_range(
  +                    day_range("Mo", "Fr"), *store["working_time_weekdays"].replace(" ", "").split("-")
  +                )
  +                if store["is_closed_on_saturday"] == "No":
  +                    item["opening_hours"].add_range("Sa", *store["working_time_saturday"].replace(" ", "").split("-"))
  +                if store["is_closed_on_sunday"] == "No":
  +                    item["opening_hours"].add_range("Su", *store["working_time_sunday"].replace(" ", "").split("-"))
  +                yield item
  
verification_info: {"golden_diff": "diff --git a/locations/spiders/yettel_bg.py b/locations/spiders/yettel_bg.py\n--- a/locations/spiders/yettel_bg.py\n+++ b/locations/spiders/yettel_bg.py\n@@ -1,5 +1,9 @@\n-from scrapy import Selector, Spider\n+import io\n \n+from openpyxl import load_workbook\n+from scrapy import Spider\n+\n+from locations.hours import OpeningHours, day_range\n from locations.items import Feature\n \n \n@@ -10,20 +14,50 @@\n         \"brand_wikidata\": \"Q14915070\",\n         \"country\": \"BG\",\n     }\n-    start_urls = [\"https://www.yettel.bg/store-locator/json\"]\n+    start_urls = [\"https://www.yettel.bg/faq/digital-customer-service/store-locator\"]\n+    no_refs = True\n+    custom_settings = {\"ROBOTSTXT_OBEY\": False}\n \n     def parse(self, response):\n-        for store in response.json()[\"features\"]:\n-            item = Feature()\n-\n-            item[\"lon\"], item[\"lat\"] = store[\"geometry\"][\"coordinates\"]\n-\n-            item[\"ref\"] = store[\"properties\"][\"title\"]\n-\n-            address_block = Selector(text=store[\"properties\"][\"gsl_addressfield\"])\n-\n-            item[\"street_address\"] = address_block.xpath('//div[@class=\"thoroughfare\"]/text()').get()\n-            item[\"postcode\"] = address_block.xpath('//span[@class=\"postal-code\"]/text()').get()\n-            item[\"city\"] = address_block.xpath('//span[@class=\"locality\"]/text()').get()\n-\n-            yield item\n+        yield response.follow(\n+            url=response.xpath('//input[@id=\"hdnExcelFile\"]/@value').get(), callback=self.parse_spreadsheet\n+        )\n+\n+    def parse_spreadsheet(self, response):\n+        if \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" in response.headers.get(\n+            \"Content-Type\"\n+        ).decode(\"utf-8\"):\n+            excel_file = response.body\n+\n+            excel_data = io.BytesIO(excel_file)\n+            workbook = load_workbook(excel_data, read_only=True)\n+\n+            sheet = workbook.active\n+\n+            data = []\n+            for row in sheet.iter_rows(values_only=True):\n+                data.append(row)\n+\n+            headers = data[0]\n+            json_data = []\n+            for row in data[1:]:\n+                json_data.append({headers[i]: cell for i, cell in enumerate(row)})\n+\n+            for store in json_data:\n+                item = Feature()\n+\n+                item[\"lat\"] = store[\"latitude\"]\n+                item[\"lon\"] = store[\"longitude\"]\n+\n+                item[\"street_address\"] = store[\"address_loc\"]\n+                item[\"city\"] = store[\"city_loc\"]\n+\n+                item[\"opening_hours\"] = OpeningHours()\n+                item[\"opening_hours\"].add_days_range(\n+                    day_range(\"Mo\", \"Fr\"), *store[\"working_time_weekdays\"].replace(\" \", \"\").split(\"-\")\n+                )\n+                if store[\"is_closed_on_saturday\"] == \"No\":\n+                    item[\"opening_hours\"].add_range(\"Sa\", *store[\"working_time_saturday\"].replace(\" \", \"\").split(\"-\"))\n+                if store[\"is_closed_on_sunday\"] == \"No\":\n+                    item[\"opening_hours\"].add_range(\"Su\", *store[\"working_time_sunday\"].replace(\" \", \"\").split(\"-\"))\n+                yield item\n", "issue": "yettel_bg is broken\nThe spider does not return anything. It seems like they've moved the page for getting their store data. I wasn't able to find the new address or how the data reaches their store locator page.\r\n\r\nStore locator: https://www.yettel.bg/faq/digital-customer-service/store-locator\r\n\r\nSpider: https://github.com/alltheplaces/alltheplaces/blob/master/locations/spiders/yettel_bg.py\n", "before_files": [{"content": "from scrapy import Selector, Spider\n\nfrom locations.items import Feature\n\n\nclass YettelBGSpider(Spider):\n    name = \"yettel_bg\"\n    item_attributes = {\n        \"brand\": \"Yettel\",\n        \"brand_wikidata\": \"Q14915070\",\n        \"country\": \"BG\",\n    }\n    start_urls = [\"https://www.yettel.bg/store-locator/json\"]\n\n    def parse(self, response):\n        for store in response.json()[\"features\"]:\n            item = Feature()\n\n            item[\"lon\"], item[\"lat\"] = store[\"geometry\"][\"coordinates\"]\n\n            item[\"ref\"] = store[\"properties\"][\"title\"]\n\n            address_block = Selector(text=store[\"properties\"][\"gsl_addressfield\"])\n\n            item[\"street_address\"] = address_block.xpath('//div[@class=\"thoroughfare\"]/text()').get()\n            item[\"postcode\"] = address_block.xpath('//span[@class=\"postal-code\"]/text()').get()\n            item[\"city\"] = address_block.xpath('//span[@class=\"locality\"]/text()').get()\n\n            yield item\n", "path": "locations/spiders/yettel_bg.py"}], "after_files": [{"content": "import io\n\nfrom openpyxl import load_workbook\nfrom scrapy import Spider\n\nfrom locations.hours import OpeningHours, day_range\nfrom locations.items import Feature\n\n\nclass YettelBGSpider(Spider):\n    name = \"yettel_bg\"\n    item_attributes = {\n        \"brand\": \"Yettel\",\n        \"brand_wikidata\": \"Q14915070\",\n        \"country\": \"BG\",\n    }\n    start_urls = [\"https://www.yettel.bg/faq/digital-customer-service/store-locator\"]\n    no_refs = True\n    custom_settings = {\"ROBOTSTXT_OBEY\": False}\n\n    def parse(self, response):\n        yield response.follow(\n            url=response.xpath('//input[@id=\"hdnExcelFile\"]/@value').get(), callback=self.parse_spreadsheet\n        )\n\n    def parse_spreadsheet(self, response):\n        if \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" in response.headers.get(\n            \"Content-Type\"\n        ).decode(\"utf-8\"):\n            excel_file = response.body\n\n            excel_data = io.BytesIO(excel_file)\n            workbook = load_workbook(excel_data, read_only=True)\n\n            sheet = workbook.active\n\n            data = []\n            for row in sheet.iter_rows(values_only=True):\n                data.append(row)\n\n            headers = data[0]\n            json_data = []\n            for row in data[1:]:\n                json_data.append({headers[i]: cell for i, cell in enumerate(row)})\n\n            for store in json_data:\n                item = Feature()\n\n                item[\"lat\"] = store[\"latitude\"]\n                item[\"lon\"] = store[\"longitude\"]\n\n                item[\"street_address\"] = store[\"address_loc\"]\n                item[\"city\"] = store[\"city_loc\"]\n\n                item[\"opening_hours\"] = OpeningHours()\n                item[\"opening_hours\"].add_days_range(\n                    day_range(\"Mo\", \"Fr\"), *store[\"working_time_weekdays\"].replace(\" \", \"\").split(\"-\")\n                )\n                if store[\"is_closed_on_saturday\"] == \"No\":\n                    item[\"opening_hours\"].add_range(\"Sa\", *store[\"working_time_saturday\"].replace(\" \", \"\").split(\"-\"))\n                if store[\"is_closed_on_sunday\"] == \"No\":\n                    item[\"opening_hours\"].add_range(\"Su\", *store[\"working_time_sunday\"].replace(\" \", \"\").split(\"-\"))\n                yield item\n", "path": "locations/spiders/yettel_bg.py"}]}