躺在沙灘上的小豬

          快樂的每一天

          自由的python o_o

          問題:
                 公司的日報,每天填寫的時候總是那么巨慢,都有點恐懼它了!

          解決方案:
                 讓代碼幫我們每天定時提交,這樣就可以省下精力取吹牛去了

          好了,開始吧:
                 有兩種思路,大概的描述一下如下:
                  一:定制一份模板的數據,每個月或者每個星期,讓它自己的獲取生成相應的數據,并提交.
                  二:采用交互的界面,這樣就不要打開ie了,每天只要通過命令行就可以搞定.

          首先看登陸:

          1def login(self):    
          2    """
          3        登陸
          4    """        
          5    loginparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,\
          6                'UPC_REQUEST_URI':'*.do','UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'})
          7 
          8    self.pform = urllib.urlopen(self.url,loginparams)
          9


          我們需要導入urllib. 傳人登陸的參數即可,如上面的loginparams.
          調用 

          1urllib.urlopen(url[,params])

          執行登陸.

          其次:解析登陸完畢,從數據庫種返回的內容,工號,姓名,部門,單位,地點,等等.
          換一種方式也就是說,運用regex在html種解析,得到數據庫范戶的數據.

          導入我們需要的re.

           1def parse(self):    
           2    """
           3        解析登陸完成的HTML頁面,獲取用戶相應的信息
           4    """    
           5    content = '\n'.join(self.pform.readlines())            
           6    items = ["employeeName","department","workArea","workCity","fillInDate"]
           7    for item in items:
           8        pattern = "name=\""+item+"\"\s*(size=\"\d*\")?\s*value=\"(\S*(\s*\S*)?)\""
           9        matcher = re.search(pattern,content)
          10            
          11        if matcher!=None:        
          12            self.item = matcher.groups()[1]


          regex這一部分,不明白,可以參考這里http://docs.python.org/lib/module-re.html.

          好了,下一步就是提交我們的日報:

           1def post(self):
           2        """
           3            提交日報
           4        """
           5        posturl = 'http://host/*.do'
           6    
           7        f = open(dataFileName)
           8        contents = f.readlines()
           9        
          10        #讀取data文件,判斷是否采用交互界面,還是采用data文件的數據    
          11        if contents[0]=='n':                    
          12            c = raw_input('是否采用提交當天日志(y/n)?:')
          13            if c!='y':
          14                self.fillInDate = raw_input('請輸入提交日期(格式yyyy-mm-dd):')
          15        
          16            projectId = raw_input('項目名稱代碼:')
          17            workId = raw_input('具體事項:')
          18            workContent = raw_input('工作內容:')
          19            workNum = raw_input('正常工作時長:')
          20            overtimeNum = raw_input('加班工作時長:')
          21        else:
          22            
          23            #是否采用文件中的時間,如果不采用,則采用當前時間
          24            if contents[1]=='y':                
          25                self.fillInDate = contents[2]
          26            
          27            projectId = contents[3]
          28            workId = contents[4]
          29            workContent = contents[5]
          30            workNum = contents[6]
          31            overtimeNum = contents[7]
          32        
          33        #拼湊參數     o_o
          34        postparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,\
          35              'UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG',\
          36                'employeeId':self.username,'employeeName':self.employeeName,\
          37                'department':self.department,'workArea':self.workArea,'workCity':self.workCity,'fillInDate':self.fillInDate,\
          38                'detailList[0].projectId':projectId,'detailList[0].workId':workId,\
          39                'detailList[0].workContent':workContent,'detailList[0].workNum':workNum,'detailList[0].overtimeNum':overtimeNum})    
          40                
          41        #提交
          42        result = urllib.urlopen(posturl,postparams)
          43        #todo:解析提過完成頁面,獲取信息
          44        #
          45        result.close()
          46


          當然,現在的data文件格式比較簡單,我們可以做的更實用一點,采用key=value的形式,或者其他.
          fun.data的樣子如下:

          y
          n
          0
          JX00001
          WK00022
          稽查需求分析
          0
          8

          第一行:是否采用當前data文件數據
          第二行:是否采用自定義時間,如果不采用,第三行忽略,如果采用,時間即為第三行的值
          第四行,第五行,第六行,日報具體的東西,不談了.
          第七行:正常工作時間
          第八行:加班時間
          完整代碼如下:

            1#!/usr/bin/python
            2# -*- coding: UTF-8 -*-
            3
            4import urllib
            5import os
            6import re
            7
            8class Fun:
            9    def __init__(self,username,password,times=1,\
           10            dataFileName='fun.data',\
           11            url='http://host/login.ctl',\
           12            proxies={'http': ip:port'},pform=None):
           13        self.username=username
           14        self.password=password
           15        self.times = times
           16        self.url=url
           17        self.proxies=proxies
           18        self.pform=pform
           19        self.employeeName=''
           20        self.department=''
           21        self.workArea=''
           22        self.workCity=''
           23        self.fillInDate=''
           24        self.dataFileName=dataFileName
           25    
           26    def login(self):    
           27        """
           28            登陸
           29        """        
           30        loginparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,\
           31                    'UPC_REQUEST_URI':'*.do','UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG'}) 
           32        self.pform = urllib.urlopen(self.url,loginparams)
           33        self.parse()        
           34
           35    def parse(self):    
           36        """
           37            解析登陸完成的HTML頁面,獲取用戶相應的信息
           38        """    
           39        content = '\n'.join(self.pform.readlines())            
           40        items = ["employeeName","department","workArea","workCity","fillInDate"]
           41        for item in items:
           42            pattern = "name=\""+item+"\"\s*(size=\"\d*\")?\s*value=\"(\S*(\s*\S*)?)\""
           43            matcher = re.search(pattern,content)
           44            
           45            if matcher!=None:        
           46                self.item = matcher.groups()[1]
           47                        
           48    def post(self):
           49        """
           50            提交日報
           51        """
           52        posturl = 'http://host/*.do'
           53    
           54        f = open(dataFileName)
           55        contents = f.readlines()
           56        
           57        #讀取data文件,判斷是否采用交互界面,還是采用data文件的數據    
           58        if contents[0]=='n':                    
           59            c = raw_input('是否采用提交當天日志(y/n)?:')
           60            if c!='y':
           61                self.fillInDate = raw_input('請輸入提交日期(格式yyyy-mm-dd):')
           62        
           63            projectId = raw_input('項目名稱代碼:')
           64            workId = raw_input('具體事項:')
           65            workContent = raw_input('工作內容:')
           66            workNum = raw_input('正常工作時長:')
           67            overtimeNum = raw_input('加班工作時長:')
           68        else:
           69            
           70            #是否采用文件中的時間,如果不采用,則采用當前時間
           71            if contents[1]=='y':                
           72                self.fillInDate = contents[2]
           73            
           74            projectId = contents[3]
           75            workId = contents[4]
           76            workContent = contents[5]
           77            workNum = contents[6]
           78            overtimeNum = contents[7]
           79        
           80        #拼湊參數     o_o
           81        postparams = urllib.urlencode({'j_username':self.username,'j_password':self.password,\
           82              'UPC_LOGIN_FLAG':'UPC_LOGIN_FLAG',\
           83                'employeeId':self.username,'employeeName':self.employeeName,\
           84                'department':self.department,'workArea':self.workArea,'workCity':self.workCity,'fillInDate':self.fillInDate,\
           85                'detailList[0].projectId':projectId,'detailList[0].workId':workId,\
           86                'detailList[0].workContent':workContent,'detailList[0].workNum':workNum,'detailList[0].overtimeNum':overtimeNum})    
           87                
           88        #提交
           89        result = urllib.urlopen(posturl,postparams)
           90        #todo:解析提過完成頁面,獲取信息
           91        #
           92        result.close()
           93        
           94    def close(self):
           95        """
           96        """
           97        if not self.pform:
           98            self.pform.close()
           99        
          100
          101
          102if __name__=='__main__':    
          103    #測試
          104    try:
          105        test = Fun('404','404')
          106        test.login()
          107        test.post()
          108        test.close()    
          109    except IOError:
          110        print '*'*80
          111        print '*'*33,'網絡連接出錯','*'*33
          112        print '*'*80
          113

          嘿嘿,終于可以休息了,不用在為填寫日報而煩了

          posted on 2005-09-24 14:32 martin xus 閱讀(418) 評論(6)  編輯  收藏 所屬分類: python

          主站蜘蛛池模板: 承德市| 彩票| 信宜市| 同江市| 凤翔县| 工布江达县| 平湖市| 资兴市| 胶州市| 瑞金市| 东源县| 新昌县| 浙江省| 徐汇区| 庆云县| 盐城市| 华池县| 温州市| 治多县| 利辛县| 防城港市| 西畴县| 扎鲁特旗| 凭祥市| 定襄县| 海南省| 当雄县| 二手房| 沛县| 茶陵县| 荔浦县| 张家川| 伊通| 巴彦县| 沈阳市| 绍兴县| 望都县| 南开区| 湾仔区| 安多县| 枝江市|