作者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翻