Base code
This commit is contained in:
170
backend/services/integrations/README.md
Normal file
170
backend/services/integrations/README.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# WordPress Integration Service
|
||||
|
||||
A comprehensive WordPress integration service for ALwrity that enables seamless content publishing to WordPress sites.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Components
|
||||
|
||||
1. **WordPressService** (`wordpress_service.py`)
|
||||
- Manages WordPress site connections
|
||||
- Handles site credentials and authentication
|
||||
- Provides site management operations
|
||||
|
||||
2. **WordPressContentManager** (`wordpress_content.py`)
|
||||
- Manages WordPress content operations
|
||||
- Handles media uploads and compression
|
||||
- Manages categories, tags, and posts
|
||||
- Provides WordPress REST API interactions
|
||||
|
||||
3. **WordPressPublisher** (`wordpress_publisher.py`)
|
||||
- High-level publishing service
|
||||
- Orchestrates content creation and publishing
|
||||
- Manages post references and tracking
|
||||
|
||||
## Features
|
||||
|
||||
### Site Management
|
||||
- ✅ Connect multiple WordPress sites
|
||||
- ✅ Site credential management
|
||||
- ✅ Connection testing and validation
|
||||
- ✅ Site disconnection
|
||||
|
||||
### Content Publishing
|
||||
- ✅ Blog post creation and publishing
|
||||
- ✅ Media upload with compression
|
||||
- ✅ Category and tag management
|
||||
- ✅ Featured image support
|
||||
- ✅ SEO metadata (meta descriptions)
|
||||
- ✅ Draft and published status control
|
||||
|
||||
### Advanced Features
|
||||
- ✅ Image compression for better performance
|
||||
- ✅ Automatic category/tag creation
|
||||
- ✅ Post status management
|
||||
- ✅ Post deletion and updates
|
||||
- ✅ Publishing history tracking
|
||||
|
||||
## Database Schema
|
||||
|
||||
### WordPress Sites Table
|
||||
```sql
|
||||
CREATE TABLE wordpress_sites (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT NOT NULL,
|
||||
site_url TEXT NOT NULL,
|
||||
site_name TEXT,
|
||||
username TEXT NOT NULL,
|
||||
app_password TEXT NOT NULL,
|
||||
is_active BOOLEAN DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(user_id, site_url)
|
||||
);
|
||||
```
|
||||
|
||||
### WordPress Posts Table
|
||||
```sql
|
||||
CREATE TABLE wordpress_posts (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT NOT NULL,
|
||||
site_id INTEGER NOT NULL,
|
||||
wp_post_id INTEGER NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
status TEXT DEFAULT 'draft',
|
||||
published_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (site_id) REFERENCES wordpress_sites (id)
|
||||
);
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Basic Site Connection
|
||||
```python
|
||||
from backend.services.integrations import WordPressService
|
||||
|
||||
wp_service = WordPressService()
|
||||
success = wp_service.add_site(
|
||||
user_id="user123",
|
||||
site_url="https://mysite.com",
|
||||
site_name="My Blog",
|
||||
username="admin",
|
||||
app_password="xxxx-xxxx-xxxx-xxxx"
|
||||
)
|
||||
```
|
||||
|
||||
### Publishing Content
|
||||
```python
|
||||
from backend.services.integrations import WordPressPublisher
|
||||
|
||||
publisher = WordPressPublisher()
|
||||
result = publisher.publish_blog_post(
|
||||
user_id="user123",
|
||||
site_id=1,
|
||||
title="My Blog Post",
|
||||
content="<p>This is my blog post content.</p>",
|
||||
excerpt="A brief excerpt",
|
||||
featured_image_path="/path/to/image.jpg",
|
||||
categories=["Technology", "AI"],
|
||||
tags=["wordpress", "automation"],
|
||||
status="publish"
|
||||
)
|
||||
```
|
||||
|
||||
### Content Management
|
||||
```python
|
||||
from backend.services.integrations import WordPressContentManager
|
||||
|
||||
content_manager = WordPressContentManager(
|
||||
site_url="https://mysite.com",
|
||||
username="admin",
|
||||
app_password="xxxx-xxxx-xxxx-xxxx"
|
||||
)
|
||||
|
||||
# Upload media
|
||||
media = content_manager.upload_media(
|
||||
file_path="/path/to/image.jpg",
|
||||
alt_text="Description",
|
||||
title="Image Title"
|
||||
)
|
||||
|
||||
# Create post
|
||||
post = content_manager.create_post(
|
||||
title="Post Title",
|
||||
content="<p>Post content</p>",
|
||||
featured_media_id=media['id'],
|
||||
status="draft"
|
||||
)
|
||||
```
|
||||
|
||||
## Authentication
|
||||
|
||||
WordPress integration uses **Application Passwords** for authentication:
|
||||
|
||||
1. Go to WordPress Admin → Users → Profile
|
||||
2. Scroll down to "Application Passwords"
|
||||
3. Create a new application password
|
||||
4. Use the generated password for authentication
|
||||
|
||||
## Error Handling
|
||||
|
||||
All services include comprehensive error handling:
|
||||
- Connection validation
|
||||
- API response checking
|
||||
- Graceful failure handling
|
||||
- Detailed logging
|
||||
|
||||
## Logging
|
||||
|
||||
The service uses structured logging with different levels:
|
||||
- `INFO`: Successful operations
|
||||
- `WARNING`: Non-critical issues
|
||||
- `ERROR`: Failed operations
|
||||
|
||||
## Security
|
||||
|
||||
- Credentials are stored securely in the database
|
||||
- Application passwords are used instead of main passwords
|
||||
- Connection testing before credential storage
|
||||
- Proper authentication for all API calls
|
||||
Reference in New Issue
Block a user