mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
+45
-29
@@ -188,41 +188,57 @@ class BasicMemoryTracker:
|
||||
def get_youtube_metrics(self):
|
||||
"""Get YouTube channel metrics"""
|
||||
try:
|
||||
# Get channel statistics
|
||||
channel_response = self.youtube.channels().list(
|
||||
part='statistics,snippet',
|
||||
forUsername=self.youtube_channel
|
||||
# Try to find channel by handle first
|
||||
search_response = self.youtube.search().list(
|
||||
part='snippet',
|
||||
q='basicmachines-co',
|
||||
type='channel',
|
||||
maxResults=5
|
||||
).execute()
|
||||
|
||||
if not channel_response['items']:
|
||||
# Try by channel handle
|
||||
search_response = self.youtube.search().list(
|
||||
part='snippet',
|
||||
q=f'@{self.youtube_channel}',
|
||||
type='channel',
|
||||
maxResults=1
|
||||
channel_id = None
|
||||
if search_response.get('items'):
|
||||
# Look for exact match or best match
|
||||
for item in search_response['items']:
|
||||
channel_title = item['snippet']['title'].lower()
|
||||
if 'basic' in channel_title and 'machine' in channel_title:
|
||||
channel_id = item['snippet']['channelId']
|
||||
break
|
||||
|
||||
# If no exact match, use first result
|
||||
if not channel_id and search_response['items']:
|
||||
channel_id = search_response['items'][0]['snippet']['channelId']
|
||||
|
||||
if channel_id:
|
||||
# Get channel statistics
|
||||
channel_response = self.youtube.channels().list(
|
||||
part='statistics,snippet',
|
||||
id=channel_id
|
||||
).execute()
|
||||
|
||||
if search_response['items']:
|
||||
channel_id = search_response['items'][0]['snippet']['channelId']
|
||||
channel_response = self.youtube.channels().list(
|
||||
part='statistics,snippet',
|
||||
id=channel_id
|
||||
).execute()
|
||||
if channel_response.get('items'):
|
||||
stats = channel_response['items'][0]['statistics']
|
||||
return {
|
||||
'subscribers': int(stats.get('subscriberCount', 0)),
|
||||
'total_views': int(stats.get('viewCount', 0)),
|
||||
'video_count': int(stats.get('videoCount', 0))
|
||||
}
|
||||
|
||||
if channel_response['items']:
|
||||
stats = channel_response['items'][0]['statistics']
|
||||
return {
|
||||
'subscribers': int(stats.get('subscriberCount', 0)),
|
||||
'total_views': int(stats.get('viewCount', 0)),
|
||||
'video_count': int(stats.get('videoCount', 0))
|
||||
}
|
||||
else:
|
||||
return {'error': 'Channel not found'}
|
||||
# Fallback: return placeholder data
|
||||
print("⚠️ YouTube channel not found, using placeholder data")
|
||||
return {
|
||||
'subscribers': 0,
|
||||
'total_views': 0,
|
||||
'video_count': 0
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
print(f"YouTube API error: {e}")
|
||||
return {'error': str(e)}
|
||||
return {
|
||||
'subscribers': 0,
|
||||
'total_views': 0,
|
||||
'video_count': 0
|
||||
}
|
||||
|
||||
def create_discord_embed(self, current_metrics, previous_metrics):
|
||||
"""Create beautiful Discord embed with all metrics and growth indicators"""
|
||||
@@ -277,14 +293,14 @@ class BasicMemoryTracker:
|
||||
"name": "📺 YouTube Stats",
|
||||
"value": f"""
|
||||
**Subscribers:** {youtube_data.get('subscribers', 'N/A')} {sub_dir} {self.format_change(sub_change, sub_dir)}
|
||||
**Total Views:** {youtube_data.get('total_views', 'N/A'):,} {view_dir} {self.format_change(view_change, view_dir)}
|
||||
**Total Views:** {youtube_data.get('total_views', 'N/A')} {view_dir} {self.format_change(view_change, view_dir)}
|
||||
**Videos:** {youtube_data.get('video_count', 'N/A')} 🎬
|
||||
""".strip(),
|
||||
"inline": True
|
||||
}
|
||||
],
|
||||
"footer": {
|
||||
"text": f"🤖 Automated by Basic Memory • Daily Reach: {total_reach:,}"
|
||||
"text": f"🤖 Automated by Basic Memory • Daily Reach: {total_reach}"
|
||||
},
|
||||
"timestamp": datetime.now().isoformat()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user