Skip to main content

SemanticPen Python SDK

PyPI version Python versions License: MIT

AI Article Writer & SEO Blog Generator SDK - Professional Python library for automated content creation, AI-powered article generation, and SEO blog writing with SemanticPen.

🚀 Features

  • AI-Powered Article Generation: Generate high-quality articles from keywords
  • SEO Optimization: Built-in SEO best practices and optimization
  • Bulk Operations: Generate multiple articles simultaneously
  • Real-time Status Tracking: Monitor article generation progress
  • Type Safety: Full typing support with dataclasses and type hints
  • Error Handling: Comprehensive error handling and retry mechanisms
  • Async Support: Built for high-performance applications
  • Flexible Configuration: Customizable settings for different use cases

📦 Installation

pip install semanticpen

🔑 Quick Start

Basic Usage

from semanticpen import SemanticPenClient

# Initialize client
client = SemanticPenClient.create("your-api-key")

# Generate a single article
result = client.generate_article("Python programming best practices")
print(f"Article ID: {result['articleId']}")
print(f"Project ID: {result['projectId']}")
print(f"Message: {result['message']}")

# Check article status
status = client.get_article_status(result['articleId'])
print(f"Status: {status['status']}")
print(f"Complete: {status['isComplete']}")

Advanced Configuration

from semanticpen import SemanticPenClient, SemanticPenConfig

# Custom configuration
config = SemanticPenConfig(
    api_key="your-api-key",
    base_url="https://www.semanticpen.com",
    timeout=60000,  # 60 seconds
    debug=True
)

client = SemanticPenClient.create_with_config(config)

📝 Core Features

1. Article Generation

Single Article

# Simple generation
result = client.generate_article("AI in healthcare")

# With options
result = client.generate_article(
    "Machine learning algorithms",
    gpt_version="gpt-4",
    project_name="AI Blog Series",
    preset_id="seo-optimized"
)

Bulk Generation

keywords = [
    "Python web development",
    "Django best practices", 
    "FastAPI tutorial"
]

results = client.generate_articles(keywords)
print(f"Successfully generated: {results.success_count}")
print(f"Failed: {results.failure_count}")

2. Article Retrieval

# Get complete article
article = client.get_article("article-id")
print(f"Title: {article.title}")
print(f"Content: {article.article_html}")
print(f"Status: {article.status}")

# Get multiple articles
article_ids = ["id1", "id2", "id3"]
results = client.get_articles(article_ids)

for article in results.successful:
    print(f"Article: {article.title}")

3. Status Monitoring

# Quick completion check
is_complete = client.is_article_complete("article-id")

# Detailed status
status = client.get_article_status("article-id")
print(f"Status: {status['status']}")
print(f"Complete: {status['isComplete']}")
print(f"Has Error: {status['hasError']}")

4. Waiting for Completion

from semanticpen import PollingConfig

# Generate and wait for completion
article = client.generate_and_wait(
    "Content marketing strategies",
    polling_config=PollingConfig(
        interval=5000,  # Check every 5 seconds
        max_attempts=60  # Max 5 minutes
    )
)

print(f"Completed article: {article.title}")
print(f"Content length: {len(article.article_html)}")

5. Bulk Operations with Progress Tracking

def progress_callback(completed, total, new_articles):
    print(f"Progress: {completed}/{total} articles completed")
    for article in new_articles:
        print(f"  ✓ {article.title}")

# Generate multiple articles and wait
result = client.generate_bulk_and_wait(
    ["Topic 1", "Topic 2", "Topic 3"],
    on_progress=progress_callback
)

print(f"Successful: {len(result['successful'])}")
print(f"Failed: {len(result['failed'])}")
print(f"Total time: {result['total_time']:.2f} seconds")

🏗️ Advanced Usage

Request Builder Pattern

# Complex article generation with builder pattern
builder = client.create_request_builder()

articles = (builder
    .keyword(["AI ethics", "Machine learning bias"])
    .gpt_version("gpt-4")
    .project_name("AI Ethics Series")
    .preset("academic")
    .parameter("tone", "professional")
    .parameter("target_audience", "researchers")
    .generate_and_wait())

print(f"Generated {len(articles)} articles")

Error Handling

