iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Mobile Development

花30天做個Android小專案系列 第 10

Day10 - 補漏

今天事情比較多,沒啥進度,就先對先前的內容補點漏洞。

登入

進站畫面除了Day07的幾個Pattern以外還有其他的可能,詳細設定可以到Ptt的個人設定區>選擇進站畫面內查看,可以勾選的內容有以下這些:

  • 心情點播排行榜
  • 十大排行榜
  • 百大排行榜
  • 今日十大話題
  • 一週五十大話題
  • 今天上站人次(目前測試會出現兩頁)
  • 歷史上的今天
  • 精華區排行榜(目前測試後無畫面)
  • 看板人氣排行榜

頁面很多,可是後來發現好像根本沒必要考慮那麼多的Pattern,只要送出足夠多的q就能確保正確回到主功能表了。

private val loginResultPattern = arrayOf(
    "按任意鍵繼續",
    "您想刪除其他重複登入的連線嗎?",
    "密碼不對或無此帳號。請檢查大小寫及有無輸入錯誤。",
    "您要刪除以上錯誤嘗試的記錄嗎?",
    "【主功能表】",
)

Pattern與Day07唯一的差別只有第一點的"請按任意鍵繼續"改成了"按任意鍵繼續",這是因為若使用者的信件超出上限,在登入時Ptt會跳出以下訊息:
https://ithelp.ithome.com.tw/upload/images/20210924/20124602IwUNeodV73.png
並且若有錯誤嘗試的紀錄,"您要刪除以上錯誤嘗試的記錄嗎?"的頁面會介在這訊息與一開始的"請按任意鍵繼續"之間。因此我們需要把這兩個任意鍵繼續的訊息都判斷出來才行。

接著正如上面所提到的,只要送出足夠多的q,我們就能確保正確回到主功能表,因此下方程式需要修改的只有

// ...
0 -> { // "請按任意鍵繼續"
    if (hasPressedAnyKey) continue
    hasPressedAnyKey = true
    PttClient.getInstance().send("\r\n".toByteArray(BIG5))
    delay(500L)
}
// ...

修改為

// ...
0 -> { // "按任意鍵繼續"
    PttClient.getInstance().send("qqqqqqqqqqqqqqq")
    delay(500L)
}
// ...

其實照估算應該12~13個q就足夠了,但是保險起見我打了15個,反正在主功能表按再多次q也毫無反應,就只是個主功能表

找板

Day08的流程中我疏忽了一種情況,那就是當搜尋的字串只有一個看板符合時,並不會跳出相關資訊一覽表的訊息,而是在搜尋的內容中自動補完:
https://imgur.com/nyVMzMK.gif

因此使用的Pattern我多加了一項:

private val searchBoardPattern = arrayOf(
    "按空白鍵可列出更多項目",
    "相關資訊一覽表",
    "請輸入看板名稱" // <- new
)

這項必須要放在array的最後,否則在前面兩項的條件中也能被判斷出來,若回傳的判斷結果為此則將後面自動補完的看板名稱給解析出來,以下條件新增在Day08的do/while內

// ...
else if (ret == 2) {
    val searchResult = PttClient.getInstance().getScreen().split("\n")
    boardList.add(searchResult[1].substring(19).trim())
}
// ...

因為回傳的ret為2,走完後就離開do/while了。

目前需要補充的大概就這些,明天預計會做看板內搜尋文章及作者的部分了。


上一篇
Day09 - 使用PopupWindow顯示搜尋結果
下一篇
Day11 - 搜尋文章標題
系列文
花30天做個Android小專案30

尚未有邦友留言

立即登入留言