作者amaki.bbs@luna.twbbs.org (灑羊奶轉圈圈) 看板: plan
標題[功能]看板人氣、瀏覽時間、CP排行與統計~1
時間月下夜想 (Sat, 16 Aug 2003 10:04:49 +0800 (CST)) Updated: 2005/06/13
這個暑假俺完成的大工程。
究極版本的看板人氣、瀏覽時間、CP排行榜,分每日、每週、每月、年度一共十二項
排行,且自動繪製精美的直方圖,y軸並附上degree(degree會自動計算),每個板有十
二個直方圖,依照每日(24Hr)、本週每日(星期一~日),本月每日(1~31日)、本年每月
(1~12月),交叉搭配看板人氣、瀏覽時間、CP排行榜統計。
相信應該不會有任何其他BBS版本程式有這等玩意。
0. 先參照精華區這篇修改。
[功能] board.c 看板瀏覽時間
1. 轉換 .BRD 及 struct BRD,請在裡面塞八個欄位
int daymantime; /* 每天瀏覽人次 */
int weekmantime; /* 每週瀏覽人次 */
int monthmantime; /* 每月瀏覽人次 */
long int yearmantime; /* 每年瀏覽人次 */
time_t daytime; /* 每天瀏覽的總時間 */
time_t weektime; /* 每週瀏覽的總時間 */
int monthtime; /* 每月瀏覽的總時間(小時或分) */
int yeartime; /* 每年瀏覽的總時間(小時或分) */
一口氣暴增好幾個byte
2. BCACHE 裡新增二個欄位
time_t totalvisit[MAXBOARD]; /* 各板從上次重開以來累計瀏覽時間 */
+ long int hr_mantime[MAXBOARD];
+ long int hr_time[MAXBOARD];
hr_mantime[MAXBOARD]、hr_time[MAXBOARD]這兩個東西,計算當日累積人次所用,
hr_time[MAXBOARD]改法:
bshm->totalvisit[bno] += time(0) - now;
+ bshm->hr_time[bno] += time(0) - now; /* 多補這一行即可 */
hr_mantime[MAXBOARD]改法:
bshm->mantime[bno]++;
+ bshm->hr_mantime[bno]++; /* 多補這一行即可 */
3. Announce裡用^p + d新增資料,檔名各為
-daymantime 昨日看板人氣排行
-weekmantime 上週看板人氣排行
-moonmantime 前月看板人氣排行
-yearmantime 年度看板人氣排行
-daytime 昨日看板使用時間排行
-weektime 上週看板使用時間排行
-moontime 前月看板使用時間排行
-yeartime 年度看板時用時間排行
-dcp 昨日看板使用CP排行
-wcp 上週看板使用CP排行
-mcp 前月看板使用CP排行
-ycp 年度看板時用CP排行
4. crontab -e加上
/* 看板人氣、瀏覽時間排行榜 */
30 0 * * * bin/topbrd > /dev/null 2>&1
5 * * * * bin/brdcounter > /dev/null 2>&1
5. 修改post.c
改post_cb[]
+ 'l', post_count,
新增post_count()
static int
post_count(xo)
XO *xo;
{
char *fname, fpath[64];
BRD *brd;
switch (vans("◎看板統計:本日[1~3]、本週[4~6]、本月[7~9]、本年[A~C]?"))
{
case '1':
fname = "hr_mantime";
break;
case '2':
fname = "hr_time";
break;
case '3':
fname = "hr_cp";
break;
case '4':
fname = "week_mantime";
break;
case '5':
fname = "week_time";
break;
case '6':
fname = "week_cp";
break;
case '7':
fname = "day_mantime";
break;
case '8':
fname = "day_time";
break;
case '9':
fname = "day_cp";
break;
case 'a':
fname = "mon_mantime";
break;
case 'b':
fname = "mon_time";
break;
case 'c':
fname = "mon_cp";
break;
default:
return XO_FOOT;
}
brd = bshm->bcache + currbno;
brd_fpath(fpath, brd->brdname, fname);
more(fpath, NULL);
return post_head(xo);
}
--
Origin: luna.twbbs.org精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