回精華區
作者verit.bbs@bbs.yzu.edu.tw (.......................) 看板: InstallBBS
標題[WindTop]新浪星座運勢查詢
時間元智大學風之塔 (Fri, 18 Jul 2003 02:42:53 +0800) Updated: 2004/09/07
這隻程式要 #define POPUP_ANSWER 才能直接使用~

假如沒有的話 , 得把 main_sinastar() 中的 pans 改成 vans  :)

: maple/menu.c:適當選項中加入

+ "bin/sinastar.so:main_sinastar", 0, - M_XMODE,
+ "NStar      ♂ 星座運勢 ♀",


: so/Makefile

        bbsnet.so dreye.so enews.so railway.so sinastar.so \

: so/sinastar.c 加入這隻程式

/*-------------------------------------------------------*/
/* sinastar.c   (YZU WindTopBBS Ver 3.02 )               */
/*-------------------------------------------------------*/
/* author : verit.bbs@bbs.yzu.edu.tw                     */
/* target : http://mindcity.sina.com.tw                  */
/* create : 01/07/09                                     */
/* modify : 03/07/12                                     */
/*-------------------------------------------------------*/


#include "bbs.h"

#define mouts(x,y,s)    { move(x, y); outs(s); }


#define HTTP_PORT       80
#define SERVER_sinastar "mindcity.sina.com.tw"
#define REF             "http://mindcity.sina.com.tw"

#define LINE_WORD       50


static int
http_conn(server, s, kind)
  char *server;
  char *s;
  int kind;
{
  int sockfd, start_show, chinese, state;
  int cc, tlen,word, show;
  char *xhead, *xtail, tag[128], fname[64];
  FILE *fp;
  static char pool[2048];

  char *tag_s[5] =
  {
    "!--START:HORO_TODAY--", "!--START:HORO_TOMORROW--", "!--START:WEEKLY--",
    "!--START:WEEKLY--", "!--START:YEARLY--"
  };
  char *tag_e[5] =
  {
    "!--END:HORO_TODAY--", "!--END:HORO_TOMORROW--", "!--END:WEEKLY--",
    "!--END:WEEKLY--", "!--END:YEARLY--"
  };


  mouts(b_lines - 1, 0, "連接伺服器中,請稍候.............");
  refresh();

  if ((sockfd = dns_open(server, HTTP_PORT)) < 0)
  {
    vmsg("無法與伺服器取得連結,查詢失敗");
    return -1;
  }

  write(sockfd, s, strlen(s));
  shutdown(sockfd, 1);

  /* parser return message from web server */
  xhead = pool;
  xtail = pool;
  word = 0;
  show = 0;
  chinese = 0;
  state = 0;
  tlen = 0;
  start_show = 0;

  sprintf(fname, "tmp/%s.star", cuser.userid);
  fp = fopen(fname, "w");

  for (;;)
  {
    if (xhead >= xtail)
    {
      xhead = pool;
      cc = read(sockfd, xhead, sizeof(pool));
      if (cc <= 0)
        break;
      xtail = xhead + cc;
    }
    cc = *xhead++;

    if ((tlen == strlen(tag_s[kind]) + 1) &&
      (!str_ncmp(tag, tag_s[kind], strlen(tag_s[kind]))))
    {
      start_show = 1;
    }
    else if ((tlen == strlen(tag_e[kind]) + 1) &&
      (!str_ncmp(tag, tag_e[kind], strlen(tag_e[kind]))))
    {
      break;
    }

    if (cc == '<' || cc == '&')
    {
      tlen = 1;
      continue;
    }
    if (tlen)
    {
      if (cc == '>' || cc == ';')
      {
        if ((tlen == 3) && (!str_ncmp(tag, "br", 2)) &&
          start_show && !state)
        {
          fputs("\n    ", fp);
          state = 1;
        }
        else if ((tlen == 3) && (!str_ncmp(tag, "tr", 2)) &&
          start_show && kind > 1 && !state)
        {
          fputs("\n    ", fp);
          state = 1;
        }
        tlen = 0;
        word = 0;
        continue;
      }
      if (tlen <= 128)
        tag[tlen - 1] = cc;
      tlen++;
      continue;
    }
    if (start_show)
    {
      if (word > LINE_WORD && cc < 0 && !chinese && !state)
      {
        fputs("\n    ", fp);
        state = 1;
        word = 0 ;
      }
      if (cc == ' ')
        chinese = 0;
      else if (cc != '\r' && cc != '\n')
      {
        word++;
        fputc(cc, fp);
        state = 0;
        chinese = (cc < 0) ? (chinese ? 0 : 1) : 0;
      }
      else
      {
        word = 0;
      }
    }
  }
  close(sockfd);
  fputs("\n\n    資料來源為新浪星座算命網 http://mindcity.sina.com.tw/\n\n.", fp);
  fclose(fp);

  if (more(fname, (char *) -1) >= 0)
  {
    if (vans("您要將查詢結果寄回信箱嗎?[N] ") == 'y')
      mail_self(fname, cuser.userid, "[備 忘 錄] 新浪星座查詢結果", MAIL_READ);
  }

  unlink(fname);
  return 0;
}

/* 起始點 */
int
main_sinastar()
{
  char sendform[256], c1, c2;

  char *star[12] =
  {
    "aries",     "taurus",   "gemini",
    "cancer",    "leo",      "virgo",
    "libra",     "scorpio",  "sagittarius",
    "capricorn", "aquarius", "pisces"
  };

  char *strades[14] =
  {
    "A0",
    "AAries        牡羊座",  "BTaurus       金牛座",  "CGemini       雙子座",
    "DCancer       巨蟹座",  "ELeo          獅子座",  "FVirgo        處女座",
    "GLibra        天秤座",  "HScorpio      天蠍座",  "ISagittarius  射手座",
    "JCapricorn    魔羯座",  "KAquarius     水瓶座",  "LPisces       雙魚座",
    NULL
  };

  char *_kind[7] =
  {
    "A0",
    "AToday      今日運勢", "BTomorrow   明日運勢", "CWeek       一週運勢",
    "DMonth      本月運勢", "EYear       年度運勢",
    NULL
  };

  clear();
  if ((c1 = pans(3, 18, "選擇星座", strades)) >= 'a')
  {
    clear();
    if ((c2 = pans(6, 18, "選擇類型", _kind)) >= 'a')
    {
      c1 -= 'a';
      c2 -= 'a';
      sprintf(sendform, "GET /west/MC-12stars/%s%d.%shtml HTTP/1.0\n\n",
        star[c1], c2 + 1, c2 == 4 ? "s" : "");
      http_conn(SERVER_sinastar, sendform, c2);
    }
  }
  return 0;
}

--
※ Origin: 元智大學 風之塔 <bbs.yzu.edu.tw>
※ From  : bbs.yzu.edu.tw
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