實戰教學VII

麻蛙屬部落格空間,簡單的設計正適合拿來當上傳類型GDL的第一篇教學~
空間特性:
1.每個麻蛙帳號有512MB的容量,允許建立至多20本相簿
2.單檔限制為 10MB,檔案格式如右列: bmp, jpg, jpeg, gif, png, zip, asf, avi, wmv, swf
3.圖片可連外
首先,我們先簡單的列出上傳GDL大約要作些什麼事:
取帳號 ----> 登入麻蛙 ----> 建立相本 ---->
取檔案 ----> 上傳檔案 ----> 取檔案連結
從上面的流程來看上傳類型的GDL,其實就與寫申請類型的GDL差不多~ 就格子填一填、選項拉一拉、其它的勾一勾、點一點而已…
而這些基礎功我已在先前花了粉長的篇幅來講解了!! 所以接下來教學的方式將會是以引導大家去依空間特性來規劃出理想的GDL程序為重點~
另,再次提醒,教學都是循序漸進的安排~! 若你對以下的教學,感覺像見到天書似的話,那就請你回頭從第一篇看起喔 !!
麻蛙空間雖然一個帳號有512MB的容量,但總不能把所有的雞蛋都擺在同一個籃子內吧!! 所以我們應該採用多帳號的方式來上傳所有的檔案~
每個帳號每次分享以一個相本為單位(方便回收),相本裏放10個檔左右就好(單檔約割8MB)~
比如我這次的分享共壓了180個檔案( 約1.4G),那就會需要18個帳號~ !
即是,18個帳號加入【帳號清單】中 、180個檔案加入【檔案清單】中~
好,那就可以開始來寫了~
取帳號&登入麻蛙:

GetACcount()
IFNo:end
go:http://www.mw.net.tw/
SetFieldValue:userid=***LoginID***
SetFieldValue:userps=***LoginPW***
ClickButton:登入
上面這段有問題的人重修吧!!
那每次都這樣寫,實在粉遜,這次我們改用PostData 來寫~
【03-網頁控制類】
還記得上篇剛教過的方式吧~
填入帳、密後按登入後,就切到DEBUG標籤去~

GetACcount()
IFNo:end
postdata:http://www.mw.net.tw/login.php?userid=***LoginID***&userps=***LoginPW***
不錯吧!! 簡潔又有力!!
接著就是來加一個是否成功登入的偵錯~ 這裏我就以成功登入後,右上角會出現的那個
登出 超連結為準~
GetACcount()
IFNo:end
Label:login
postdata:http://www.mw.net.tw/login.php?userid=***LoginID***&userps=***LoginPW***
Wait:tw/user/logout/,2,login
【03-網頁控制類】
建立相本:
go:http://www.mw.net.tw/cp.php?f=cat&type=album

這裏權限的部份,還是別讓指令自動生成,改設成只有自已看的見會比較安全~
那,基本的寫法我也不列了,直接列PostData 的寫法就好。其中d_g
固定用"自已",所以其值固定為1(可開DEBUG看值)。
所以這個頁面裏,只有相本名稱才需隨機生成~
RandomizeText:***Variable8***,axaxanxn
postdata:http://www.mw.net.tw/cp.php?f=cat&type=album?catname=***Variable8***&d_g=1&Submit=+%E5%BB%BA%E7%AB%8B%E7%9B%B8%E7%B0%BF+
那當然,還是再來加個偵錯! 我們挑頁面中會出現的部份字眼~
Label:add
RandomizeText:***Variable8***,axaxanxn
postdata:http://www.mw.net.tw/cp.php?f=cat&type=album?catname=***Variable8***&d_g=1&Submit=+%E5%BB%BA%E7%AB%8B%E7%9B%B8%E7%B0%BF+
FindWebText:全部檔案大小
IfNo:add
取檔案&上傳檔案
當我建好相本後,就會自動跳到如下的頁面~ 其中綠標的部份,即是我們剛才建立的相本名稱,大家可以切換到DEBUG去看,會有一個值!
就是此相本的代號~
再看一下這個頁面的網址,也會有同樣的值~

