[觸動精靈]觸動精靈官方手冊流水帳3



如何創建本身的ftp

(最省事的辦法是直接找個免費的網絡空間 用這個空間的ftp作測試就好)html

http://soft.onlinedown.net/soft/8718.htm   FileZilla Server 0.9.43 中文版和對應的配置流程json


注意 ftp目錄必須是共享文件夾 不然會提示報錯  windows

http://www.xitongcheng.com/jiaocheng/win10_article_48002.html   win10下共享文件夾的建立安全

建立成功後 咱們能夠用局域網ip來嘗試訪問咱們剛剛創建好的ftp服務器  能夠正常使用 這個ftp服務器在當前網段的局域網內是能夠自由訪問的 更加複雜的就不深究了服務器

image


觸動下的ftp函數的使用整合

整合了下 彙總成一個函數網絡

--從指定的ftp服務器下載指定的文件 而後返回下載文件的內容 --參數ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath -- ftpPath="192.168.1.101"--默認端口就是21 這就不寫了 -- ftpUser="zjl"--ftp帳號 -- ftpPwd="123"--ftp密碼 -- ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--從ftp下載的文件放到哪裏 -- ftpDownloadPath="/1.txt"--要下載ftp服務器的文件路徑 --返回值 失敗了返回false 成功則返回下載的文件內容
function getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath) return try{ function () --下面代碼隨便寫 有可能拋出異常便可 
            local ts=require("ts") local status,dwStatus local result=false ts.ftp.setFTPTimeOut(15) --設置 FTP 超時時間 
            status = ts.ftp.connect(ftpPath,ftpUser,ftpPwd); if status then dwStatus = ts.ftp.download(ftpDownloadToPath,ftpDownloadPath) --下載服務器上文件到本地
                if dwStatus then                
                    if isFileExist(ftpDownloadToPath) then result=readFileString(ftpDownloadToPath) else
                        error("下載成功的文件並不存在") end
                    
                else
                    --toast("下載文件失敗", 1)
                    error("下載文件失敗") end ts.ftp.close()--斷開 這個是必需要寫的 
            else
                error("鏈接ftp服務器失敗") end
            
            return result end, catch{ function (errors) --這裏對應函數名要改
                local tempStr="" tempStr="函數[" .. tostring("getFtpFileContents") .. "] 錯誤信息:".. tostring(errors) traceprint(tempStr) dialog(tempStr, 3) end } } end
--使用實例
ftpPath="192.168.1.101"--默認端口就是21 這就不寫了
ftpUser="zjl" ftpPwd="123" ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--從ftp下載的文件放到哪裏
ftpDownloadPath="/1.txt"--要下載ftp服務器的文件路徑
 tempStr1=getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath) if tempStr1 then traceprint(tempStr1) else traceprint("沒有得到ftp文件內容") end


如何避免json字符串轉化表不崩潰app

通常而言我習慣中控文件的內容是 json字符串或者xml  這樣很是方便解析成表 可是有個問題 一旦傳遞進函數的不是json標準的字符串 那麼解析就會報錯函數

--json字符串轉換爲表 由於若是字符串不符合json標準 就會報錯 因此咱們這裏把這個功能封裝一下 錶轉化json字符串不用管除非傳遞進去的是函數變量 不然不會報錯 --使用的時候先判斷函數的返回結果是nil false 仍是真 是真的話天然返回的就是成功轉化的表 --[[ local temp3=jsonStrToTable(jsonstring) if temp3 then else traceprint("字符串不符合json標準 沒法轉化 啓用默認配置") temp3=defaultFtpConfig end --]]
function jsonStrToTable(jsonStr) return try{ function () --下面代碼隨便寫 有可能拋出異常便可 
            local ts=require("ts") local json = ts.json local result=false result=json.decode(jsonStr) return result end, catch{ function (errors) --這裏對應函數名要改
                local tempStr="" tempStr="函數[" .. tostring("jsonStrToTable") .. "] 錯誤信息:".. tostring(errors) traceprint(tempStr) --dialog(tempStr, 3)
                toast(tempStr) mSleep(3000) end } } end

