BBS水木清华站∶精华区

发信人: dfbb (赵无忌), 信区: Linux 
标  题: 自动发文的expect程序 
发信站: BBS 水木清华站 (Fri May  1 20:31:01 1998) 
 
 这篇文章是用expect 自动发 的 
 expect需要tcl/tk 
 REDHAT中有这个软件 
 是一个用来做交互式程序的脚本语言 
 用它来打mud也很酷的 
 下面是我的bbs post 程序 
 不太完善,用法:首先输好自己的USERNAME& PASSWD 
 then chmod a+x bbs 
 bbs 文件 版名 标题 
 用expect可以去bbs自动取文章 
 在聊天室里录音 
 象人一样聊天 use send_human 
  
 ------------------Cut from here ------------------- 
  
 #!/usr/bin/expect -- 
  set CTRLA \001 
  set CTRLC \037 
  set CTRLZ \032 
  set CTRLK \013 
  set CTRLO \017 
  set CTRLP \020 
  set CTRLX \028 
  set postbuffer "" 
  set POSTFILE "./postfile" 
  set TITLE "POST BY EXPECT" 
  set BOARD "test" 
  set USERNAME "guest" 
  set PASSWORD "password" 
  set debug_flag 1 
  
 if $argc==0 { 
              send_user "Too few argument\nUSAGE:\n\tbbs POST_FILE_NAME BOARD TITLE\n\n" 
               exit 
             } 
  
 if $argc==1 { 
              send_user "Too few argument\nUSAGE:\n\tbbs POST_FILE_NAME BOARD TITLE\n\n" 
               exit 
             } 
  
 if $argc==2 { 
              send_user "Too few argument\nUSAGE:\n\tbbs POST_FILE_NAME BOARD TITLE\n\n" 
               exit 
             } 
  
 if $argc>3 { 
             send_user "Too many argument\nUSAGE:\n\tbbs POST_FILE_N BOARD TITLE\n\n" 
              exit 
            } 
  
 set POSTFILE [lindex $argv 0] 
 set BOARD [lindex $argv 1] 
 set TITLE [lindex $argv 2] 
  
 if [file exists $POSTFILE] { 
                             send_user "Start autoposting file..." 
                            } else { 
                                    send_user "Not find file $POSTFILE !!!\n" 
                                     exit 
                                   } 
  
 proc readfile {} { 
                   global POSTFILE postbuffer 
  
                   if [catch {open $POSTFILE} fp] return 
                    say "reading post file" 
                    set line 0 
                    while {[gets $fp postbuffer]!=-1} { 
                                                       send " $postbuffer\r" 
                                                       incr line 
                                                      } 
                   close $fp 
                    say "I have success posted $line line " 
                  } 
  
 proc say {msg} { 
                 global debug_flag 
  
                 if !$debug_flag return 
  
                 if [catch {puts "parent: $msg"}] { 
                                                   send_log "child: $msg\n" 
                                                  } 
                } 
  
 spawn /usr/bin/telnet 202.112.58.200 
  expect "login" 
  send "bbs\r" 
  sleep 1 
  expect "new'):" 
  send "$USERNAME\r" 
  sleep 1  
  expect "请输入密码:" 
  send "$PASSWORD\rq\r\reqqb\r\/$BOARD\r\r" 
  sleep 1 
  expect "刊 登 者" 
  send "$CTRLP" 
  expect "标题:" 
  send "$TITLE\r" 
  expect "设定:" 
  send "\r" 
  expect "时间" 
  readfile 
  sleep 24 
  expect "Ctrl-Z" 
  send "$CTRLX" 
  sleep 1 
  expect "编辑" 
  send "\r" 
  sleep 1 
  expect "转信" 
  sleep 1 
  send "\r\r" 
  sleep 1 
  send "eeg\r\r\r" 
  sleep 1 
  send "exit\r" 
  sleep 1 
  close 
  send_user "\r\r\r\rPosting file completed.\r\r\r" 
  
  
 
-- 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 159.226.41.99] 

BBS水木清华站∶精华区