Spaces:
Running
Running
| import os | |
| import requests | |
| from crewai.tools import BaseTool | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| class ShortenerTool(BaseTool): | |
| name: str = "URL Shortener Tool" | |
| description: str = "Generates a short version of a given URL using an external API." | |
| natura_api_token: str | |
| def _run(self, original_url: str) -> str: | |
| api_url = "https://ncf-apigw.prd.naturacloud.com/url-shortener/links" | |
| headers = { | |
| "accept": "*/*", | |
| "accept-language": "pt-BR,pt;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6", | |
| "authorization": f"Bearer {self.natura_api_token}", | |
| "content-type": "application/json", | |
| "priority": "u=1, i", | |
| "sec-ch-ua": "\"Microsoft Edge\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"", | |
| "sec-ch-ua-mobile": "?0", | |
| "sec-ch-ua-platform": "\"Windows\"", | |
| "sec-fetch-dest": "empty", | |
| "sec-fetch-mode": "cors", | |
| "sec-fetch-site": "cross-site", | |
| "x-api-key": f"{os.environ["NATURA_X_API_KEY"]}", | |
| "Referer": "https://www.minhaloja.natura.com/" | |
| } | |
| payload = { | |
| "url": original_url, | |
| "domain": 1 | |
| } | |
| try: | |
| response = requests.post(api_url, headers=headers, json=payload) | |
| response.raise_for_status() # Raise an exception for HTTP errors | |
| short_url_data = response.json() | |
| return short_url_data.get("short", original_url) # Return original_url if short not found | |
| except requests.exceptions.RequestException as e: | |
| print(f"Warning: Error generating short URL for {original_url}: {e}. Returning original URL.") | |
| return original_url | |
| except ValueError: | |
| print(f"Warning: Invalid JSON response from shortener API for {original_url}. Returning original URL.") | |
| return original_url | |