mirror of
https://github.com/luzhisheng/js_reverse.git
synced 2025-04-20 10:25:01 +08:00
抖店精选联盟数据
This commit is contained in:
parent
8f2fea987b
commit
4198c8afee
648
抖音js逆向学习/抖店精选联盟数据/dao/mysql_dao.py
Normal file
648
抖音js逆向学习/抖店精选联盟数据/dao/mysql_dao.py
Normal file
@ -0,0 +1,648 @@
|
|||||||
|
from handlers.base import Base
|
||||||
|
import pymysql.cursors
|
||||||
|
import settings
|
||||||
|
|
||||||
|
base = Base()
|
||||||
|
|
||||||
|
|
||||||
|
def getConnection():
|
||||||
|
return pymysql.connect(
|
||||||
|
host=settings.HOST,
|
||||||
|
port=settings.PORT,
|
||||||
|
user=settings.USER,
|
||||||
|
password=settings.PASSWORD,
|
||||||
|
database=settings.DATABASE,
|
||||||
|
autocommit=True,
|
||||||
|
cursorclass=pymysql.cursors.DictCursor
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def sqlConn(func):
|
||||||
|
""" use a decorator to make connection easier to use
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __sqlFunc(*args):
|
||||||
|
conn = None
|
||||||
|
cursor = None
|
||||||
|
try:
|
||||||
|
conn = getConnection()
|
||||||
|
cursor = conn.cursor()
|
||||||
|
return func(*args, cursor=cursor)
|
||||||
|
finally:
|
||||||
|
if cursor:
|
||||||
|
cursor.close()
|
||||||
|
if conn:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
return __sqlFunc
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def getFinancialData(symbol, startDate, endDate, page, limit, **kwargs):
|
||||||
|
""" fetch financial from db
|
||||||
|
"""
|
||||||
|
sql = f"SELECT symbol, date, open_price, close_price, volume FROM Financial " + \
|
||||||
|
f"WHERE date >= '{startDate}' AND " + \
|
||||||
|
f"date <= '{endDate}' AND symbol = '{symbol}' LIMIT {(page - 1) * limit}, {limit};"
|
||||||
|
|
||||||
|
# base.log(sql)
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
rows = cursor.fetchall()
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def getPaginationData(symbol, startDate, endDate, page, limit, **kwargs):
|
||||||
|
""" get pagination information
|
||||||
|
"""
|
||||||
|
sql = f"SELECT COUNT(*) AS cnt FROM Financial WHERE date >= '{startDate}' " + \
|
||||||
|
f"AND date <= '{endDate}' AND symbol = '{symbol}';"
|
||||||
|
|
||||||
|
# base.log(sql)
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
c = cursor.fetchone()
|
||||||
|
|
||||||
|
return {
|
||||||
|
'count': c['cnt'],
|
||||||
|
'page': page,
|
||||||
|
'limit': limit,
|
||||||
|
'pages': (c['cnt'] + limit - 1) // limit
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def initDatabase(**kwargs):
|
||||||
|
sql = """
|
||||||
|
CREATE TABLE IF NOT EXISTS Financial(
|
||||||
|
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
symbol VARCHAR(255) NOT NULL,
|
||||||
|
`date` VARCHAR(16) NOT NULL,
|
||||||
|
open_price VARCHAR(255) NOT NULL,
|
||||||
|
close_price VARCHAR(255) NOT NULL,
|
||||||
|
volume VARCHAR(255) NOT NULL,
|
||||||
|
UNIQUE(symbol, `date`)
|
||||||
|
);
|
||||||
|
"""
|
||||||
|
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def updateFinancialData(symbol, data, **kwargs):
|
||||||
|
""" save data to db
|
||||||
|
@return 0: success, other: failure
|
||||||
|
"""
|
||||||
|
|
||||||
|
# use ignore, so the insert will ignore those duplicated key
|
||||||
|
sql = "INSERT IGNORE INTO Financial (symbol, date, open_price, close_price, volume) VALUES "
|
||||||
|
|
||||||
|
i = 1
|
||||||
|
for date, fields in data.items():
|
||||||
|
sql += "('%s', '%s', '%s', '%s', '%s')" % \
|
||||||
|
(symbol, date, fields['1. open'], fields['4. close'], fields['6. volume'])
|
||||||
|
|
||||||
|
if i < len(data):
|
||||||
|
sql += ","
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
base.log(f'更新 {symbol} 数量: {cursor.rowcount}')
|
||||||
|
return cursor.rowcount
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def insert_project_spider(symbol, item_list, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
INSERT IGNORE INTO {symbol} (task_id, payload_get, payload_post, deduplication, weight) VALUES
|
||||||
|
"""
|
||||||
|
for item in item_list:
|
||||||
|
sql += "('%s', '%s', '%s', '%s', '%s')," % (
|
||||||
|
item['task_id'], item['payload_get'],
|
||||||
|
item['payload_post'], item['deduplication'],
|
||||||
|
item['weight']
|
||||||
|
)
|
||||||
|
sql = sql.rstrip(',')
|
||||||
|
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
base.log(f'插入 {symbol} 数量: {cursor.rowcount}')
|
||||||
|
return cursor.rowcount
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def insert_project_user_monitor(symbol, item_list, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
INSERT IGNORE INTO {symbol} (task_id, authorId, BeginTime, EndTime, weight) VALUES
|
||||||
|
"""
|
||||||
|
for item in item_list:
|
||||||
|
sql += "('%s', '%s', '%s', '%s', '%s')," % (
|
||||||
|
item['task_id'], item['authorId'],
|
||||||
|
item['BeginTime'], item['EndTime'],
|
||||||
|
item['weight']
|
||||||
|
)
|
||||||
|
sql = sql.rstrip(',')
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
base.log(f'插入 {symbol} 数量: {cursor.rowcount}')
|
||||||
|
return cursor.rowcount
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_user_monitor(symbol, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
authorId,
|
||||||
|
BeginTime,
|
||||||
|
EndTime
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_room_info
|
||||||
|
WHERE
|
||||||
|
authorId = '{symbol}'
|
||||||
|
ORDER BY BeginTime DESC
|
||||||
|
LIMIT 5
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_project_spider(symbol, task_id, deduplication, **kwargs):
|
||||||
|
"""
|
||||||
|
sql 判断5分钟内是否已经抓取
|
||||||
|
"""
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
status
|
||||||
|
FROM
|
||||||
|
{symbol}
|
||||||
|
WHERE
|
||||||
|
deduplication = '{deduplication}' and
|
||||||
|
create_time>=DATE_SUB(NOW(),INTERVAL 5 MINUTE)
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchone()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def getStatisticsData(symbol, startDate, endDate, **kwargs):
|
||||||
|
""" get the average value of the given peroid
|
||||||
|
"""
|
||||||
|
sql = f"SELECT AVG(open_price) AS avg_open, AVG(close_price) AS avg_close, AVG(volume) " + \
|
||||||
|
f"AS avg_volume FROM Financial WHERE date >= '{startDate}' " + \
|
||||||
|
f"AND date <= '{endDate}' AND symbol = '{symbol}';"
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchone()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_info(symbol, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
b.UserId,
|
||||||
|
b.UserId as userSn,
|
||||||
|
b.HeaderImg,
|
||||||
|
b.FavCnt,
|
||||||
|
b.FansCnt,
|
||||||
|
b.IsShow,
|
||||||
|
BeginTime,
|
||||||
|
Gmv,
|
||||||
|
b.SubDetail,
|
||||||
|
b.Reputation,
|
||||||
|
b.DouYinId,
|
||||||
|
b.NAME,
|
||||||
|
c.LiveName as title,
|
||||||
|
c.BeginTime as startTime,
|
||||||
|
c.EndTime as finishTime
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_room_info c
|
||||||
|
RIGHT JOIN (
|
||||||
|
SELECT
|
||||||
|
UserId,
|
||||||
|
HeaderImg,
|
||||||
|
FavCnt,
|
||||||
|
FansCnt,
|
||||||
|
IsShow,
|
||||||
|
SubDetail,
|
||||||
|
Reputation,
|
||||||
|
DouYinId,
|
||||||
|
NAME,
|
||||||
|
spider_time
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_detail
|
||||||
|
WHERE
|
||||||
|
UserId = '{symbol}'
|
||||||
|
ORDER BY
|
||||||
|
spider_time DESC
|
||||||
|
LIMIT 1
|
||||||
|
) b ON c.authorId = b.UserId
|
||||||
|
ORDER BY
|
||||||
|
c.spider_time DESC
|
||||||
|
LIMIT 1
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchone()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_search(symbol, page, limit, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
UserId,
|
||||||
|
NAME,
|
||||||
|
HeaderImg,
|
||||||
|
DouYinId,
|
||||||
|
FansCnt
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_detail
|
||||||
|
WHERE
|
||||||
|
NAME LIKE '%{symbol}%'
|
||||||
|
ORDER BY
|
||||||
|
UserLevel DESC
|
||||||
|
LIMIT {(page - 1) * limit}, {limit};
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
# 搜索结果数
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_search_count(symbol, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
count(1) as total
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_detail
|
||||||
|
WHERE
|
||||||
|
NAME LIKE '%{symbol}%';
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
total = cursor.fetchone()
|
||||||
|
return total
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_gmv(symbol, **kwargs):
|
||||||
|
symbol_str = ','.join(symbol)
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
a.authorId,
|
||||||
|
a.BeginTime,
|
||||||
|
a.Gmv
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_room_info AS a,
|
||||||
|
( SELECT authorId, MAX( RoomId ) AS RoomId FROM clean_daduoduo_dy_author_room_info WHERE authorId IN
|
||||||
|
{symbol} GROUP BY authorId ) AS b
|
||||||
|
WHERE
|
||||||
|
a.authorId = b.authorId
|
||||||
|
AND a.RoomId = b.RoomId
|
||||||
|
ORDER BY
|
||||||
|
field( b.authorId, {symbol_str});
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_list(symbol, page, limit, goods_live_status, sort_order, **kwargs):
|
||||||
|
# item.title 直播标题
|
||||||
|
# item.startTime 开播时间
|
||||||
|
# item.actualSalesMoney 销售额
|
||||||
|
# item.totalUser 直播销售额
|
||||||
|
# item.minuteEnterUser 直播销量
|
||||||
|
# item.actualSales 带货热度
|
||||||
|
if int(goods_live_status) == 0:
|
||||||
|
bring_goods = ''
|
||||||
|
else:
|
||||||
|
bring_goods = f'and SaleCnt != 0'
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
RoomPic as coverUrl,
|
||||||
|
LiveName as title,
|
||||||
|
BeginTime as startTime,
|
||||||
|
Gmv as actualSalesMoney,
|
||||||
|
TotalUser as totalUser,
|
||||||
|
SaleCnt as minuteEnterUser,
|
||||||
|
UserCount as actualSales,
|
||||||
|
RoomId as roomSn
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_room_info
|
||||||
|
WHERE
|
||||||
|
authorId = '{symbol}' {bring_goods}
|
||||||
|
ORDER BY
|
||||||
|
BeginTime {sort_order}
|
||||||
|
LIMIT {(page - 1) * limit}, {limit};
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
# 直播记录数
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_list_count(symbol, goods_live_status, **kwargs):
|
||||||
|
# item.title 直播标题
|
||||||
|
# item.startTime 开播时间
|
||||||
|
# item.actualSalesMoney 销售额
|
||||||
|
# item.totalUser 直播销售额
|
||||||
|
# item.minuteEnterUser 直播销量
|
||||||
|
# item.actualSales 带货热度
|
||||||
|
if int(goods_live_status) == 0:
|
||||||
|
bring_goods = ''
|
||||||
|
else:
|
||||||
|
bring_goods = f'and SaleCnt != 0'
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
count(1) as total
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_author_room_info
|
||||||
|
WHERE
|
||||||
|
authorId = '{symbol}' {bring_goods};
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
total = cursor.fetchone()
|
||||||
|
return total
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_big_screen_goods(symbol, page, limit, goods_live_status, sortKey, sort_order, **kwargs):
|
||||||
|
# thumbCoverUrl
|
||||||
|
# title
|
||||||
|
# price
|
||||||
|
# sales
|
||||||
|
# salesMoney
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
GoodPic as thumbCoverUrl,
|
||||||
|
GoodName as title,
|
||||||
|
SellPrice as price,
|
||||||
|
SaleCnt as sales,
|
||||||
|
SaleCnt as totalSales,
|
||||||
|
Gmv as salesMoney
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_goods
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
ORDER BY
|
||||||
|
{sortKey} {sort_order}
|
||||||
|
LIMIT {(page - 1) * limit}, {limit};
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_big_screen_goods_count(symbol, **kwargs): # goods_live_status
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
count(1) as total
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_goods
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}';
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
total = cursor.fetchone()
|
||||||
|
return total
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_goods(symbol, page, limit, sort_order, **kwargs):
|
||||||
|
# item.thumbCoverUrl
|
||||||
|
# item.title
|
||||||
|
# item.price
|
||||||
|
# item.totalSales
|
||||||
|
# item.totalSalesMoney
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
GoodPic as thumbCoverUrl,
|
||||||
|
GoodName as title,
|
||||||
|
SellPrice as price,
|
||||||
|
SaleCnt as totalSales,
|
||||||
|
Gmv as totalSalesMoney
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_goods
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
ORDER BY
|
||||||
|
StartTime {sort_order}
|
||||||
|
LIMIT {(page - 1) * limit}, {limit};
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
# 直播间商品数量
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_goods_count(symbol, **kwargs):
|
||||||
|
# item.thumbCoverUrl
|
||||||
|
# item.title
|
||||||
|
# item.price
|
||||||
|
# item.totalSales
|
||||||
|
# item.totalSalesMoney
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
count(1) as total
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_goods
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}';
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
total = cursor.fetchone()
|
||||||
|
return total
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_info(symbol, **kwargs):
|
||||||
|
# title
|
||||||
|
# coverUrl
|
||||||
|
# startTime
|
||||||
|
# finishTime
|
||||||
|
# liveTimeLength 直播时长(分钟)
|
||||||
|
# liveGoodsScore 本场带货口碑
|
||||||
|
# actualSalesMoney 销售额
|
||||||
|
# userVO {avatarThumbUrl, nickname, lastRoomStartTime, uniqueId }
|
||||||
|
# userCountVO { other, city, videoDetail, myFollow }
|
||||||
|
# followCount 直播涨粉
|
||||||
|
# actualSales 销量
|
||||||
|
# totalUser 观看人次
|
||||||
|
# hasLiveStatus
|
||||||
|
# minuteEnterUser 分钟流速
|
||||||
|
# avgOnline 平均在线
|
||||||
|
# avgStayLength 平均停留
|
||||||
|
# likeCount 本场点赞
|
||||||
|
# converFanRate 转粉率
|
||||||
|
# guestUnitPrice 客单价
|
||||||
|
# userContribution 千次观看成交(UV价值)
|
||||||
|
# minuteSalesMoney 分钟销售额
|
||||||
|
# minuteSales 分钟销售
|
||||||
|
# goodsCount 商品数
|
||||||
|
# totalSalesMoney 销售额
|
||||||
|
# converRate 整体转化率
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
people_Name as title,
|
||||||
|
people_HeaderImg as coverUrl,
|
||||||
|
room_BeginTime as startTime,
|
||||||
|
room_EndTime as finishTime,
|
||||||
|
CONCAT(UNIX_TIMESTAMP(room_EndTime)-UNIX_TIMESTAMP(room_BeginTime)) as liveTimeLength,
|
||||||
|
people_UserId as uniqueId,
|
||||||
|
room_Gmv as actualSalesMoney,
|
||||||
|
room_SaleCnt as actualSales,
|
||||||
|
room_TotalUser as totalUser,
|
||||||
|
room_MaxUserCnt as minuteEnterUser,
|
||||||
|
room_AvgUserCount as avgOnline,
|
||||||
|
room_viewer_info_other as other,
|
||||||
|
room_viewer_info_video as videoDetail,
|
||||||
|
room_viewer_info_follow as myFollow,
|
||||||
|
room_viewer_info_feed as feed,
|
||||||
|
room_viewer_info_city as city,
|
||||||
|
room_viewer_info_plaza as plaza,
|
||||||
|
room_viewer_info_search as search,
|
||||||
|
room_viewer_info_home as home,
|
||||||
|
room_GoodsCnt as goodsCount,
|
||||||
|
CONCAT((room_Gmv / room_SaleCnt)) as guestUnitPrice,
|
||||||
|
CONCAT((room_Gmv / room_TotalUser)) as userContribution
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_detail
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
# 本场点赞
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_big_screen_likeCount(symbol, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT FavCnt as likeCount FROM
|
||||||
|
clean_daduoduo_dy_live_room_flow_info
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
ORDER BY FullTime DESC
|
||||||
|
LIMIT 1
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchone()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
# 直播数据增长相关
|
||||||
|
# FavCnt 点赞
|
||||||
|
# FollowCnt 涨粉
|
||||||
|
# TotalUserCnt 直播间总人数
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_data_increase(symbol, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT FavCnt as likeCount, FollowCnt as followCount, TotalUserCnt FROM
|
||||||
|
clean_daduoduo_dy_live_room_flow_info
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
ORDER BY FullTime DESC
|
||||||
|
LIMIT 1
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchone()
|
||||||
|
return statistics
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_big_screen(symbol, **kwargs):
|
||||||
|
# detailData.title
|
||||||
|
# detailData.coverUrl
|
||||||
|
# detailData.followerCount 粉丝
|
||||||
|
# detailData.createTime 开播时间
|
||||||
|
# detailData.liveTimeLength 直播时长 分钟
|
||||||
|
# detailData.liveStatus 直播状态 [0,1] 0已下播1直播中
|
||||||
|
# detailData.actualSalesMoney 直播间实时总销售额(元)
|
||||||
|
# detailData.actualSales 总销量
|
||||||
|
# detailData.userCount 当前在线人数
|
||||||
|
# detailData.totalUser 总观看人数
|
||||||
|
# detailData.avgOnline 平均在线
|
||||||
|
# detailData.minuteEnterUser 分钟流量
|
||||||
|
# detailData.avgStayLength 平均停留
|
||||||
|
# detailData.userContribution UV价值
|
||||||
|
# detailData.guestUnitPrice 客单价
|
||||||
|
# detailData.likeCount 本场点赞
|
||||||
|
# detailData.followCount 直播涨粉
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
people_Name as title,
|
||||||
|
people_HeaderImg as coverUrl,
|
||||||
|
room_BeginTime as createTime,
|
||||||
|
REPLACE(room_BeginTime, ' ', 'T') as startTime,
|
||||||
|
REPLACE(room_EndTime, ' ', 'T') as finishTime,
|
||||||
|
CONCAT(UNIX_TIMESTAMP(room_EndTime)-UNIX_TIMESTAMP(room_BeginTime)) as liveTimeLength,
|
||||||
|
room_Gmv as actualSalesMoney,
|
||||||
|
room_Gmv as salesExplain,
|
||||||
|
0 as likeCount,
|
||||||
|
room_viewer_info_follow as followCount,
|
||||||
|
room_GoodsCnt as goodsCount,
|
||||||
|
room_SaleCnt as actualSales,
|
||||||
|
room_UserCount as userCount,
|
||||||
|
room_TotalUser as totalUser,
|
||||||
|
room_MaxUserCnt as minuteEnterUser,
|
||||||
|
room_AvgUserCount as avgOnline,
|
||||||
|
CONCAT((room_Gmv / room_SaleCnt)) as guestUnitPrice,
|
||||||
|
CONCAT((room_Gmv / room_TotalUser)) as userContribution
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_detail
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
|
@sqlConn
|
||||||
|
def get_anchor_room_trend_first(symbol, **kwargs):
|
||||||
|
sql = f"""
|
||||||
|
SELECT
|
||||||
|
DATE_FORMAT(STR_TO_DATE(FullTime, '%Y%m%d %H%i%s'), '%Y-%m-%dT%H:%i:%s') as dateKeyListValue,
|
||||||
|
DATE_FORMAT(STR_TO_DATE(FullTime, '%Y%m%d'), '%Y-%m-%d') as dateKeyListLabel,
|
||||||
|
UserCnt AS userCountListValue
|
||||||
|
FROM
|
||||||
|
clean_daduoduo_dy_live_room_flow_info
|
||||||
|
WHERE
|
||||||
|
RoomId = '{symbol}'
|
||||||
|
ORDER BY
|
||||||
|
FullTime asc
|
||||||
|
"""
|
||||||
|
cursor = kwargs.get('cursor')
|
||||||
|
cursor.execute(sql)
|
||||||
|
statistics = cursor.fetchall()
|
||||||
|
return statistics
|
28
抖音js逆向学习/抖店精选联盟数据/settings.py
Normal file
28
抖音js逆向学习/抖店精选联盟数据/settings.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def log(s):
|
||||||
|
print('【%s】 %s' % (datetime.now(), s), flush=True)
|
||||||
|
|
||||||
|
|
||||||
|
if os.environ.get('ENV_REPLACE_API') == 'prod':
|
||||||
|
log('生产环境')
|
||||||
|
mysql_server_daduoduo = {
|
||||||
|
"host": '127.0.0.1',
|
||||||
|
"user": 'root',
|
||||||
|
"password": os.environ.get('DB_PASSWORD_DADUODUO'),
|
||||||
|
"db": 'eb_supports_daduoduo',
|
||||||
|
"port": 3306,
|
||||||
|
"charset": 'utf8mb4'
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
log('测试环境')
|
||||||
|
mysql_server_daduoduo = {
|
||||||
|
"host": '127.0.0.1',
|
||||||
|
"user": 'root',
|
||||||
|
"password": '123456',
|
||||||
|
"db": 'eb_supports_daduoduo',
|
||||||
|
"port": 3306,
|
||||||
|
"charset": 'utf8mb4'
|
||||||
|
}
|
BIN
猿人学练习/23综合离谱的protobuf与jsvmp/main.wasm
Normal file
BIN
猿人学练习/23综合离谱的protobuf与jsvmp/main.wasm
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user