File size: 1,652 Bytes
ba1a9b3
 
2525835
 
 
 
ba1a9b3
2525835
 
 
ba1a9b3
 
 
 
 
 
 
2525835
 
 
ba1a9b3
 
 
 
 
 
2525835
 
 
 
ba1a9b3
 
2525835
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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

@router.get("/unsplash-images/", response_model=UnsplashResponse)
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)