miyouzi / aniGamerPlus

巴哈姆特動畫瘋自動下載工具,支援命令行
GNU General Public License v3.0
682 stars 95 forks source link

已更新 v22.0 目前似乎無法順利下載影片 #78

Open i1itione opened 3 years ago

i1itione commented 3 years ago

問題描述

在這裏詳細説明你遇到了什麽問題

無法順利下載影片,log 裡有顯示錯誤訊息。

如下:

2020-11-10 23:22:33 下載異常: sn=18460 發生未知錯誤: 'src' 2020-11-10 23:22:33 下載異常: sn=18460 異常詳情: Traceback (most recent call last): File "aniGamerPlus.py", line 228, in worker File "Anime.py", line 801, in download File "Anime.py", line 472, in __get_m3u8_dict File "Anime.py", line 422, in parse_playlist KeyError: 'src'

應該是最近這一、兩天才發生的現象。

miyouzi commented 3 years ago

明天我看看,目前你可以嘗試使用手機端解析

i1itione commented 3 years ago

原來和使用的解析模式有關啊!我之前有把 use mobile api 設為 true, 剛才試了一下改回預設值的 false 就可以正常下載影片了。

miyouzi commented 3 years ago

@kirbyloco mobile api 解析似乎加了限制,你能幫忙看看麽? image

kirbyloco commented 3 years ago

剛測試一下,mobile API的廣告時間被強制改回25以上, 也有可能是APP的規則改了 photo_2020-11-11_09-35-08

miyouzi commented 3 years ago

@kirbyloco 嘗試將配置的 mobile_ads_time 改成 25 確實就可以使用 mobile api 解析了,目前簡單的修補就是把 mobile_ads_time 的默認配置改成 25(不過這似乎就失去了使用 mobile api 解析的意義了)

目前確定沒法再使用 mobile api 縮短廣告時間了是嗎?那考慮可以做成備用解析,當Web解析失敗的時候自動切換。

另外 APP request 的完整 header 是什麽樣的,目前使用 mobile api 的 header 感覺破綻有點大 (比如 UA 還是用的瀏覽器)

kirbyloco commented 3 years ago

@miyouzi 確定不能用mobile API縮短廣告時間,目前mobile API唯一的優勢只有解析動畫的時候會比較快 我自己用mobile API有改過UA使用

抓包顯示如下:

GET /mobile_app/anime/v2/m3u8.php?sn=19183&device=056b317cd7853db5d825ccd83448211b95e393e63d3e4e515fab41948735 HTTP/1.1
User-Agent: Bahadroid (https://www.gamer.com.tw/)
X-Bahamut-App-InstanceId: cAJB-HprGUg
X-Bahamut-App-Android: tw.com.gamer.android.animad
X-Bahamut-App-Version: 177
Accept-Encoding: br,gzip
Host: api.gamer.com.tw
Connection: Keep-Alive
Cookie: nologinuser=0563bed83d6aa4b866899ad01f869e5dfc30ad298d0c8e3d5fab41948776; __cfduid=dc04d02a84939bc5875409b25bbc52d211605058959
miyouzi commented 3 years ago

@kirbyloco 那使用 mobile api 就照著這個來吧

if self._settings['use_mobile_api']:
    header = {
        "User-Agent": "Bahadroid (https://www.gamer.com.tw/)",
        "X-Bahamut-App-InstanceId": "cAJB-HprGUg",
        "X-Bahamut-App-Android": "tw.com.gamer.android.animad",
        "X-Bahamut-App-Version": "177",
        "Accept-Encoding": "br,gzip",
        "Connection": "Keep-Alive"
    }
else:
    header = {
        "user-agent": ua,
        "referer": ref,
        "accept-language": lang,
        "accept": accept,
        "accept-encoding": accept_encoding,
        "cache-control": cache_control,
        "origin": origin
    }

不過UA涉及到cookie刷新,順帶一提你的cookie是從APP抓的嗎?

kirbyloco commented 3 years ago

@miyouzi 帳號暫時被BAN了,可能要晚點測試, 但我猜cookies刷新應該可以直接用手機的UA。

miyouzi commented 3 years ago

@kirbyloco 其實之前的 commit 就寫好了使用 mobile api 解析時, cookie 被重置的話自動改回 web 解析的 header 去嘗試刷新 cookie (刷新完 header 再改回來),但還沒怎麽測試。

PS:這樣的話其實有被 ban 的風險,因爲動畫瘋是可以知道你從 web 取來的 cookie 去用在了 mobile api 上。

kirbyloco commented 3 years ago

@miyouzi 如果是這個問題,其實手機端的登入非常簡單, 可以寫個addons,然後再把cookies取出來。

miyouzi commented 3 years ago

@miyouzi 如果是這個問題,其實手機端的登入非常簡單, 可以寫個addons,然後再把cookies取出來。

@kirbyloco 是什麽樣的 addons?(Xposed?Root?還是用 APP 的登錄 api?)

kirbyloco commented 3 years ago

@miyouzi 我沒那麼厲害啦!(Xposed和Root的完全不會) 是用APP的登入API,可以參考 gamer_autosignin 登入的部分 也是參考別人的部分。

miyouzi commented 3 years ago

@kirbyloco 瞭解了,那有空可以做一個小工具用來取得 APP cookie。(比如用命令行模式調用 aniGamerPlus.py --get_app_cookie 然後提示用戶輸入 UID 和 PASSWD)

要做成自動切換解析的話 APP cookie 可能還得單獨出來一份 app_cookie.txt