所以我們第一步要做的就是把相本代號取出!!
取法粉多看,自已想用哪種都行,像我是利用上傳頁的網址來取~
GetstrToVariable:***Url***,cid=,,***Variable1***
【 07-變數與其應用類 】
有了它後,每次上傳的定位點(即上傳頁)與最後要取連結時,就容易的多了~
那接著就是來處理一下上傳頁面的欄位~

如圖,就二個格子與一個按鈕而已,用指令自動成功的,就可以隨便搞定它!
SetFileValue:userfile[]=***File***
【03-網頁控制類】
SetFieldValue:usercaption[]=***FileName***
【03-網頁控制類】
ClickButton:upload
其中 相片說明 建議填上檔案名稱 !! 以防上傳後若被空間自動更名,還可以利用這個資訊來取回真實的檔案名稱~
而檔案那格,自動生成會直接幫我們補上 ***File*** ~
那我們就來好好比較一下這兩個長的粉像的欄位填入指令!!!
| |
SetFieldValue:欄位名稱=值 |
SetFileValue:欄位名稱=值,i
( i 指參數一之陣列index,為選擇性參數) |
| 適用範圍 |
INPUT(type=text、hidden)、TEXTAREA
|
INPUT(type=text、hidden、file)、TEXTAREA |
| 使用限制 |
無支援陣列型態之欄位名稱 |
執行此指令時,程式會自動置頂,會影響作業視窗 |
|
SetFileValue 指令的執行流程:
程式置頂 --> 把焦點移至參數一的欄位名稱上 ---> 用sendkey 的方式把參數二填上 (即鍵盤的 ctrl+v)
---> 失焦 ---> 比對參數一之值是否與參數二之值一樣 (若不符合則重新回到程式置頂繼續重覆)
----> 比對完成,將程序移往下一行 |
從上可看出,雖然 SetFileValue 具有 SetFieldValue
的所有功用!! 但我們還是不會去使用它,因為該指令需置頂,會影響到正在執行的作業視窗!!
所以我們只會在當欄位屬性是唯讀的情況下(type=file ),才會去用到 SetFileValue
這個指令!!
而要用這指令千萬要小心,一定要確保俱檔案欄位的該頁面已完全開啟,否則將會進去無限循環的比對中…
好! 了解後,接著就來看一下,上傳成功後,會有什麼字眼~

上面看到三個字串~ 其中"上傳完成" 就是上傳成功的關鍵字~
再來就是要等下面的 大縮圖完成產生…
------> 小縮圖完成產生… ,這樣才算是整個上傳完成了!!
那我們來整理一下上傳的過程~ (
取檔、進上傳頁面、填入檔案路徑、檔案名稱、按上傳、判斷是否成功上傳、等待縮圖制成)
GetFile()
IFNo:end
Label:up-point
go:http://www.mw.net.tw/cp.php?f=uploadpic&cid=***Variable1***
FindWebText:全部檔案大小
IfNo:up-point
SetFileValue:userfile[]=***File***
SetFieldValue:usercaption[]=***FileName***
ClickButton:upload
sleep()
FindWebText:上傳完成
IfNo:up-point
Label:wait_1
WaitWebText:小縮圖完成產生,3,wait_1

