Goondex/docs/TPDB_INTEGRATION.md
Team Goon 65af261fe5 Anonymize documentation for discretion
- Removed specific git clone URL from README
- Removed example import path with repository details
- Removed issues tracker URL
- Maintained Go import paths (required for builds)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-14 22:06:56 -05:00

322 lines
8.0 KiB
Markdown

# ThePornDB Integration Guide
## Overview
Goondex integrates with [ThePornDB](https://theporndb.net) (TPDB) to fetch high-quality metadata for performers, studios, and scenes. TPDB is a community-driven database similar to IMDB but for adult content.
## Prerequisites
### 1. TPDB Account
1. Register at https://theporndb.net/register
2. Verify your email
3. Log in to your account
### 2. API Token
1. Navigate to https://theporndb.net/user/api-tokens
2. Click "Create New Token"
3. Give it a name (e.g., "Goondex")
4. Copy the generated token
5. **Save it securely** - it won't be shown again
### 3. Set Environment Variable
```bash
# Linux/macOS (add to ~/.bashrc or ~/.zshrc for persistence)
export TPDB_API_KEY="your-api-key-here"
# Windows (PowerShell)
$env:TPDB_API_KEY="your-api-key-here"
# Windows (CMD)
set TPDB_API_KEY=your-api-key-here
```
## API Endpoints
Goondex uses the following TPDB API endpoints:
| Endpoint | Method | Purpose |
|----------|--------|---------|
| `/performers` | GET | Search for performers |
| `/performers/{id}` | GET | Get performer by ID |
| `/sites` | GET | Search for studios/sites |
| `/sites/{id}` | GET | Get studio by ID |
| `/scenes` | GET | Search for scenes |
| `/scenes/{id}` | GET | Get scene by ID |
**Base URL**: `https://api.theporndb.net`
**Authentication**: Bearer token in `Authorization` header
## Data Mapping
### Performer Fields
| TPDB Field | Goondex Field | Notes |
|------------|---------------|-------|
| `id` | `source_id` | TPDB ID stored as source reference |
| `name` | `name` | Primary name |
| `aliases` | `aliases` | Comma-separated alternative names |
| `nationality` | `nationality` + `country` | Both fields populated |
| `gender` | `gender` | male/female/trans/other |
| `image` | `image_url` | Poster image URL |
| `bio` | `bio` | Biography text |
**Additional TPDB fields** (available but not currently stored):
- `birthday`, `astrology`, `birthplace`
- `ethnicity`, `eye_color`, `hair_color`
- `height`, `weight`, `measurements`
- `tattoo_description`, `piercing_description`
- `boob_job`, `active`
### Studio Fields
| TPDB Field | Goondex Field | Notes |
|------------|---------------|-------|
| `id` | `source_id` | TPDB ID |
| `name` | `name` | Studio/site name |
| `description` | `description` | About the studio |
| `logo` | `image_url` | Logo image URL |
| `parent.id` | `parent_id` | Parent network ID (not yet implemented) |
| `url` | - | Currently stored in description |
### Scene Fields
| TPDB Field | Goondex Field | Notes |
|------------|---------------|-------|
| `id` | `source_id` | TPDB ID |
| `uuid` | - | Not stored |
| `title` | `title` | Scene title |
| `description` | `description` | Scene synopsis |
| `url` | `url` | Scene URL |
| `date` | `date` | Release date (ISO 8601) |
| `image` | `image_url` | Cover image URL |
| `director` | `director` | Director name |
| `code` | `code` | DVD code or scene identifier |
| `site.id` | `studio_id` | References studios table |
| `performers[]` | Scene-performer relationship | Many-to-many |
| `tags[]` | Scene-tag relationship | Many-to-many |
**Additional TPDB fields** (available but not currently stored):
- `poster`, `duration`
## Usage Examples
### Import a Performer
```bash
# Search and import Riley Reid
export TPDB_API_KEY="your-key"
goondex import performer "Riley Reid"
```
**What happens**:
1. Goondex queries TPDB API: `GET /performers?q=Riley+Reid`
2. TPDB returns matching performers (usually 1 exact match)
3. Goondex maps TPDB fields to internal model
4. Data is inserted into local SQLite database
5. Local ID is assigned and reported
### Import a Studio
```bash
# Import Brazzers
goondex import studio "Brazzers"
```
**What happens**:
1. Query: `GET /sites?q=Brazzers`
2. TPDB returns matching sites
3. Studios are created in local database
### Import a Scene
```bash
# Import a scene
goondex import scene "Big Wet Butts 24"
```
**What happens**:
1. Query: `GET /scenes?q=Big+Wet+Butts+24`
2. TPDB returns matching scenes with embedded performers, studio, and tags
3. **Studio** is imported/updated first
4. **Scene** is created with reference to studio
5. **Performers** are imported/updated
6. **Tags** are imported/updated
7. **Relationships** are created in junction tables
## API Rate Limiting
TPDB implements rate limiting to prevent abuse.
### Current Limits (as of 2024)
- **Requests per minute**: ~60
- **Requests per hour**: ~1000
### Best Practices
1. **Batch imports**: Import multiple items at once instead of one-by-one
2. **Cache locally**: Don't re-import already imported items
3. **Error handling**: Implement exponential backoff on 429 errors
### Handling Rate Limits
If you receive a `429 Too Many Requests` response:
```bash
# Wait 60 seconds
sleep 60
# Retry the command
goondex import performer "Riley Reid"
```
## Response Format
### Standard Response Wrapper
```json
{
"data": { ... }, // Single object or array
"meta": { // Optional pagination
"current_page": 1,
"from": 1,
"last_page": 5,
"per_page": 25,
"to": 25,
"total": 100
}
}
```
### Performer Response Example
```json
{
"data": {
"id": "12345",
"name": "Riley Reid",
"slug": "riley-reid",
"gender": "female",
"aliases": "Paige Riley",
"nationality": "US",
"image": "https://cdn.theporndb.net/performers/riley-reid.jpg",
"bio": "Riley Reid is an American adult film actress..."
}
}
```
### Scene Response Example
```json
{
"data": {
"id": "54321",
"uuid": "abc-def-123",
"title": "Big Wet Butts 24",
"date": "2024-01-15",
"description": "Riley Reid stars in...",
"code": "BWB-024",
"image": "https://cdn.theporndb.net/scenes/bwb-024.jpg",
"site": {
"id": "100",
"name": "Brazzers",
"url": "https://brazzers.com"
},
"performers": [
{
"id": "12345",
"name": "Riley Reid",
"gender": "female"
}
],
"tags": [
{
"id": "1",
"name": "Anal",
"slug": "anal"
}
]
}
}
```
## Error Handling
### Common HTTP Status Codes
| Code | Meaning | Solution |
|------|---------|----------|
| 200 | Success | No action needed |
| 401 | Unauthorized | Check API key |
| 404 | Not Found | Item doesn't exist in TPDB |
| 429 | Too Many Requests | Wait and retry |
| 500 | Server Error | TPDB issue, wait and retry |
### Goondex Error Messages
```bash
# Missing API key
Error: TPDB_API_KEY environment variable is not set
# API error
Error: failed to search TPDB: API returned status 401
# No results
No performers found on TPDB
```
## Advanced Usage
### Searching by ID
While Goondex doesn't currently expose this via CLI, you can fetch by TPDB ID programmatically by importing the TPDB scraper package and calling GetPerformerByID, GetStudioByID, or GetSceneByID.
### Pagination
TPDB returns paginated results. Goondex currently fetches only the first page (default 25 results). Future versions will support pagination.
## Data Quality
### TPDB Strengths
- ✅ High-quality, curated performer data
- ✅ Comprehensive scene metadata
- ✅ Studio/network relationships
- ✅ Active community maintenance
- ✅ Regular updates
### Known Limitations
- ⚠️ Not all performers have complete bio data
- ⚠️ Some older scenes may have limited metadata
- ⚠️ Parent studio relationships not always populated
- ⚠️ Image URLs may expire or change
## Future Enhancements
### v0.2.x
- **Incremental updates**: Re-import to update changed data
- **Image caching**: Download and cache images locally
- **Pagination support**: Fetch all pages of results
### v0.3.x
- **Scheduled syncing**: Automatic daily/weekly updates
- **Duplicate detection**: Merge duplicate entries
- **Conflict resolution**: Handle data conflicts intelligently
### v0.4.x
- **Multi-source priority**: Combine TPDB with other sources
- **Manual overrides**: User-edited fields protected from updates
## API Documentation
Official TPDB API documentation:
- https://api.theporndb.net/docs
## Support
For TPDB-related issues:
- **TPDB Discord**: https://discord.gg/theporndb
- **TPDB GitHub**: https://github.com/ThePornDatabase