from semanticpen import (
    AuthenticationError,
    ValidationError, 
    RateLimitError,
    NetworkError,
    TimeoutError
)

try:
    result = client.generate_article("Python tutorials")
except AuthenticationError:
    print("Invalid API key")
except ValidationError as e:
    print(f"Invalid input: {e}")
except RateLimitError as e:
    print(f"Rate limit exceeded. Retry after: {e.retry_after}s")
except NetworkError:
    print("Network connection failed")
except TimeoutError:
    print("Request timed out")

Custom Polling Configuration

from semanticpen import PollingConfig

# Custom polling behavior
custom_polling = PollingConfig(
    interval=3000,        # Poll every 3 seconds
    max_attempts=100,     # Try for up to 100 times
    backoff_multiplier=1.2  # Increase interval by 20% each time
)

article = client.wait_for_article(
    "article-id",
    polling_config=custom_polling
)

🔧 Configuration Options

SemanticPenConfig

Parameter Type Default Description
api_key str Required Your SemanticPen API key
base_url str "https://www.semanticpen.com" API base URL
timeout int 30000 Request timeout in milliseconds
debug bool False Enable debug logging

PollingConfig

Parameter Type Default Description
interval int 5000 Polling interval in milliseconds
max_attempts int 60 Maximum polling attempts
backoff_multiplier float 1.0 Exponential backoff multiplier

📊 Response Types

Article

@dataclass
class Article:
    id: str
    organization_id: str
    user_id: str
    project_id: str
    target_keyword: str
    status: ArticleStatusEnum
    created_at: str
    updated_at: str
    article_html: Optional[str] = None
    content: Optional[str] = None
    title: Optional[str] = None
    metadata: Optional[Dict[str, Any]] = None
    completed_at: Optional[str] = None
    error_message: Optional[str] = None

BulkOperationResult

@dataclass
class BulkOperationResult:
    successful: List[Any]
    failed: List[Dict[str, Any]]
    total: int
    success_count: int
    failure_count: int

🧪 Testing

# Test API connection
if client.test_connection():
    print("✓ Connected to SemanticPen API")
else:
    print("✗ Connection failed")

# Validate keywords
validation = SemanticPenClient.validate_keywords([
    "Valid keyword",
    "",  # Invalid
    "Another valid keyword"
])

if validation["valid"]:
    print("All keywords are valid")
else:
    print(f"Validation errors: {validation['errors']}")

📚 API Reference

SemanticPenClient Methods

Method Description
create(api_key, **options) Create client with API key
test_connection() Test API connectivity
generate_article(keyword, **options) Generate single article
generate_articles(keywords, **options) Generate multiple articles
get_article(article_id) Retrieve article by ID
get_articles(article_ids) Retrieve multiple articles
is_article_complete(article_id) Check if article is complete
get_article_status(article_id) Get article status
wait_for_article(article_id, **options) Wait for article completion
generate_and_wait(keyword, **options) Generate and wait workflow

🌟 Examples

See the examples/ directory for complete examples:

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🔗 Links

💡 Need Help?


Made with ❤️ by the SemanticPen team

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

semanticpen-1.0.0.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

semanticpen-1.0.0-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

Details for the file semanticpen-1.0.0.tar.gz.

File metadata

  • Download URL: semanticpen-1.0.0.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.0

File hashes

Hashes for semanticpen-1.0.0.tar.gz
Algorithm Hash digest
SHA256 b8446b2b9a2c6dd98913bd4274254b0f0abfb4769c8bbcf823f64097bf696bee
MD5 5bd2d10594e725616c839e17c670cd6c
BLAKE2b-256 77cc167cd438b237085213fbd0bf49a717a44fe05c9c4e27a01d472aada39c5c

See more details on using hashes here.

File details

Details for the file semanticpen-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: semanticpen-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.0

File hashes

Hashes for semanticpen-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a8ced2467b4dfdaaae6b3793fb06676b8965ff7eef9b0ff53e04f9b3384700c6
MD5 cbcaaa0f3f2f11befbdfa457cd2efc7e
BLAKE2b-256 784b19af6a68c626561c3583555aff6afb34579a1a19cdbd2e7e68d0f49d34e2

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page