Compare commits
No commits in common. "0de6962ee7632a5d083a1e1f0751dfe3405c861e" and "b2e6a6cf1a80d65fc5999d14f2e0e382c9a1ebe1" have entirely different histories.
0de6962ee7
...
b2e6a6cf1a
@ -1257,7 +1257,7 @@ def get_creator_followers_metrics(request, creator_id=None):
|
|||||||
"""获取创作者的粉丝统计指标数据"""
|
"""获取创作者的粉丝统计指标数据"""
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime
|
||||||
|
|
||||||
# 检查creator_id是否提供
|
# 检查creator_id是否提供
|
||||||
if not creator_id:
|
if not creator_id:
|
||||||
@ -1286,9 +1286,6 @@ def get_creator_followers_metrics(request, creator_id=None):
|
|||||||
|
|
||||||
if not follower_metrics:
|
if not follower_metrics:
|
||||||
# 如果没有数据,返回示例数据
|
# 如果没有数据,返回示例数据
|
||||||
from datetime import datetime, timedelta
|
|
||||||
end_date = datetime.now().date()
|
|
||||||
start_date = end_date - timedelta(days=30)
|
|
||||||
follower_data = {
|
follower_data = {
|
||||||
'gender': {
|
'gender': {
|
||||||
'female': 0,
|
'female': 0,
|
||||||
@ -1308,7 +1305,10 @@ def get_creator_followers_metrics(request, creator_id=None):
|
|||||||
'GE': 0,
|
'GE': 0,
|
||||||
'CA': 0
|
'CA': 0
|
||||||
},
|
},
|
||||||
'date_range': f"{start_date.strftime('%b %d, %Y')} - {end_date.strftime('%b %d, %Y')}"
|
'date_range': {
|
||||||
|
'start_date': '2025-03-29',
|
||||||
|
'end_date': '2025-04-28'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
# 构建粉丝统计数据
|
# 构建粉丝统计数据
|
||||||
@ -1331,7 +1331,10 @@ def get_creator_followers_metrics(request, creator_id=None):
|
|||||||
'55+': round(follower_metrics.age_55_plus_percentage, 2)
|
'55+': round(follower_metrics.age_55_plus_percentage, 2)
|
||||||
},
|
},
|
||||||
'locations': processed_locations,
|
'locations': processed_locations,
|
||||||
'date_range': f"{follower_metrics.start_date.strftime('%b %d, %Y')} - {follower_metrics.end_date.strftime('%b %d, %Y')}"
|
'date_range': {
|
||||||
|
'start_date': follower_metrics.start_date.strftime('%Y-%m-%d'),
|
||||||
|
'end_date': follower_metrics.end_date.strftime('%Y-%m-%d')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
@ -1458,7 +1461,10 @@ def get_creator_trends(request, creator_id=None):
|
|||||||
base_views = views_value
|
base_views = views_value
|
||||||
base_engagement = engagement_value
|
base_engagement = engagement_value
|
||||||
|
|
||||||
trend_data['date_range'] = f"{datetime.strptime(example_date_range[0], '%Y-%m-%d').strftime('%b %d, %Y')} - {datetime.strptime(example_date_range[-1], '%Y-%m-%d').strftime('%b %d, %Y')}"
|
trend_data['date_range'] = {
|
||||||
|
'start_date': example_date_range[0],
|
||||||
|
'end_date': example_date_range[-1]
|
||||||
|
}
|
||||||
else:
|
else:
|
||||||
# 从数据库构建趋势数据
|
# 从数据库构建趋势数据
|
||||||
trend_data = {
|
trend_data = {
|
||||||
@ -1478,7 +1484,10 @@ def get_creator_trends(request, creator_id=None):
|
|||||||
trend_data['engagement_rate'].append(round(trend.engagement_rate, 2))
|
trend_data['engagement_rate'].append(round(trend.engagement_rate, 2))
|
||||||
trend_data['dates'].append(trend.date.strftime('%Y-%m-%d'))
|
trend_data['dates'].append(trend.date.strftime('%Y-%m-%d'))
|
||||||
|
|
||||||
trend_data['date_range'] = f"{datetime.strptime(trend_data['dates'][0], '%Y-%m-%d').strftime('%b %d, %Y')} - {datetime.strptime(trend_data['dates'][-1], '%Y-%m-%d').strftime('%b %d, %Y')}"
|
trend_data['date_range'] = {
|
||||||
|
'start_date': trend_data['dates'][0] if trend_data['dates'] else start_date.strftime('%Y-%m-%d'),
|
||||||
|
'end_date': trend_data['dates'][-1] if trend_data['dates'] else end_date.strftime('%Y-%m-%d')
|
||||||
|
}
|
||||||
|
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
'code': 200,
|
'code': 200,
|
||||||
@ -2031,45 +2040,6 @@ def get_public_creators(request):
|
|||||||
creator__category__icontains=keyword
|
creator__category__icontains=keyword
|
||||||
)
|
)
|
||||||
|
|
||||||
# 观看量范围过滤,单选
|
|
||||||
views_range = request.GET.get('views_range')
|
|
||||||
if views_range and len(views_range) > 0:
|
|
||||||
views_val = views_range[0] # 单选,取第一个值
|
|
||||||
if ',' in views_val:
|
|
||||||
# 新格式: "1000,10000"
|
|
||||||
try:
|
|
||||||
views_min, views_max = views_val.split(',')
|
|
||||||
views_min = int(views_min.strip())
|
|
||||||
views_max = int(views_max.strip())
|
|
||||||
|
|
||||||
public_creators = public_creators.filter(
|
|
||||||
creator__avg_video_views__gte=views_min,
|
|
||||||
creator__avg_video_views__lte=views_max
|
|
||||||
)
|
|
||||||
except (ValueError, IndexError):
|
|
||||||
# 如果解析失败,忽略此过滤条件
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
# 兼容旧格式,保持原有逻辑
|
|
||||||
views_min, views_max = 0, float('inf')
|
|
||||||
if views_val == "0-100":
|
|
||||||
views_min, views_max = 0, 100
|
|
||||||
elif views_val == "1k-10k":
|
|
||||||
views_min, views_max = 1000, 10000
|
|
||||||
elif views_val == "10k-100k":
|
|
||||||
views_min, views_max = 10000, 100000
|
|
||||||
elif views_val == "100k-250k":
|
|
||||||
views_min, views_max = 100000, 250000
|
|
||||||
elif views_val == "250k-500k":
|
|
||||||
views_min, views_max = 250000, 500000
|
|
||||||
elif views_val == "500k+":
|
|
||||||
views_min = 500000
|
|
||||||
|
|
||||||
if views_min > 0:
|
|
||||||
public_creators = public_creators.filter(creator__avg_video_views__gte=views_min)
|
|
||||||
if views_max < float('inf'):
|
|
||||||
public_creators = public_creators.filter(creator__avg_video_views__lte=views_max)
|
|
||||||
|
|
||||||
# 获取总数据量
|
# 获取总数据量
|
||||||
total_count = public_creators.count()
|
total_count = public_creators.count()
|
||||||
|
|
||||||
@ -2964,41 +2934,39 @@ def filter_public_creators(request):
|
|||||||
# 观看量范围过滤,单选
|
# 观看量范围过滤,单选
|
||||||
views_range = filter_data.get('views_range')
|
views_range = filter_data.get('views_range')
|
||||||
if views_range and len(views_range) > 0:
|
if views_range and len(views_range) > 0:
|
||||||
views_val = views_range[0] # 单选,取第一个值
|
views_min, views_max = 0, float('inf')
|
||||||
if ',' in views_val:
|
views_val = views_range[0]
|
||||||
# 新格式: "1000,10000"
|
if views_val == "0-100":
|
||||||
try:
|
views_min, views_max = 0, 100
|
||||||
views_min, views_max = views_val.split(',')
|
elif views_val == "1k-10k":
|
||||||
views_min = int(views_min.strip())
|
views_min, views_max = 1000, 10000
|
||||||
views_max = int(views_max.strip())
|
elif views_val == "10k-100k":
|
||||||
|
views_min, views_max = 10000, 100000
|
||||||
public_creators = public_creators.filter(
|
elif views_val == "100k-250k":
|
||||||
creator__avg_video_views__gte=views_min,
|
views_min, views_max = 100000, 250000
|
||||||
creator__avg_video_views__lte=views_max
|
elif views_val == "250k-500k":
|
||||||
)
|
views_min, views_max = 250000, 500000
|
||||||
except (ValueError, IndexError):
|
elif views_val == "500k+":
|
||||||
# 如果解析失败,忽略此过滤条件
|
views_min = 500000
|
||||||
pass
|
|
||||||
else:
|
|
||||||
# 兼容旧格式,保持原有逻辑
|
|
||||||
views_min, views_max = 0, float('inf')
|
|
||||||
if views_val == "0-100":
|
|
||||||
views_min, views_max = 0, 100
|
|
||||||
elif views_val == "1k-10k":
|
|
||||||
views_min, views_max = 1000, 10000
|
|
||||||
elif views_val == "10k-100k":
|
|
||||||
views_min, views_max = 10000, 100000
|
|
||||||
elif views_val == "100k-250k":
|
|
||||||
views_min, views_max = 100000, 250000
|
|
||||||
elif views_val == "250k-500k":
|
|
||||||
views_min, views_max = 250000, 500000
|
|
||||||
elif views_val == "500k+":
|
|
||||||
views_min = 500000
|
|
||||||
|
|
||||||
if views_min > 0:
|
if views_min > 0:
|
||||||
public_creators = public_creators.filter(creator__avg_video_views__gte=views_min)
|
public_creators = public_creators.filter(creator__avg_video_views__gte=views_min)
|
||||||
if views_max < float('inf'):
|
if views_max < float('inf'):
|
||||||
public_creators = public_creators.filter(creator__avg_video_views__lte=views_max)
|
public_creators = public_creators.filter(creator__avg_video_views__lte=views_max)
|
||||||
|
|
||||||
|
# 价格区间过滤逻辑,单选
|
||||||
|
pricing = filter_data.get('pricing')
|
||||||
|
if pricing and len(pricing) > 0:
|
||||||
|
pricing_val = pricing[0]
|
||||||
|
if '-' in pricing_val:
|
||||||
|
min_price, max_price = pricing_val.split('-')
|
||||||
|
min_price = float(min_price)
|
||||||
|
max_price = float(max_price)
|
||||||
|
# 修改:根据单一定价字段判断是否在区间内
|
||||||
|
public_creators = public_creators.filter(
|
||||||
|
creator__pricing__gte=min_price,
|
||||||
|
creator__pricing__lte=max_price
|
||||||
|
)
|
||||||
|
|
||||||
# 获取总数据量
|
# 获取总数据量
|
||||||
total_count = public_creators.count()
|
total_count = public_creators.count()
|
||||||
@ -3197,74 +3165,39 @@ def filter_private_pool_creators(request):
|
|||||||
# 观看量范围过滤,单选
|
# 观看量范围过滤,单选
|
||||||
views_range = filter_data.get('views_range')
|
views_range = filter_data.get('views_range')
|
||||||
if views_range and len(views_range) > 0:
|
if views_range and len(views_range) > 0:
|
||||||
views_val = views_range[0] # 单选,取第一个值
|
views_min, views_max = 0, float('inf')
|
||||||
if ',' in views_val:
|
views_val = views_range[0]
|
||||||
# 新格式: "1000,10000"
|
if views_val == "0-100":
|
||||||
try:
|
views_min, views_max = 0, 100
|
||||||
views_min, views_max = views_val.split(',')
|
elif views_val == "1k-10k":
|
||||||
views_min = int(views_min.strip())
|
views_min, views_max = 1000, 10000
|
||||||
views_max = int(views_max.strip())
|
elif views_val == "10k-100k":
|
||||||
|
views_min, views_max = 10000, 100000
|
||||||
creator_relations = creator_relations.filter(
|
elif views_val == "100k-250k":
|
||||||
creator__avg_video_views__gte=views_min,
|
views_min, views_max = 100000, 250000
|
||||||
creator__avg_video_views__lte=views_max
|
elif views_val == "250k-500k":
|
||||||
)
|
views_min, views_max = 250000, 500000
|
||||||
except (ValueError, IndexError):
|
elif views_val == "500k+":
|
||||||
# 如果解析失败,忽略此过滤条件
|
views_min = 500000
|
||||||
pass
|
|
||||||
else:
|
|
||||||
# 兼容旧格式,保持原有逻辑
|
|
||||||
views_min, views_max = 0, float('inf')
|
|
||||||
if views_val == "0-100":
|
|
||||||
views_min, views_max = 0, 100
|
|
||||||
elif views_val == "1k-10k":
|
|
||||||
views_min, views_max = 1000, 10000
|
|
||||||
elif views_val == "10k-100k":
|
|
||||||
views_min, views_max = 10000, 100000
|
|
||||||
elif views_val == "100k-250k":
|
|
||||||
views_min, views_max = 100000, 250000
|
|
||||||
elif views_val == "250k-500k":
|
|
||||||
views_min, views_max = 250000, 500000
|
|
||||||
elif views_val == "500k+":
|
|
||||||
views_min = 500000
|
|
||||||
|
|
||||||
if views_min > 0:
|
if views_min > 0:
|
||||||
creator_relations = creator_relations.filter(creator__avg_video_views__gte=views_min)
|
creator_relations = creator_relations.filter(creator__avg_video_views__gte=views_min)
|
||||||
if views_max < float('inf'):
|
if views_max < float('inf'):
|
||||||
creator_relations = creator_relations.filter(creator__avg_video_views__lte=views_max)
|
creator_relations = creator_relations.filter(creator__avg_video_views__lte=views_max)
|
||||||
|
|
||||||
# 价格区间过滤逻辑,单选
|
# 价格区间过滤逻辑,单选
|
||||||
pricing = filter_data.get('pricing')
|
pricing = filter_data.get('pricing')
|
||||||
if pricing and len(pricing) > 0:
|
if pricing and len(pricing) > 0:
|
||||||
pricing_val = pricing[0] # 单选,取第一个值
|
pricing_val = pricing[0]
|
||||||
if ',' in pricing_val:
|
if '-' in pricing_val:
|
||||||
# 新格式: "100,500"
|
min_price, max_price = pricing_val.split('-')
|
||||||
try:
|
min_price = float(min_price)
|
||||||
min_price, max_price = pricing_val.split(',')
|
max_price = float(max_price)
|
||||||
min_price = float(min_price.strip())
|
# 修改:根据单一定价字段判断是否在区间内
|
||||||
max_price = float(max_price.strip())
|
creator_relations = creator_relations.filter(
|
||||||
|
creator__pricing__gte=min_price,
|
||||||
creator_relations = creator_relations.filter(
|
creator__pricing__lte=max_price
|
||||||
creator__pricing__gte=min_price,
|
)
|
||||||
creator__pricing__lte=max_price
|
|
||||||
)
|
|
||||||
except (ValueError, IndexError):
|
|
||||||
# 如果解析失败,忽略此过滤条件
|
|
||||||
pass
|
|
||||||
elif '-' in pricing_val:
|
|
||||||
# 兼容旧格式: "100-500"
|
|
||||||
try:
|
|
||||||
min_price, max_price = pricing_val.split('-')
|
|
||||||
min_price = float(min_price.strip())
|
|
||||||
max_price = float(max_price.strip())
|
|
||||||
|
|
||||||
creator_relations = creator_relations.filter(
|
|
||||||
creator__pricing__gte=min_price,
|
|
||||||
creator__pricing__lte=max_price
|
|
||||||
)
|
|
||||||
except (ValueError, IndexError):
|
|
||||||
# 如果解析失败,忽略此过滤条件
|
|
||||||
pass
|
|
||||||
|
|
||||||
# 获取总数据量
|
# 获取总数据量
|
||||||
total_count = creator_relations.count()
|
total_count = creator_relations.count()
|
||||||
|
Loading…
Reference in New Issue
Block a user