brokenwatch24-unsplash

TotalClaw 作者 totalclaw

搜索、浏览与下载 Unsplash 高质量免费图片,含 API 认证与下载追踪。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw install totalclaw:totalclaw~brokenwatch24-unsplash
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~brokenwatch24-unsplash/file -o brokenwatch24-unsplash.md
## 概述(中文)

搜索、浏览与下载 Unsplash 高质量免费图片,含 API 认证与下载追踪。

## 技能正文

> **中文摘要:** 搜索、浏览与下载 Unsplash 高质量免费图片,含 API 认证与下载追踪。

# Unsplash API

Search, browse, and download high-quality free photos from Unsplash's library of millions of images.

## 设置 & Authentication

### Get your Access Key
1. Create account at https://unsplash.com/developers
2. Register a new application
3. Copy your **Access Key** (starts with your app name)

### Store credentials
```bash
mkdir -p ~/.config/unsplash
echo "YOUR_ACCESS_KEY" > ~/.config/unsplash/access_key
chmod 600 ~/.config/unsplash/access_key
```

Or set environment variable:
```bash
export UNSPLASH_ACCESS_KEY="your_access_key_here"
```

### Rate Limits
- **Demo**: 50 requests/hour
- **Production**: 5,000 requests/hour (after app approval)
- Only `/v1/messages` endpoints count; image URLs (`images.unsplash.com`) don't

## Common Operations

### Search Photos
```bash
curl "https://api.unsplash.com/search/photos?query=nature&per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

**Parameters:**
- `query`: Search terms (required)
- `page`: Page number (default: 1)
- `per_page`: Results per page (default: 10, max: 30)
- `order_by`: `relevant` (default) or `latest`
- `color`: Filter by color (`black_and_white`, `black`, `white`, `yellow`, `orange`, `red`, `purple`, `magenta`, `green`, `teal`, `blue`)
- `orientation`: `landscape`, `portrait`, or `squarish`

### Get Random Photo
```bash
curl "https://api.unsplash.com/photos/random?query=coffee&count=1" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

**Parameters:**
- `query`: Limit to search term (optional)
- `count`: Number of photos (1-30, default: 1)
- `orientation`: Filter by orientation
- `collections`: Filter by collection IDs (comma-separated)

### Get Photo Details
```bash
curl "https://api.unsplash.com/photos/PHOTO_ID" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

Returns full photo metadata including EXIF, location, user info, and all image URLs.

### Track Download (Required!)
**重要:** You MUST trigger this endpoint when downloading a photo to comply with API guidelines.
```bash
curl "https://api.unsplash.com/photos/PHOTO_ID/download" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

This increments the download counter. Response includes the download URL.

### List Editorial Feed
```bash
curl "https://api.unsplash.com/photos?per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

### Browse Collections
```bash
# List all collections
curl "https://api.unsplash.com/collections?per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Get collection photos
curl "https://api.unsplash.com/collections/COLLECTION_ID/photos" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

### User Photos
```bash
curl "https://api.unsplash.com/users/USERNAME/photos?per_page=10" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

## Working with Images

### Image URLs
Every photo response includes these URLs:
```json
{
  "urls": {
    "raw": "https://images.unsplash.com/photo-xxx?ixid=xxx",
    "full": "...?ixid=xxx&q=80&fm=jpg",
    "regular": "...?ixid=xxx&w=1080&fit=max",
    "small": "...?w=400&fit=max",
    "thumb": "...?w=200&fit=max"
  }
}
```

### Dynamic Resizing
Add parameters to any image URL (keep the `ixid` parameter!):
- `w=1500`: Set width
- `h=800`: Set height
- `dpr=2`: Device pixel ratio
- `q=75`: Quality (1-100)
- `fm=jpg`: Format (jpg, png, webp, avif)
- `fit=crop`: Fit mode (crop, max, clip)
- `crop=entropy`: Crop mode

**Example:**
```
https://images.unsplash.com/photo-xxx?ixid=xxx&w=1500&h=1000&fit=crop&q=85
```

### BlurHash Placeholders
Each photo includes a `blur_hash` field - a compact string representation for showing blurred placeholders while images load.
```json
{
  "blur_hash": "LoC%a7IoIVxZ_NM|M{s:%hRjWAo0"
}
```

## Response Structure

### Photo Object (abbreviated)
```json
{
  "id": "LBI7cgq3pbM",
  "created_at": "2016-05-03T11:00:28-04:00",
  "width": 5245,
  "height": 3497,
  "color": "#60544D",
  "blur_hash": "LoC%a7IoIVxZ_NM|M{s:%hRjWAo0",
  "description": "A man drinking coffee",
  "urls": { "raw": "...", "full": "...", "regular": "..." },
  "links": {
    "download": "...",
    "download_location": "https://api.unsplash.com/photos/xxx/download"
  },
  "user": {
    "username": "johndoe",
    "name": "John Doe",
    "profile_image": { "small": "...", "medium": "...", "large": "..." }
  }
}
```

### Search Response
```json
{
  "total": 133,
  "total_pages": 7,
  "results": [ /* array of photo objects */ ]
}
```

## 最佳实践

### Attribution
Always attribute photos to their creators:
```
Photo by [Name] on Unsplash
```
Link to photographer's Unsplash profile when possible.

### Download Tracking
- Call `/photos/:id/download` before allowing users to download
- This is required by Unsplash API Guidelines
- Don't use it for just displaying images (that's tracked automatically via hotlinking)

### Hotlinking
- You can hotlink images directly from `images.unsplash.com`
- These don't count against rate limits
- Views are tracked automatically
- Always keep the `ixid` parameter in URLs

### Caching
- Public endpoints (search, photos) are cacheable
- Consider caching search results client-side to reduce API calls

## Quick Reference
```bash
# Store key
export UNSPLASH_ACCESS_KEY="your_key"

# Search
curl "https://api.unsplash.com/search/photos?query=ocean&per_page=5" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Random photo
curl "https://api.unsplash.com/photos/random?query=mountains" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Get photo
curl "https://api.unsplash.com/photos/PHOTO_ID" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"

# Track download (required when downloading!)
curl "https://api.unsplash.com/photos/PHOTO_ID/download" \
  -H "Authorization: Client-ID ${UNSPLASH_ACCESS_KEY}"
```

## Notes

- Base URL: `https://api.unsplash.com`
- All responses are JSON
- Pagination via `page` and `per_page` parameters
- Link headers provide first/prev/next/last page URLs
- Image requests to `images.unsplash.com` don't count against rate limits
- Keep the `ixid` parameter when using/manipulating image URLs
- For production use, apply for increased rate limits in your 仪表板

## Common Filters

### Colors
`black_and_white`, `black`, `white`, `yellow`, `orange`, `red`, `purple`, `magenta`, `green`, `teal`, `blue`

### Orientations
`landscape`, `portrait`, `squarish`

### Sort Options
- Photos: `latest`, `oldest`, `popular`
- Search: `relevant`, `latest`

## 错误处理

- `401 Unauthorized`: Invalid or missing access key
- `403 Forbidden`: Rate limit exceeded or forbidden action
- `404 Not Found`: Photo/user/collection doesn't exist

Check `X-Ratelimit-Remaining` header to monitor your rate limit status.