Closed BenPy007 closed 2 months ago
The new version is now available
@tinohager Thanks so much, I see the update in V2 of the API but V3 seems to drop it? I see V2 will be deprecated at the end of the year so just wanted to flag. Will reference V2 for the moment. Thanks so much! Ben
Sorry to be playing comment tennis @tinohager :-) If you click on https://date.nager.at/api/v3/PublicHolidays/2024/ZA it is not included or I just cannot see it, and neither does my API request pick it up. Attached a screenshot.
Owe you a coffee.
maybe your query is cached?
You would be so proud of me if my query is cached! :-) I see it in V2 fine, but will try and see, good point! See it in V2 no problem.
Ok, think I worked it out. The server was serving me cached data, you were right. Included a timestamp into my python query to force it to bypass caching.
Here it is incase it can be useful to anyone:
import requests import pandas as pd from datetime import datetime import os
def fetch_holidays(year, country_code): """Fetch holidays for a given year and country using the Nager.Date API.""" timestamp = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] url = f"https://date.nager.at/api/v3/publicholidays/{year}/{country_code}?timestamp={timestamp}" response = requests.get(url) if response.status_code == 200: holidays = response.json()
return [holiday for holiday in holidays if 'date' in holiday]
else:
print(f"Failed to fetch data for {year}: {response.status_code}")
return []
def save_holidays_to_excel(start_year, end_year, country_code, filename): """Fetch holidays for multiple years and save them in an Excel file.""" all_holidays = [] for year in range(start_year, end_year + 1): holidays = fetch_holidays(year, country_code) for holiday in holidays: holiday['Year'] = year # Add the year to the holiday dictionary all_holidays.append(holiday)
# Convert the list of holidays to a DataFrame
df = pd.DataFrame(all_holidays)
if 'date' in df.columns:
df['date'] = pd.to_datetime(df['date']).dt.date # Convert to date, removing time
df.rename(columns={'date': 'Date'}, inplace=True)
else:
print("Date column not found in the data")
# Get the directory of the current script
current_dir = os.path.dirname(os.path.realpath(__file__))
full_path = os.path.join(current_dir, filename)
# Save the DataFrame to an Excel file
with pd.ExcelWriter(full_path, engine='openpyxl', date_format='yyyy-mm-dd') as writer:
df.to_excel(writer, index=False)
print(f"Saved holidays from {start_year} to {end_year} to {full_path}")
save_holidays_to_excel(2023, 2025, 'ZA', 'holidays.xlsx')
I think the cache was only active in your browser, you shouldn't call the api like that so you prevent a meaningful caching on our side
Affected country
South Africa
Affected public holiday
Election Day
Source of the information
https://www.gov.za/news/elections2024
More information
Can we add the 2024 South Africa (ZA) Elections public holiday please :-)