Skip to main content
Glama
utils.py7.42 kB
import json from typing import Any import httpx from ..config import METRICOOL_USER_TOKEN network_subject_metrics = { "tiktok": { "videos": [ "videos", "views", "comments", "shares", "interactions", "likes", "reach", "engagement", "impressionSources", "averageVideoViews" ], "account": [ "video_views", "profile_views", "followers_count", "followers_delta_count", "likes", "comments", "shares" ] }, "pinterest": { "pins": [ "impression", "save", "pin_click", "outbound_click", "video_mrc_view", "video_avg_watch_time", "video_v50_watch_time", "quartile_95_percent_view", "pins" ], "account": [ "followers", "following", "delta followers", "IMPRESSION", "ENGAGEMENT_RATE", "ENGAGEMENT", "PIN_CLICK", "OUTBOUND_CLICK", "SAVE" ], "posts": [ "PINS" ] }, "youtube": { "videos": [ "views", "interactions", "likes", "dislikes", "comments", "shares" ], "account": [ "yttotalSubscribers", "ytestimatedRevenue", "ytVideos", "ytsubscribersGained", "ytsubscribersLost" ] }, "facebook": { "stories": [ "storiesCount" ], "posts": [ "count", "interactions", "engagement", "impressionsunique", "impressions", "clicks", "comments", "shares", "reactions" ], "reels": [ "blue_reels_play_count", "post_impressions_unique", "post_video_likes_by_reaction_type", "post_video_social_actions", "engagement", "count" ], "account": [ "page_posts_impressions", "page_actions_post_reactions_total", "postsCount", "postsInteractions", "likes", "pageFollows", "pageImpressions", "pageImpressions.M", "pageImpressions.F", "pageImpressions.U", "pageImpressions.13-17", "pageImpressions.18-24", "pageImpressions.25-34", "pageImpressions.35-44", "pageImpressions.45-54", "pageImpressions.55-64", "pageImpressions.65+", "pageViews" ] }, "gmb": { "business": [ "business_impressions_maps", "business_impressions_search", "business_impressions_total", "business_direction_requests", "call_clicks", "website_clicks", "clicks_total", "business_conversations", "business_bookings", "business_food_orders", "business_actions_total" ] }, "instagram": { "account": [ "email_contacts", "get_directions_clicks", "phone_call_clicks", "text_message_clicks", "clicks_total", "postsCount", "postsInteractions", "followers", "friends" ], "posts": [ "count", "interactions", "engagement", "reach", "impressions", "likes", "comments", "saves", "shares" ], "reels": [ "count", "comments", "likes", "saved", "shares", "engagement", "impressions", "reach", "interactions", "videoviews" ] }, "linkedin": { "account": [ "followers", "paidFollowers", "companyImpressions", "deltaFollowers" ], "posts": [ "posts", "clicks", "likes", "comments", "shares", "engagement", "impressions", "interactions" ], "stories": [ "inStoriesEngagement", "inStoriesInteractions", "inStoriesImpressions", "inStoriesCliks", "inStories" ] }, "threads": { "posts": [ "count", "views", "likes", "replies", "reposts", "engagement", "quotes", "interactions" ], "account": [ "followers_count", "delta_followers" ] }, "bluesky": { "posts": [ "posts_count", "interactions", "likes", "replies", "reposts", "quotes" ], "account": [ "followers_count", "follows_count", "count", "follow_event", "unfollow_event" ] }, "webpage": { "account": [ "PageViews", "SessionsCount", "Visitors", "DailyPosts", "DailyComments" ] }, "twitter": { "account": [ "twitterFollowers", "twFriends", "twTweets", "follows", "unfollows", "twEngagement", "twImpressions", "twInteractions", "twFavorites", "twRetweets", "twReplies", "twQuotes", "twProfileClicks", "twLinkClicks" ] }, "twitch": { "account": [ "TotalFollowers", "TotalSubscribers", "TotalVideos", "DeltaFollowers", "TotalTier1", "TotalTier2", "TotalTier3", "TotalGifts", "TotalViews", "TotalDuration" ] } } async def make_get_request(url: str) -> dict[str, Any] | None: """Make a get request to the Metricool API with proper error handling.""" headers = { "X-Mc-Auth": METRICOOL_USER_TOKEN, } async with httpx.AsyncClient() as client: try: response = await client.get(url, headers=headers, timeout=30.0) response.raise_for_status() return response.json() except Exception: return None async def make_post_request(url: str, data: json) -> dict[str, Any] | None: """Make a post request to the Metricool API with proper error handling.""" headers = { "X-Mc-Auth": METRICOOL_USER_TOKEN, "content-type": "application/json", "accept": "application/json" } async with httpx.AsyncClient() as client: try: response = await client.post(url, headers=headers, data=data, timeout=30.0) response.raise_for_status() return response.json() except Exception: return None async def make_put_request(url: str, data: json) -> dict[str, Any] | None: """Make a put request to the Metricool API with proper error handling.""" headers = { "X-Mc-Auth": METRICOOL_USER_TOKEN, "content-type": "application/json", "accept": "application/json" } async with httpx.AsyncClient() as client: try: response = await client.put(url, headers=headers, data=data, timeout=30.0) response.raise_for_status() return response.json() except Exception: return None async def make_patch_request(url: str, data: json) -> int | None: """Make a patch request to the Metricool API with proper error handling.""" headers = { "X-Mc-Auth": METRICOOL_USER_TOKEN, "content-type": "application/json", "accept": "application/json" } async with httpx.AsyncClient() as client: try: response = await client.patch(url, headers=headers, data=data, timeout=30.0) response.raise_for_status() return response.status_code except Exception: return None

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/metricool/mcp-metricool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server