我的理解的ftp在觸動下的用處

那就是做爲一個最簡易的中控平臺來使用 以上面創建起來的局域網ftp服務器爲例工具

假如 當前局域網內 有10臺手機運行觸動腳本  這些腳本均可以經過觸動提供的ftp函數來訪問 這個ftp服務器上的1.txt的內容測試

若是咱們想經過ftp服務器上的1.txt來控制這10臺手機的觸動腳本的運行 那麼應該如何寫


須要注意的是 一旦訪問不到ftp服務器  可是本機能夠正常訪問ftp服務器  檢查下本機的殺毒軟件 安全大師之類的 windows自帶的防火牆也關閉一下以防萬一  不少時候不是ftp服務器設置的問題 都是其餘的阻礙  我我的用的測試環境是雷電模擬器  要保證當前環境和ftp服務器在一個網段 雷電模擬器有橋接方式  我直接指定網關和局域網ip  這樣才能正常鏈接到ftp服務器

注意:蘋果手機下測試鏈接ftp服務器 工具選擇很重要 ftpmanage就總是提示權限不足 鏈接不上 換了nplayer就能夠正常鏈接和下載了

觸動ftp的假設中的實例

例子腳本基本流程:

--[[ =====腳本的基本流程==== 啓動app讀取當前帳號並登陸帳號
 簽到 檢查郵箱 整理揹包 買藥 --平常開始 平常沃瑪教主 --最多能夠打4次天天 平常祖瑪教主 --最多能夠打4次天天 平常赤月惡魔 --最多能夠打2次天天 平常火龍 --最多能夠打1次天天 平常副本挑戰 --最多能夠打2次天天 退出帳號 ====啓動app讀取當前帳號並登陸帳號 和 退出帳號是必須的 中間的這些模塊 均可以有 也能夠沒有 或者次數不必定就是固定的==== --]]

ftp端口:ftp端只有1個 1.txt的文件 內容是以下

--{"平常赤月惡魔":2,"平常火龍":1,"整理揹包":1,"平常沃瑪教主":2,"檢查郵箱":1,"平常副本挑戰":2,"平常祖瑪教主":4,"簽到":1}

意思就是 腳本基本流程中 除了第一個模塊和最後一個模塊 其餘模塊都是由這個字符串來控制執行次數的 好比  "簽到":1 表示簽到這模塊要執行一次  "平常沃瑪教主":2  沃瑪教主平常要執行2次 實際上天天最多執行4次 經過這個在ftp端的1.txt文件裏面的json字符串這個內容來控制其餘腳本的運行(只是隨便舉個例子 )

觸動代碼思路部分:

--[[ =====腳本的基本流程==== 啓動app讀取當前帳號並登陸帳號 簽到 檢查郵箱 整理揹包 買藥 --平常開始 平常沃瑪教主 --最多能夠打4次天天 平常祖瑪教主 --最多能夠打4次天天 平常赤月惡魔 --最多能夠打2次天天 平常火龍 --最多能夠打1次天天 平常副本挑戰 --最多能夠打2次天天 退出帳號 ====啓動app讀取當前帳號並登陸帳號 和 退出帳號是必須的 中間的這些模塊 均可以有 也能夠沒有 或者次數不必定就是固定的==== --]]

--方便理解 我就用漢字命名
local ts = require("ts")--使用擴展庫前必須插入這一句
local json = ts.json--使用 JSON 模塊前必須插入這一句
 FtpConfig={} --腳本配置表
 defaultFtpConfig={} --這個只是爲了萬一沒法從ftp獲取到正確的json字符串 就使用這個默認的腳本配置表
defaultFtpConfig["簽到"]=1 defaultFtpConfig["檢查郵箱"]=1 defaultFtpConfig["整理揹包"]=1 defaultFtpConfig["平常沃瑪教主"]=4 defaultFtpConfig["平常祖瑪教主"]=4 defaultFtpConfig["平常赤月惡魔"]=4 defaultFtpConfig["平常火龍"]=1 defaultFtpConfig["平常副本挑戰"]=2