上面是指一個檔案的上傳~ 那我們現在改成十個檔案的上傳 !!! (
每個帳號每次分享以一個相本為單位(方便回收),相本裏放10個檔左右就好(單檔約割8MB) )
所以可在頭尾加上一個取得檔案清單資料的迴圈~
(
取檔、進上傳頁面、填入檔案路徑、檔案名稱、按上傳、判斷是否成功上傳、等待縮圖制成、若檔案清單還有資料則重回取檔)
Label:get_file
GetFile()
IFNo:end
Label:up-point
go:http://www.mw.net.tw/cp.php?f=uploadpic&cid=***Variable1***
FindWebText:全部檔案大小
IfNo:up-point
SetFileValue:userfile[]=***File***
SetFieldValue:usercaption[]=***FileName***
ClickButton:upload
sleep()
FindWebText:上傳完成
IfNo:up-point
Label:wait_1
WaitWebText:小縮圖完成產生,3,wait_1
FileLoop:get_file
不過這樣子,變成了是一次把那180個檔全傳完了!! 所以,得再加入一個傳完10個檔就離開上傳程序的機制 !!!
方法粉容易,只要利用一個分格符來作為是否跳出的判斷即可~
第一種方式即是在加入檔案時,直接填入 10 就行了 ~ (下圖紅框處)

第二種方式就是在【檔案清單】裏來處理~

有了分格符號後,就可以利用 FileBreakLoop:標記 這個指令來作為跳出上傳的記號!!
【00-清單處理類 】
Label:get_file
GetFile()
IFNo:end
Label:up-point
go:http://www.mw.net.tw/cp.php?f=uploadpic&cid=***Variable1***
FindWebText:全部檔案大小
IfNo:up-point
SetFileValue:userfile[]=***File***
SetFieldValue:usercaption[]=***FileName***
ClickButton:upload
sleep()
FindWebText:上傳完成
IfNo:up-point
Label:wait_1
WaitWebText:小縮圖完成產生,3,wait_1
FileBreakLoop:get_link
FileLoop:get_file
Label:get_link
在每個檔案上傳完成後,會先透過 FileBreakLoop: 指令來檢查檔案清單當下的資料是否為分格符!!
若是,則表示已傳完10個檔案了!! 所以接著我們就跳出上傳,改將程序移至 get_link 這個定位點!!
我們先整理一下到些為止的程序,才不會看的粉亂~ 
//取帳號&登入
GetACcount()
IFNo:end
Label:login
postdata:http://www.mw.net.tw/login.php?userid=***LoginID***&userps=***LoginPW***
Wait:tw/user/logout/,2,login
//建立相本&取得相本代號
Label:add
RandomizeText:***Variable8***,axaxanxn
postdata:http://www.mw.net.tw/cp.php?f=cat&type=album?catname=***Variable8***&d_g=1&Submit=+%E5%BB%BA%E7%AB%8B%E7%9B%B8%E7%B0%BF+
FindWebText:上傳圖片
IfNo:add
GetstrToVariable:***Url***,cid=,,***Variable1***
//上傳程序(連續上傳10個檔後跳出此程序)
Label:get_file
GetFile()
IFNo:end
Label:up-point
go:http://www.mw.net.tw/cp.php?f=uploadpic&cid=***Variable1***
FindWebText:全部檔案大小
IfNo:up-point
SetFileValue:userfile[]=***File***
SetFieldValue:usercaption[]=***FileName***
ClickButton:upload
sleep()
FindWebText:上傳完成
IfNo:up-point
Label:wait_1
WaitWebText:小縮圖完成產生,3,wait_1
FileBreakLoop:get_link
FileLoop:get_file
//--- 取相本內的所有檔案連結
Label:get_link
接著,我們就可以來取連結了~
這裏我們可利用剛才取得的相本代號,直接拉連結進去。
go:http://www.mw.net.tw/user/gdl-test/album/cat/***Variable1***

進入相本後,會看到我剛傳了八張圖的縮圖!! 但這裏沒有圖的真實連結,所以我們必需再進下一層去找!! 於是我們就再點第一張縮圖進去~
<a href="/user/gdl-test/album/2007/03/27/32099/325922"><img src="http://img.mw.net.tw/user/album/9456/32099/sma/325922.jpg"
id="img_resize_325922" alt="" /></a>
上面列的是第一張縮圖的原始碼。因為 連結的部份在此網頁裏重覆性太高,為了怕會按到其它的連結,所以我們得改用
連結文字 作為依據~
這裏我取的連結文字是 32099/sma/ 這部份,因為
32099是相本編號,前面我們已取過了,可以省下一些功夫~
clicklink:***Variable1***/sma/
進入下一層後,會看如下圖的模式~

