Spaces:
Paused
Paused
| from fastapi import APIRouter, HTTPException, Query, Security, Depends | |
| from fastapi.security import APIKeyHeader | |
| import requests | |
| import os | |
| from typing import List, Optional | |
| from pydantic import BaseModel | |
| import logging | |
| router = APIRouter() | |
| # Setup logging | |
| logger = logging.getLogger(__name__) | |
| # Setup API key authentication | |
| api_key_header = APIKeyHeader(name="X-API-Key", auto_error=False) | |
| CHAT_AUTH_KEY = os.environ.get("CHAT_AUTH_KEY") | |
| class UnsplashResponse(BaseModel): | |
| images: List[str] | |
| async def verify_api_key(api_key: str = Security(api_key_header)): | |
| if api_key != CHAT_AUTH_KEY: | |
| logger.warning("Invalid API key used") | |
| raise HTTPException(status_code=403, detail="Could not validate credentials") | |
| return api_key | |
| async def get_unsplash_images( | |
| query: str, | |
| images_per_page: Optional[int] = Query(4, alias="per_page", ge=1, le=30), | |
| page: Optional[int] = Query(1, ge=1), | |
| api_key: str = Depends(verify_api_key) | |
| ): | |
| url = "https://api.unsplash.com/search/photos" | |
| params = { | |
| "query": query, | |
| "client_id": os.environ.get("UNSPLASH_API_KEY"), | |
| "per_page": images_per_page, | |
| "page": page | |
| } | |
| response = requests.get(url, params=params) | |
| if response.status_code != 200: | |
| raise HTTPException(status_code=response.status_code, detail="Failed to fetch images from Unsplash") | |
| data = response.json() | |
| images = [] | |
| if 'results' in data: | |
| for photo in data['results']: | |
| images.append(photo['urls']['regular']) | |
| return UnsplashResponse(images=images) |