scitex.social API Reference
Socialia - Unified social media management: posting, analytics, and insights.
- class scitex.social.Twitter(consumer_key=None, consumer_secret=None, access_token=None, access_token_secret=None, *, session_factory=None, read_backend=None, read_username=None)[source]
Bases:
TwitterGrowthMixin,_BaseTwitter/X API v2 client using OAuth 1.0a.
- MAX_TWEET_LENGTH = 280
- POST_ENDPOINT = 'https://api.x.com/2/tweets'
- DELETE_ENDPOINT = 'https://api.x.com/2/tweets/{tweet_id}'
- ME_ENDPOINT = 'https://api.x.com/2/users/me'
- USER_TWEETS_ENDPOINT = 'https://api.x.com/2/users/{user_id}/tweets'
- USER_MENTIONS_ENDPOINT = 'https://api.x.com/2/users/{user_id}/mentions'
- SEARCH_ENDPOINT = 'https://api.x.com/2/tweets/search/recent'
- MEDIA_UPLOAD_ENDPOINT = 'https://upload.twitter.com/1.1/media/upload.json'
- USER_BY_USERNAME_ENDPOINT = 'https://api.x.com/2/users/by/username/{username}'
- FOLLOW_ENDPOINT = 'https://api.x.com/2/users/{source_user_id}/following'
- UNFOLLOW_ENDPOINT = 'https://api.x.com/2/users/{source_user_id}/following/{target_user_id}'
- validate_read_credentials()[source]
Check if read operations can use OAuth or the optional read backend.
- Return type:
- upload_media(file_path)[source]
Upload media file to Twitter (images and videos).
Automatically detects file type and uses: - Simple upload for images (jpg, png, gif, webp) - Chunked upload for videos (mp4, mov)
- post(text, reply_to=None, quote_tweet_id=None, media_ids=None)[source]
Post a tweet.
- Parameters:
- Return type:
- Returns:
dict with ‘success’, ‘id’, ‘url’ or ‘error’
- me()[source]
Get authenticated user information.
- Return type:
- Returns:
dict with ‘success’, ‘id’, ‘username’, ‘name’ or ‘error’
- class scitex.social.LinkedIn(access_token=None, client_id=None, client_secret=None, *, http=None)[source]
Bases:
_BaseLinkedIn API client using OAuth 2.0.
- BASE_URL = 'https://api.linkedin.com/v2'
- ME_ENDPOINT = 'https://api.linkedin.com/v2/me'
- USERINFO_ENDPOINT = 'https://api.linkedin.com/v2/userinfo'
- UGC_POSTS_ENDPOINT = 'https://api.linkedin.com/v2/ugcPosts'
- POSTS_ENDPOINT = 'https://api.linkedin.com/v2/posts'
- SHARES_ENDPOINT = 'https://api.linkedin.com/v2/shares'
- me()[source]
Get authenticated user information.
- Return type:
- Returns:
dict with ‘success’, user info or ‘error’
- class scitex.social.Reddit(client_id=None, client_secret=None, username=None, password=None, user_agent=None)[source]
Bases:
_BaseReddit API client using PRAW (Python Reddit API Wrapper).
- platform_name = 'reddit'
- post(text, subreddit='test', title=None, url=None, flair_id=None)[source]
Post to a subreddit.
- me()[source]
Get authenticated user information.
- Return type:
- Returns:
dict with ‘success’, user info or ‘error’
- class scitex.social.Slack(bot_token=None, default_channel=None)[source]
Bases:
_BaseSlack Web API client for posting to channels.
- API_BASE = 'https://slack.com/api'
- POST_MESSAGE_ENDPOINT = 'https://slack.com/api/chat.postMessage'
- DELETE_MESSAGE_ENDPOINT = 'https://slack.com/api/chat.delete'
- UPDATE_MESSAGE_ENDPOINT = 'https://slack.com/api/chat.update'
- CONVERSATIONS_HISTORY_ENDPOINT = 'https://slack.com/api/conversations.history'
- AUTH_TEST_ENDPOINT = 'https://slack.com/api/auth.test'
- USERS_INFO_ENDPOINT = 'https://slack.com/api/users.info'
- post(text, channel=None, thread_ts=None, unfurl_links=True, unfurl_media=True)[source]
Post a message to a Slack channel.
- Parameters:
- Return type:
- Returns:
dict with ‘success’, ‘id’, ‘ts’, ‘channel’ or ‘error’
- class scitex.social.YouTube(client_secrets_file=None, token_file=None)[source]
Bases:
_BaseYouTube API client for video uploads and management.
- Environment Variables:
YOUTUBE_CLIENT_SECRETS_FILE: Path to OAuth client secrets JSON YOUTUBE_TOKEN_FILE: Path to store OAuth tokens (default: runtime/youtube_token.json)
- post(text, video_path=None, title=None, description=None, tags=None, category_id='22', privacy_status='public', thumbnail_path=None)[source]
Upload a video or create a community post.
- Parameters:
text (
str) – Description text (or community post text if no video)video_path (
Optional[str]) – Path to video file (required for video upload)title (
Optional[str]) – Video title (uses first line of text if not provided)description (
Optional[str]) – Video description (uses text if not provided)category_id (
str) – YouTube category ID (default: 22 = People & Blogs)privacy_status (
str) – ‘public’, ‘private’, or ‘unlisted’thumbnail_path (
Optional[str]) – Path to custom thumbnail image
- Return type:
- Returns:
dict with ‘success’, ‘id’, ‘url’ or ‘error’
- update(video_id, title=None, description=None, tags=None, privacy_status=None)[source]
Update video metadata.
- Parameters:
- Return type:
- Returns:
dict with ‘success’ or ‘error’
- class scitex.social.GoogleAnalytics(measurement_id=None, api_secret=None, property_id=None, *, http=None)[source]
Bases:
objectGoogle Analytics 4 integration.
Supports:
Measurement Protocol (sending events)
Data API (retrieving metrics) - requires service account
Environment Variables (use branded prefix, e.g.
SOCIALIA_):GOOGLE_ANALYTICS_MEASUREMENT_ID– GA4 Measurement ID (G-XXXXXXXXXX)GOOGLE_ANALYTICS_API_SECRET– Measurement Protocol API secretGOOGLE_ANALYTICS_PROPERTY_ID– Property ID (numeric, for Data API)GOOGLE_APPLICATION_CREDENTIALS– Path to service account JSON (for Data API)
- __init__(measurement_id=None, api_secret=None, property_id=None, *, http=None)[source]
Initialize Google Analytics client.
- Parameters:
measurement_id (
Optional[str]) – GA4 Measurement ID (G-XXXXXXXXXX)api_secret (
Optional[str]) – Measurement Protocol API secretproperty_id (
Optional[str]) – GA4 Property ID (numeric, for Data API)http (
Optional[Any]) – Injectable requests-shaped HTTP client (exposespost); production code leaves thisNoneand therequestsmodule is used. Tests pass a hand-rolled fake.
- validate_credentials()[source]
Check which features are available based on credentials.
- Return type:
- track_event(name, params=None, client_id=None, user_id=None)[source]
Send event to Google Analytics via Measurement Protocol.
- Parameters:
- Return type:
- Returns:
dict with ‘success’ and details
Example
ga.track_event('social_post', { 'platform': 'twitter', 'post_id': '123456', 'content_length': 280, })
- track_social_post(platform, post_id, content_type='text', success=True)[source]
Track a social media post event.
- get_realtime_users()[source]
Get realtime active users (requires Data API setup).
- Return type:
- Returns:
dict with ‘success’ and ‘active_users’ count
- scitex.social.move_to_scheduled(filepath)[source]
Move file from drafts/ to scheduled/ directory.
Returns new path if moved, None if no scheduled/ directory found.