這裏就有我們要的圖片真實連結、上傳檔案的原始名稱(相片說明) !!
那我們就可以利用 WebStrToVariable 來取 ~
【03-網頁控制類】
(使用此指令需特別注意!! 其二個 參數要以
NT偵測到的原始檔為準喔!!)
即是指按下NT 【檢視原始檔】鈕後,出現的內容才是NT 偵測到的網頁源始碼!!
並非是你在網頁上用右鍵選檢視源始檔看到源始碼!
<A href="javascript:popUpWindow('/image_popup.php?file=http://img.mw.net.tw/user/album/9456/32099/org/325929.gif')">
<IMG id=img_325929 title=點擊放大照片 alt=點擊放大照片 src="http://img.mw.net.tw/user/album/9456/32099/big/325929.jpg">
</A>
上面是圖片連結的原始碼,下面是相片說明(即上傳檔案的原始名稱)的原始碼~
<SPAN class=imgdesc>s_u_01_10011_01_01.gif</SPAN>
//--- 取檔案連結
WebStrToVariable:/image_popup.php?file=,')",***Variable2***
//--- 取原始檔名
WebStrToVariable:<SPAN class=imgdesc>,</,***Variable3***
//--- 輸出至【輸出清單中】
output:***Variable2***|***Variable3***
好,那這是第一張而已,還有剩下的七張要取!!
此時我們可以看到右上角,有個 開始 上一張
下一張 最後 的字眼~
那就們就再來看一下它的原始碼~
<SPAN>開始 上一張<A href="../325923">下一張</A><A href="../325929">最後</A>
</SPAN>
從這裏清楚可看出,只有 下一張、最後 是有連結的 !! 這是廢話,因為我們就在第一張圖片呀,所以 開始 與上一張 當然是沒用的嘛~
依此類推,你可以切到最後一張去,再看一下源碼(如下框所列),你會發現: 只有 開始、上一張 是有連結的。下一張與最後 都是純文字!!
<SPAN><A href="../325922">開始</A> <A href="../325928">上一張</A> 下一張 最後
</SPAN>
這樣一來就好辦法,只要運用 ClickLink: 指令的第二個參數,就可以輕易的把所有的圖片都取完了~
【03-網頁控制類】
ClickLink:連結文字或連結的一部份,標記名(選擇性參數) 點擊符合參數一之連結,並將程序移往標記處。若無設定標記,則程序往下行走
Label:mlu-page
//--- 取檔案連結
WebStrToVariable:/image_popup.php?file=,')",***Variable2***
//--- 取原始檔名
WebStrToVariable:<SPAN class=imgdesc>,</,***Variable3***
//--- 輸出至【輸出清單中】
output:***Variable2***|***Variable3***
ClickLink:下一張,mlu-page
上面的寫法即是說,若網頁中有 下一張 這個連結存在,那我就按下它,並將程序移至
mlu-page 這個定位點~
好,那再重新整理一次,到此為止的GDL
//取帳號&登入
GetACcount()
IFNo:end
Label:login
postdata:http://www.mw.net.tw/login.php?userid=***LoginID***&userps=***LoginPW***
Wait:tw/user/logout/,2,login
//建立相本&取得相本代號
Label:add
RandomizeText:***Variable8***,axaxanxn
postdata:http://www.mw.net.tw/cp.php?f=cat&type=album?catname=***Variable8***&d_g=1&Submit=+%E5%BB%BA%E7%AB%8B%E7%9B%B8%E7%B0%BF+
FindWebText:上傳圖片
IfNo:add
GetstrToVariable:***Url***,cid=,,***Variable1***
//上傳程序(連續上傳10個檔後跳出此程序)
Label:get_file
GetFile()
IFNo:end
Label:up-point
go:http://www.mw.net.tw/cp.php?f=uploadpic&cid=***Variable1***
FindWebText:全部檔案大小
IfNo:up-point
SetFileValue:userfile[]=***File***
SetFieldValue:usercaption[]=***FileName***
ClickButton:upload
sleep()
FindWebText:上傳完成
IfNo:up-point
Label:wait_1
WaitWebText:小縮圖完成產生,3,wait_1
FileBreakLoop:get_link
FileLoop:get_file
//--- 取相本內的所有檔案連結
Label:get_link
go:http://www.mw.net.tw/user/gdl-test/album/cat/***Variable1***
//--- 點第一張縮圖
clicklink:***Variable1***/sma/
Label:mlu-page
//--- 取檔案連結
WebStrToVariable:/image_popup.php?file=,')",***Variable2***
//--- 取原始檔名
WebStrToVariable:<SPAN class=imgdesc>,</,***Variable3***
//--- 輸出至【輸出清單中】
output:***Variable2***|***Variable3***
ClickLink:下一張,mlu-page
接下來,我們要加入的便是換帳號與收尾的動作~
Label:begin
//取帳號&登入
GetACcount()
IFNo:end
Label:login
....
....
Label:mlu-page
WebStrToVariable:/image_popup.php?file=,')",***Variable2***
WebStrToVariable:<SPAN class=imgdesc>,</,***Variable3***
output:***Variable2***|***Variable3***
ClickLink:下一張,mlu-page
AccountLoop:begin
Label:end
EXIT()
其中,黃色標記是用來換帳號的~
當我們完成了當下帳號的上傳後,接下來會用 AccountLoop
判斷一下,帳號清單中是否還有帳號可用~
【00-清單處理類 】
若還有,則程序移往 begin 這個定位點,即重覆 取帳號、登入、建相本、上傳、取連結
的動作 !!
若沒有,則程序往下,即是走到粉紅色標記的地方。也就是終止程序 !!
最後,附上完整的 麻蛙上傳GDL 如下~
Label:begin
//取帳號&登入
GetACcount()
IFNo:end
Label:login
postdata:http://www.mw.net.tw/login.php?userid=***LoginID***&userps=***LoginPW***
Wait:tw/user/logout/,2,login
//建立相本&取得相本代號
Label:add
RandomizeText:***Variable8***,axaxanxn
postdata:http://www.mw.net.tw/cp.php?f=cat&type=album?catname=***Variable8***&d_g=1&Submit=+%E5%BB%BA%E7%AB%8B%E7%9B%B8%E7%B0%BF+
FindWebText:上傳圖片
IfNo:add
GetstrToVariable:***Url***,cid=,,***Variable1***
//上傳程序(連續上傳10個檔後跳出此程序)
Label:get_file
GetFile()
IFNo:end
Label:up-point
go:http://www.mw.net.tw/cp.php?f=uploadpic&cid=***Variable1***
FindWebText:全部檔案大小
IfNo:up-point
SetFileValue:userfile[]=***File***
SetFieldValue:usercaption[]=***FileName***
ClickButton:upload
sleep()
FindWebText:上傳完成
IfNo:up-point
Label:wait_1
WaitWebText:小縮圖完成產生,3,wait_1
FileBreakLoop:get_link
FileLoop:get_file
//--- 取相本內的所有檔案連結
Label:get_link
go:http://www.mw.net.tw/user/gdl-test/album/cat/***Variable1***
//--- 點第一張縮圖
clicklink:***Variable1***/sma/
Label:mlu-page
//--- 取檔案連結
WebStrToVariable:/image_popup.php?file=,')",***Variable2***
//--- 取原始檔名
WebStrToVariable:<SPAN class=imgdesc>,</,***Variable3***
//--- 輸出至【輸出清單中】
output:***Variable2***|***Variable3***
ClickLink:下一張,mlu-page
AccountLoop:begin
Label:end
EXIT()
