## fdex database pull ## # Request only what you need, transport only what is necessary, and cache what you can. # fdex_db_pull.py # Python translation by ChatGPT import requests import pandas as pd from datetime import datetime import string # ------------------------------- # Setup # ------------------------------- # Current date formatting (equivalent to strftime in R) theDate = datetime.now().strftime("%d_%b_%Y") # Alphabet vector alphabet_vector = list(string.ascii_lowercase) # Base API URL fd_api_base_url = "https://fdex.org/services/api/query.php?qText=" # ------------------------------- # Functions # ------------------------------- def get_fd_record(endpoint, query_text): url = f"{fd_api_base_url}{query_text}&qField={endpoint}" try: response = requests.get(url, timeout=10) response.raise_for_status() return response.json() except Exception: return None # ------------------------------- # Main Code # ------------------------------- # Column names the_colnames = [ "taxon", "authors", "mbNumber", "otherID", "rank", "rankCode", "taxonomicStatus", "currentTaxon", "currentMbNumber", "currentOtherID", "currentStatus", "parentTaxon", "parentMbNumber", "parentOtherID", "recordSource", "taxonomicAgreement" ] # Initialize empty DataFrame fdex_data_frame = pd.DataFrame(columns=the_colnames) # Loop through alphabet combinations for i, first_letter_lower in enumerate(alphabet_vector): for j, second_letter in enumerate(alphabet_vector): first_letter = first_letter_lower.upper() combined_letters = first_letter + second_letter print(f"Processing genera starting: '{combined_letters}' for i = {i+1} and j = {j+1}") query = f"{combined_letters}%25" fdex_data = get_fd_record("taxon", query) if fdex_data: temp_df = pd.DataFrame(fdex_data) fdex_data_frame = pd.concat([fdex_data_frame, temp_df], ignore_index=True) # Filter for "Index Fungorum" fdex_data_frame = fdex_data_frame[ fdex_data_frame["recordSource"] == "Index Fungorum" ] # Save to CSV output_file = f"{theDate}_fdex_db.csv" fdex_data_frame.to_csv(output_file, index=False) print(f"Data saved to {output_file}")