--開始讀取帳號文件的帳號和密碼 
accountPath=userPath().."/res/test.txt"  --帳號文件位置
accountTable=readFile(accountPath) --讀取文件內容,返回一個 table
account=""  pwd=""  tempTable1={} tempTable2={} tempStr1=""

--ftp相關變量
ftpPath="192.168.1.101"--默認端口就是21 這就不寫了
ftpUser="zjl" ftpPwd="123" ftpDownloadToPath=userPath() .. "/res/ftp_1.txt"--從ftp下載的文件放到哪裏
ftpDownloadPath="/1.txt"--要下載ftp服務器的文件路徑

--整個循環是遍歷帳號密碼的
for k,v in pairs(accountTable) do
    
    if string.trim(v)~="" then--本行的帳號密碼信息不是空 纔會執行對應操做 爲空天然開始下個帳號的讀取
 tempTable1=strSplit(v,"-")--分析出帳號和密碼
        account=string.trim(tempTable1[1]) account=string.trim(tempTable1[2]) --訪問ftp 獲取腳本配置的json字符串 並轉化爲腳本配置表 
        tempStr1=getFtpFileContents(ftpPath,ftpUser,ftpPwd,ftpDownloadToPath,ftpDownloadPath) if tempStr1 then--判斷下是否從ftp取到了對應的json配置字符串
            --成功獲取了後 開始把json字符串轉化爲腳本配置表
            tempTable2=jsonStrToTable(jsonstring) if tempTable2 then
                --成功把json字符串轉化爲表 克隆默認配置表 省得污染它
                FtpConfig= deepCopyTable(tempTable2) else
                --轉化失敗 腳本配置表等於默認的配置表內容
                toast("從ftp獲取到的內容不是json字符串 用默認的配置表內容",3) FtpConfig=defaultFtpConfig mSleep(3000) end            
        else
            --根本沒從ftp獲取到任何符合要求的內容 天然是用默認的配置表內容
            toast("沒法從ftp獲取到任何符合要求的內容 用默認的配置表內容",3) FtpConfig=defaultFtpConfig mSleep(3000) end
        
        --啓動app讀取當前帳號並登陸帳號操做
        
        --簽到
        for i=1,tonumber( FtpConfig["簽到"]) do
            --簽到操做部分
        end
        --檢查郵箱
        for i=1,tonumber( FtpConfig["檢查郵箱"]) do
            --檢查郵箱操做部分
        end
        
        --整理揹包
        for i=1,tonumber( FtpConfig["整理揹包"]) do
            --整理揹包操做部分
        end
        --買藥
        for i=1,tonumber( FtpConfig["買藥"]) do
            --買藥操做部分
        end

        --平常開始
        --平常沃瑪教主 --最多能夠打4次天天
        for i=1,tonumber( FtpConfig["平常沃瑪教主"]) do
            --平常沃瑪教主操做部分
        end
        --平常祖瑪教主 --最多能夠打4次天天
        for i=1,tonumber( FtpConfig["平常祖瑪教主"]) do
            --平常祖瑪教主操做部分
        end
        --平常赤月惡魔 --最多能夠打2次天天
        for i=1,tonumber( FtpConfig["平常赤月惡魔"]) do
            --平常赤月惡魔操做部分
        end
        --平常火龍 --最多能夠打1次天天
        for i=1,tonumber( FtpConfig["平常火龍"]) do
            --平常火龍操做部分
        end
        --平常副本挑戰 --最多能夠打2次天天
        for i=1,tonumber( FtpConfig["平常副本挑戰"]) do
            --平常副本挑戰操做部分
        end

        --退出帳號
        
        --異常處理 應對上面出現的意外狀況進行處理 保證腳本順利的執行下個帳號
 mSleep(500) end

end




123

相關文章
相關標籤/搜索