61 lines
3.0 KiB
Python
61 lines
3.0 KiB
Python
from typing import Any, Dict, List, Optional
|
|
import requests
|
|
from loguru import logger
|
|
|
|
|
|
class WixBlogService:
|
|
def __init__(self, base_url: str, client_id: Optional[str]):
|
|
self.base_url = base_url
|
|
self.client_id = client_id
|
|
|
|
def headers(self, access_token: str, extra: Optional[Dict[str, str]] = None) -> Dict[str, str]:
|
|
h: Dict[str, str] = {
|
|
'Authorization': f'Bearer {access_token}',
|
|
'Content-Type': 'application/json',
|
|
}
|
|
if self.client_id:
|
|
h['wix-client-id'] = self.client_id
|
|
if extra:
|
|
h.update(extra)
|
|
return h
|
|
|
|
def create_draft_post(self, access_token: str, payload: Dict[str, Any], extra_headers: Optional[Dict[str, str]] = None) -> Dict[str, Any]:
|
|
response = requests.post(f"{self.base_url}/blog/v3/draft-posts", headers=self.headers(access_token, extra_headers), json=payload)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def publish_draft(self, access_token: str, draft_post_id: str, extra_headers: Optional[Dict[str, str]] = None) -> Dict[str, Any]:
|
|
response = requests.post(f"{self.base_url}/blog/v3/draft-posts/{draft_post_id}/publish", headers=self.headers(access_token, extra_headers))
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def list_categories(self, access_token: str, extra_headers: Optional[Dict[str, str]] = None) -> List[Dict[str, Any]]:
|
|
response = requests.get(f"{self.base_url}/blog/v3/categories", headers=self.headers(access_token, extra_headers))
|
|
response.raise_for_status()
|
|
return response.json().get('categories', [])
|
|
|
|
def create_category(self, access_token: str, label: str, description: Optional[str] = None, language: Optional[str] = None, extra_headers: Optional[Dict[str, str]] = None) -> Dict[str, Any]:
|
|
payload: Dict[str, Any] = {'category': {'label': label}, 'fieldsets': ['URL']}
|
|
if description:
|
|
payload['category']['description'] = description
|
|
if language:
|
|
payload['category']['language'] = language
|
|
response = requests.post(f"{self.base_url}/blog/v3/categories", headers=self.headers(access_token, extra_headers), json=payload)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
def list_tags(self, access_token: str, extra_headers: Optional[Dict[str, str]] = None) -> List[Dict[str, Any]]:
|
|
response = requests.get(f"{self.base_url}/blog/v3/tags", headers=self.headers(access_token, extra_headers))
|
|
response.raise_for_status()
|
|
return response.json().get('tags', [])
|
|
|
|
def create_tag(self, access_token: str, label: str, language: Optional[str] = None, extra_headers: Optional[Dict[str, str]] = None) -> Dict[str, Any]:
|
|
payload: Dict[str, Any] = {'label': label, 'fieldsets': ['URL']}
|
|
if language:
|
|
payload['language'] = language
|
|
response = requests.post(f"{self.base_url}/blog/v3/tags", headers=self.headers(access_token, extra_headers), json=payload)
|
|
response.raise_for_status()
|
|
return response.json()
|
|
|
|
|