回精華區
作者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翻