Files
2025-11-30 08:51:04 +08:00

381 lines
10 KiB
Markdown

---
name: tumblr
description: Tumblr API Development and Integration
---
# Tumblr API Skill
Comprehensive assistance with Tumblr API development, authentication, and integration. This skill provides practical guidance for building applications that interact with Tumblr's platform.
## When to Use This Skill
This skill should be triggered when:
- Integrating with the Tumblr API (any version)
- Implementing OAuth 1.0a or OAuth 2.0 authentication for Tumblr
- Working with Tumblr blog data, posts, likes, or followers
- Building Tumblr clients, dashboard tools, or analytics applications
- Debugging Tumblr API requests or responses
- Understanding Tumblr's Neue Post Format (NPF) or legacy post types
- Managing rate limits or API quotas
- Handling Tumblr webhooks or real-time updates
## Quick Reference
### 1. Fetch Blog Information
Retrieve basic blog metadata including title, description, and post count:
```bash
curl -H 'User-Agent: MyApp/1.0' \
'https://api.tumblr.com/v2/blog/staff.tumblr.com/info?api_key=YOUR_API_KEY'
```
**Response includes:** Blog title, URL, post count, description, avatar, theme settings.
### 2. Get Recent Posts
Retrieve the 5 most recent posts from a blog:
```bash
curl -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
'https://api.tumblr.com/v2/blog/staff.tumblr.com/posts?limit=5'
```
**Query parameters:**
- `limit`: 1-20 posts per request
- `offset`: Pagination offset
- `tag`: Filter by tag
- `npf=true`: Request Neue Post Format
### 3. OAuth 2.0 Token Exchange
Exchange authorization code for access token:
```bash
curl -X POST https://api.tumblr.com/v2/oauth2/token \
-F grant_type=authorization_code \
-F code=YOUR_AUTH_CODE \
-F client_id=YOUR_CONSUMER_KEY \
-F client_secret=YOUR_CONSUMER_SECRET
```
**Scopes:** `basic`, `write`, `offline_access`
### 4. Get Blog Avatar
Fetch blog avatar image URL:
```bash
curl 'https://api.tumblr.com/v2/blog/staff.tumblr.com/avatar/128'
```
**Available sizes:** 16, 24, 30, 40, 48, 64, 96, 128, 512 (default: 64)
### 5. Retrieve Liked Posts
Get posts liked by a blog:
```bash
curl -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
'https://api.tumblr.com/v2/blog/staff.tumblr.com/likes?limit=20&offset=0'
```
**Parameters:** `limit`, `offset`, `before` (timestamp), `after` (timestamp)
### 6. Queue Management
Retrieve queued posts:
```bash
curl -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
'https://api.tumblr.com/v2/blog/myblog.tumblr.com/posts/queue'
```
Reorder queue:
```bash
curl -X POST https://api.tumblr.com/v2/blog/myblog.tumblr.com/posts/queue/reorder \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-d 'post_id=123456789'
```
### 7. Get Followers
Retrieve blog followers:
```bash
curl -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
'https://api.tumblr.com/v2/blog/myblog.tumblr.com/followers'
```
**Response includes:** Total follower count, follower blog objects with names and URLs.
### 8. Filter Posts by Tag
Retrieve posts with specific tag:
```bash
curl -H 'User-Agent: MyApp/1.0' \
'https://api.tumblr.com/v2/blog/staff.tumblr.com/posts?api_key=YOUR_KEY&tag=photography&limit=10'
```
### 9. Standard API Response Format
All Tumblr API responses follow this structure:
```json
{
"meta": {
"status": 200,
"msg": "OK"
},
"response": {
"blog": { },
"posts": [ ]
}
}
```
### 10. Working with Blog Identifiers
Three interchangeable identifier formats:
```bash
# Blog name
/v2/blog/staff/info
# Hostname
/v2/blog/staff.tumblr.com/info
# UUID (stable, persistent)
/v2/blog/t:0aY0xL2Fi1OFJg4YxpmegQ/info
```
**Recommendation:** Use UUID for long-term stability (survives blog renames).
## Key Concepts
### Authentication Levels
1. **None** - Public endpoints (blog info, public posts) require no authentication
2. **API Key** - Use OAuth Consumer Key as `api_key` query parameter
3. **OAuth** - Signed requests using OAuth 1.0a or OAuth 2.0 for user-specific data
### Rate Limits
**Per IP Address:**
- 300 calls/minute
- 18,000 calls/hour
- 432,000 calls/day
**Per Consumer Key:**
- 1,000 calls/hour
- 5,000 calls/day
**Action Limits:**
- 250 posts/day
- 200 follows/day
- 1,000 likes/day
### Post Formats
**Legacy Post Types:**
- Text, Photo, Quote, Link, Chat, Audio, Video, Answer
**Neue Post Format (NPF):**
- Modern block-based format
- Posts with `type: blocks` or `is_blocks_post_format: true`
- Request with `npf=true` parameter
- Contains `content` (blocks), `layout` (specifications), `trail` (reblog chain)
### Post IDs
Post IDs are 64-bit integers. **Important:** Use `id_string` field for JavaScript or languages with unsafe integer handling.
### Required Headers
**User-Agent:** Mandatory for all requests. Must be consistent. Format: `AppName/Version`
**Content-Type:** Required for POST/PUT with body. Accepted:
- `application/json`
- `application/x-www-form-urlencoded`
- `multipart/form-data`
## Reference Files
This skill includes comprehensive documentation in `references/`:
- **api.md** - Complete Tumblr API documentation including:
- All authentication methods (OAuth 1.0a, OAuth 2.0, API key)
- Blog endpoints (info, posts, avatar, likes, following, followers)
- User endpoints (dashboard, likes, following)
- Post creation and management
- Queue and draft management
- Neue Post Format (NPF) specification
- Legacy post type fields
- Rate limits and best practices
- Response format documentation
Use the `view` command to read specific reference files when detailed information is needed.
## Working with This Skill
### For Beginners
1. **Start with public endpoints** - No authentication needed:
- Fetch blog info: `/v2/blog/{blog}/info?api_key={key}`
- Get public posts: `/v2/blog/{blog}/posts?api_key={key}`
2. **Register your application:**
- Visit https://www.tumblr.com/oauth/apps
- Get OAuth Consumer Key and Secret
- Use Consumer Key as `api_key` for public endpoints
3. **Test with API Console:**
- https://api.tumblr.com/console
- Interactive testing environment
### For OAuth Implementation
1. **Choose OAuth version:**
- OAuth 2.0: Modern, simpler, bearer tokens
- OAuth 1.0a: Legacy, more complex, signed requests
2. **OAuth 2.0 flow:**
- Redirect user to authorization URL with scopes
- Exchange authorization code for access token
- Use token in `Authorization: Bearer {token}` header
3. **OAuth 1.0a flow:**
- Request temporary credentials
- Redirect user to authorize
- Exchange verifier for access token
- Sign all requests with token
### For Advanced Features
1. **Neue Post Format (NPF):**
- Add `npf=true` to any post-returning endpoint
- Work with content blocks and layout objects
- Access full reblog trail
2. **Pagination:**
- Use `offset` for numeric pagination
- Use `before`/`after` with timestamps for chronological navigation
- Check `_links` object for next/previous URLs
3. **Partial responses:**
- Use `fields` parameter to specify blog object fields
- Reduces response size and improves performance
4. **JSONP support:**
- Add `jsonp=callbackName` to GET requests
- Useful for client-side JavaScript
## Common Patterns
### Authentication Flow (OAuth 2.0)
```bash
# Step 1: Redirect user to authorization URL
https://www.tumblr.com/oauth2/authorize?client_id={key}&response_type=code&scope=basic%20write&state={random}
# Step 2: User authorizes, Tumblr redirects back with code
# Your redirect URL receives: ?code={auth_code}
# Step 3: Exchange code for access token
curl -X POST https://api.tumblr.com/v2/oauth2/token \
-F grant_type=authorization_code \
-F code={auth_code} \
-F client_id={consumer_key} \
-F client_secret={consumer_secret}
# Step 4: Use access token in requests
curl -H 'Authorization: Bearer {access_token}' \
'https://api.tumblr.com/v2/user/info'
```
### Error Handling
```json
{
"meta": {
"status": 401,
"msg": "Unauthorized"
},
"response": [ ],
"errors": [
{
"title": "Unauthorized",
"code": 401,
"detail": "OAuth authentication required"
}
]
}
```
**Common status codes:**
- 200: Success
- 401: Unauthorized (missing/invalid credentials)
- 404: Not Found (blog or post doesn't exist)
- 429: Rate Limit Exceeded
- 503: Service Temporarily Unavailable
### Handling Large Post Counts
```bash
# Fetch all posts using pagination
offset=0
limit=20
while true; do
curl "https://api.tumblr.com/v2/blog/staff.tumblr.com/posts?api_key={key}&limit=${limit}&offset=${offset}"
offset=$((offset + limit))
# Check if response contains fewer than 'limit' posts, then break
done
```
## Resources
### Official Links
- **API Console:** https://api.tumblr.com/console
- **Developer Portal:** https://www.tumblr.com/docs/api/v2
- **OAuth Apps:** https://www.tumblr.com/oauth/apps
- **Support:** https://www.tumblr.com/support
### Official Clients
- JavaScript: `tumblr.js`
- Ruby: `tumblr_client`
- PHP: `tumblr/tumblr`
- Python: `pytumblr`
- Java: `jumblr`
- Objective-C: `TMTumblrSDK`
- Go: `tumblr/tumblr.go`
### Best Practices
1. **Always include User-Agent header** - Inconsistent or missing User-Agent may result in suspension
2. **Respect rate limits** - Implement exponential backoff for 429 responses
3. **Use UUIDs for blog identifiers** - More stable than blog names (survive renames)
4. **Cache blog info** - Reduce API calls by caching static blog data
5. **Use NPF for new integrations** - Legacy formats may be deprecated
6. **Handle 64-bit integers carefully** - Use `id_string` for JavaScript
7. **Validate responses** - Check `meta.status` before processing `response`
## Notes
- This skill was generated from official Tumblr API documentation
- All endpoints use base URL: `https://api.tumblr.com`
- API version is included in path: `/v2/`
- HTTPS is required for all API requests
- Reference files preserve structure and examples from source docs
- Code examples include language detection for better syntax highlighting
## Updating
To refresh this skill with updated documentation:
1. Re-run the scraper with the same configuration
2. The skill will be rebuilt with the latest information from the official GitHub repository