1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime, timedelta
from gm_rpcd.all import bind, RPCDFaultException
from gm_types.push import PUSH_CONTENT_TYPE
from communal.tools import PushService
from communal.tools.push.push_builder import CtrPushContentFormat
from communal.models.hot_content import HotContent
from utils.rpc import logging_exception
@bind("mimas/communal/push_service")
def mimas_call_push_logic(user_ids, action_type, is_timely_push, **kwargs):
"""
推送逻辑
:param user_ids:
:param action_type:
:param is_timely_push:
:param kwargs:
:return:
"""
valid_user_ids = PushService.filter_valid_user_ids(user_ids, kwargs.pop("filter_user_id", 0))
PushService.push(
user_ids=valid_user_ids,
action_type=action_type,
is_timely_push=is_timely_push,
**kwargs
)
@bind('mimas/ctr/push_info/format')
def ctr_push_info_format(content_id, push_type, content_type, tag_name=''):
"""
个性化 push 封装推送数据
:param content_id: 推送内容id
:param push_type: 推送内容类型
:param content_type: 推送类型枚举
:param tag_name: 推送关联的标签名字
:return: 封装好的push数据
"""
push_info = {}
try:
if content_type == PUSH_CONTENT_TYPE.ANSWER:
push_info = CtrPushContentFormat.ctr_answer(content_id, push_type)
if content_type == PUSH_CONTENT_TYPE.QUESTION:
push_info = CtrPushContentFormat.ctr_question(content_id, push_type, tag_name)
elif content_type == PUSH_CONTENT_TYPE.DIARY:
push_info = CtrPushContentFormat.ctr_diary(content_id, push_type)
elif content_type == PUSH_CONTENT_TYPE.TRACTATE:
push_info = CtrPushContentFormat.ctr_tractate(content_id, push_type)
except:
logging_exception()
return push_info
@bind('mimas/ctr/push_content_ids')
def get_ctr_content_by_ids(content_type, date_object=None):
"""demeter调用,返回按照点击数排序的内容id"""
result = {
'content_ids': []
}
if not content_type:
return result
if not date_object:
date_object = datetime.now().date() + timedelta(days=-1)
hot_contents = HotContent.objects.filter(
date_index=date_object, content_type=content_type
).values_list('content_id', 'click_num')
sorted_contents = sorted(hot_contents, key=lambda item: item[1], reverse=True)
result['content_ids'] = [data[0] for data in sorted_contents][:30]
return result