新媒体用户资产指通过内容平台(如微信公众号、视频号、抖音、小红书等)积累的、可识别、可触达、可运营的用户数据总和。其核心是建立从匿名流量到可运营用户的转化路径。你需要准备以下基础数据表(以MySQL为例):
```sql CREATE TABLE user_assets ( id INT AUTO_INCREMENT PRIMARY KEY, platform VARCHAR(20) NOT NULL COMMENT '平台,如wechat, douyin', open_id VARCHAR(100) NOT NULL COMMENT '平台唯一ID', union_id VARCHAR(100) COMMENT '跨平台统一ID', nickname VARCHAR(100), avatar_url VARCHAR(500), first_source VARCHAR(50) COMMENT '首次关注来源,如文章、视频', subscribe_time DATETIME NOT NULL, last_interact_time DATETIME, tags JSON COMMENT '用户标签,JSON格式存储', extra_info JSON COMMENT '其他扩展信息', UNIQUE KEY uk_platform_openid (platform, open_id) ); ```跨平台统一识别是资产化的前提。以微信公众号为例,获取用户OpenID和UnionID的接口调用方法如下:
在公众号网页中引导用户访问授权URL:
``` https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的APPID&redirect_uri=你的回调URL&response_type=code&scope=snsapi_userinfo&state=STATEwechat_redirect ```在回调URL的处理接口中,执行以下步骤:
```python import requests def get_user_info(code): 1. 用code换取access_token token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token' params = { 'appid': '你的APPID', 'secret': '你的APPSECRET', 'code': code, 'grant_type': 'authorization_code' } token_resp = requests.get(token_url, params=params).json() 2. 获取用户信息(包含unionid) user_url = 'https://api.weixin.qq.com/sns/userinfo' user_params = { 'access_token': token_resp['access_token'], 'openid': token_resp['openid'], 'lang': 'zh_CN' } user_info = requests.get(user_url, params=user_params).json() user_info中会包含unionid(如果公众号已绑定开放平台) return user_info ```关键点:确保公众号已绑定微信开放平台,否则无法获取UnionID。
建立实时数据管道,自动将各平台用户数据同步到中央数据库。
使用微信开放平台API,定时同步关注者列表:
```python def sync_wechat_users(): 获取access_token(需缓存,避免频繁调用) token_url = 'https://api.weixin.qq.com/cgi-bin/token' token_params = { 'grant_type': 'client_credential', 'appid': APPID, 'secret': APPSECRET } token = requests.get(token_url, params=token_params).json()['access_token'] 获取用户列表 user_list_url = 'https://api.weixin.qq.com/cgi-bin/user/get' next_openid = '' while True: params = {'access_token': token, 'next_openid': next_openid} resp = requests.get(user_list_url, params=params).json() 批量获取用户详情(每次最多100个) openids = resp['data']['openid'] batch_url = 'https://api.weixin.qq.com/cgi-bin/user/info/batchget' batch_data = { 'user_list': [{'openid': oid, 'lang': 'zh-CN'} for oid in openids] } users_detail = requests.post(batch_url, params={'access_token': token}, json=batch_data).json() 入库逻辑 save_to_database(users_detail) if 'next_openid' not in resp: break next_openid = resp['next_openid'] ```通过抖音开放平台OAuth获取用户授权:
```python 抖音授权回调处理 def douyin_callback(code): 换取access_token token_url = 'https://open.douyin.com/oauth/access_token/' data = { 'client_key': '你的ClientKey', 'client_secret': '你的ClientSecret', 'code': code, 'grant_type': 'authorization_code' } token_resp = requests.post(token_url, data=data).json() 获取用户信息 user_url = 'https://open.douyin.com/oauth/userinfo/' headers = {'access-token': token_resp['access_token']} user_info = requests.get(user_url, headers=headers).json() return user_info ```
在user_assets表的tags字段中存储JSON格式的标签数据,结构示例如下:
```json { "demographic": ["一线城市", "25-30岁"], "interest": ["科技", "健身"], "behavior": ["高频互动", "付费用户"], "source": ["公众号文章引流", "视频号直播"], "lifecycle": ["活跃期"], "custom": ["VIP客户", "活动参与者"] } ```标签打标自动化脚本示例:
```python def auto_tagging(user_id): user = get_user_from_db(user_id) tags = {} 1. 基于互动频率打标 interact_count = get_interact_count_last_30days(user_id) if interact_count > 20: tags.setdefault('behavior', []).append('高频互动') elif interact_count < 3: tags.setdefault('behavior', []).append('沉默用户') 2. 基于内容偏好打标 liked_categories = get_top_categories(user_id, limit=3) tags['interest'] = liked_categories 3. 基于来源渠道打标 if user['first_source'] in ['直播引流', '视频引流']: tags.setdefault('source', []).append('视频渠道用户') 更新数据库 update_user_tags(user_id, tags) return tags ```基于标签进行内容匹配和推送:
```python def push_content_by_tags(content_type, target_tags): 查询匹配的用户 query = """ SELECT open_id, platform FROM user_assets WHERE JSON_CONTAINS(tags->'$.interest', ?) AND JSON_CONTAINS(tags->'$.behavior', ?) """ users = db.execute(query, [ json.dumps(target_tags['interest']), json.dumps(target_tags['behavior']) ]).fetchall() 分平台推送 for user in users: if user['platform'] == 'wechat': send_wechat_message(user['open_id'], content_type) elif user['platform'] == 'douyin': send_douyin_message(user['open_id'], content_type) ```定义用户生命周期阶段,并自动迁移:
```sql -- 用户生命周期状态更新SQL UPDATE user_assets SET tags = JSON_SET( tags, '$.lifecycle', CASE WHEN DATEDIFF(NOW(), last_interact_time) <= 7 THEN '["活跃期"]' WHEN DATEDIFF(NOW(), last_interact_time) BETWEEN 8 AND 30 THEN '["沉默期"]' WHEN DATEDIFF(NOW(), last_interact_time) > 30 THEN '["流失期"]' ELSE tags->'$.lifecycle' END ) WHERE last_interact_time IS NOT NULL; ```基于UnionID或手机号进行用户合并:
```python def merge_users_by_unionid(): 查找同一unionid下的多平台账户 query = """ SELECT union_id, GROUP_CONCAT(id) as user_ids, GROUP_CONCAT(platform) as platforms FROM user_assets WHERE union_id IS NOT NULL GROUP BY union_id HAVING COUNT() > 1 """ duplicates = db.execute(query).fetchall() for dup in duplicates: user_ids = dup['user_ids'].split(',') 保留最早创建的记录为主记录 main_user_id = get_oldest_user(user_ids) 将其他账户的标签、互动数据合并到主账户 merge_user_data(main_user_id, user_ids) 标记从账户为已合并 mark_as_merged(user_ids, main_user_id) ```创建核心指标监控表:
```sql CREATE TABLE asset_metrics_daily ( id INT AUTO_INCREMENT PRIMARY KEY, metric_date DATE NOT NULL, total_users INT DEFAULT 0, new_users INT DEFAULT 0, active_users INT DEFAULT 0, avg_interactions DECIMAL(10,2) DEFAULT 0, tagged_users INT DEFAULT 0, platform_distribution JSON COMMENT '各平台用户分布', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_metric_date (metric_date) ); ```每日指标计算脚本:
```python def calculate_daily_metrics(date): 计算总用户数 total = db.execute("SELECT COUNT() FROM user_assets").fetchone()[0] 计算新增用户 new_users = db.execute(""" SELECT COUNT() FROM user_assets WHERE DATE(subscribe_time) = ? """, (date,)).fetchone()[0] 计算活跃用户(当天有互动) active_users = db.execute(""" SELECT COUNT(DISTINCT user_id) FROM user_interactions WHERE DATE(interact_time) = ? """, (date,)).fetchone()[0] 计算平台分布 platform_dist = db.execute(""" SELECT platform, COUNT() as count FROM user_assets GROUP BY platform """).fetchall() 入库 db.execute(""" INSERT INTO asset_metrics_daily (metric_date, total_users, new_users, active_users, platform_distribution) VALUES (?, ?, ?, ?, ?) """, (date, total, new_users, active_users, json.dumps(dict(platform_dist)))) ```部署完成后,通过定时任务每天凌晨执行上述计算,即可获得完整的用户资产数据看板。
易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图