fuo-qqmusic 1.0.9__tar.gz → 1.0.11__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fuo-qqmusic might be problematic. Click here for more details.
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/PKG-INFO +1 -1
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/README.md +6 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/provider.py +6 -4
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/provider_ui.py +20 -1
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic.egg-info/PKG-INFO +1 -1
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/setup.py +1 -1
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/__init__.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/api.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/assets/icon.svg +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/consts.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/excs.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/login.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic/schemas.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic.egg-info/SOURCES.txt +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic.egg-info/dependency_links.txt +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic.egg-info/entry_points.txt +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic.egg-info/requires.txt +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/fuo_qqmusic.egg-info/top_level.txt +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/setup.cfg +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/tests/test_api.py +0 -0
- {fuo_qqmusic-1.0.9 → fuo_qqmusic-1.0.11}/tests/test_provider.py +0 -0
|
@@ -20,6 +20,12 @@ pip3 install fuo-qqmusic
|
|
|
20
20
|
[操作示例](https://github.com/feeluown/feeluown-qqmusic/issues/6)。
|
|
21
21
|
|
|
22
22
|
## changelog
|
|
23
|
+
### 1.0.11 (2025-08-12)
|
|
24
|
+
- 尝试修复wx登录有时会失败的问题
|
|
25
|
+
|
|
26
|
+
### 1.0.10 (2025-07-29)
|
|
27
|
+
- 修复歌曲链接会失效的问题(仅 FeelUOwn>=4.1.14 可用)
|
|
28
|
+
|
|
23
29
|
### 1.0.9 (2025-07-24)
|
|
24
30
|
- 增加“重新登录”按钮(仅 FeelUOwn>=4.1.14 可用)
|
|
25
31
|
|
|
@@ -183,7 +183,7 @@ class QQProvider(AbstractProvider, ProviderV2):
|
|
|
183
183
|
return Media(q_media_mapping[quality.value])
|
|
184
184
|
|
|
185
185
|
def video_list_quality(self, video):
|
|
186
|
-
q_media_mapping = self._model_cache_get_or_fetch(video, "q_url_mapping")
|
|
186
|
+
q_media_mapping = self._model_cache_get_or_fetch(video, "q_url_mapping", ttl=3600)
|
|
187
187
|
return [Quality.Video(k) for k, v in q_media_mapping.items() if v]
|
|
188
188
|
|
|
189
189
|
def song_list_quality(self, song) -> List[Quality.Audio]:
|
|
@@ -223,9 +223,11 @@ class QQProvider(AbstractProvider, ProviderV2):
|
|
|
223
223
|
q_media_mapping, exists = song.cache_get("q_media_mapping")
|
|
224
224
|
if exists is True:
|
|
225
225
|
return q_media_mapping
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
# 根据过去经验,这个东西一段时间之后会过期。
|
|
227
|
+
# 具体多久,不是很清楚。
|
|
228
|
+
quality_suffix = self._model_cache_get_or_fetch(song, "quality_suffix", ttl=3600)
|
|
229
|
+
mid = self._model_cache_get_or_fetch(song, "mid", ttl=3600)
|
|
230
|
+
media_id = self._model_cache_get_or_fetch(song, "media_id", ttl=3600)
|
|
229
231
|
q_media_mapping = {}
|
|
230
232
|
# 注:self.quality_suffix 这里可能会触发一次网络请求
|
|
231
233
|
for idx, (q, t, b, s) in enumerate(quality_suffix):
|
|
@@ -38,8 +38,27 @@ class ProviderUI(AbstractProviderUi):
|
|
|
38
38
|
#
|
|
39
39
|
# - keys: ['skey']
|
|
40
40
|
url = os.getenv('FUO_QQMUSIC_LOGIN_URL', 'https://y.qq.com')
|
|
41
|
+
# NOTE(cosven): 经过一番探索,我‘观察’到,wx的快捷登录还挺方便,
|
|
42
|
+
# 它可以识别到我浏览器当前登录的wx账户。它是怎样识别到我的账户的呢?
|
|
43
|
+
# 理论上可以在第一次扫码的时候,在浏览器开发者工具中抓包,看 set-cookie 字段就知道了。
|
|
44
|
+
# 我目前怀疑是大概率是 _qimei 相关的字段,但不太确认,一下子也没找到很可靠的资料。
|
|
45
|
+
#
|
|
46
|
+
# 另外,值得备注的是,我发现登录后,会有一些 oauth 相关字段存在 cookie 里面,
|
|
47
|
+
# 对于wx登录这种方式来说,我猜测它没有被用上。猜测的依据是:每隔一两天,
|
|
48
|
+
# 无论是网页版,还是我们这里的逻辑,都需要通过“微信快捷登录”来登录。
|
|
49
|
+
# 而我们这里目前根本没用使用 refresh_token 做任何事情。
|
|
50
|
+
#
|
|
51
|
+
# 不过还是备注一下,wx 登录的话,下面字段或许可以用来刷新 cookie
|
|
52
|
+
# 'wxunionid', 'wxrefresh_token'
|
|
53
|
+
# qq 登录的话,下面几个字段或许可以用来刷新 cookie
|
|
54
|
+
# 'psrf_access_token_expiresAt',
|
|
55
|
+
# 'psrf_musickey_createtime',
|
|
56
|
+
# 'psrf_qqaccess_token',
|
|
57
|
+
# 'psrf_qqopenid',
|
|
58
|
+
# 'psrf_qqrefresh_token',
|
|
41
59
|
keys_str = os.getenv('FUO_QQMUSIC_LOGIN_COOKIE_KEYS',
|
|
42
|
-
'qqmusic_key,wxuin
|
|
60
|
+
('qqmusic_key,wxuin,qm_keyst'
|
|
61
|
+
'|qqmusic_key,uin,qm_keyst'))
|
|
43
62
|
self._dialog = LoginDialog(url, [keys.split(',') for keys in keys_str.split('|')])
|
|
44
63
|
self._dialog.login_succeed.connect(self.on_login_succeed)
|
|
45
64
|
self._dialog.show()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|