misiektoja/spotify_profile_monitor
GitHub: misiektoja/spotify_profile_monitor
一款实时追踪Spotify用户资料、粉丝关系和播放列表变更的Python监控工具,支持邮件通知和数据导出。
Stars: 51 | Forks: 11
# spotify_profile_monitor
-u "your_sp_dc_cookie_value" -r "your_spotify_app_client_id:your_spotify_app_client_secret"
```
或者如果你是[手动安装](#manual-installation):
```
python3 spotify_profile_monitor.py -u "your_sp_dc_cookie_value" -r "your_spotify_app_client_id:your_spotify_app_client_secret"
```
获取所有支持的命令行参数/标志列表:
```
spotify_profile_monitor --help
```
## 配置
### 配置文件
大多数设置可以通过命令行参数进行配置。
如果你想持久化存储配置,可以生成一个默认配置模板并将其保存到名为 `spotify_profile_monitor.conf` 的文件中:
```
# 在 macOS、Linux 或 Windows Command Prompt (cmd.exe) 上
spotify_profile_monitor --generate-config > spotify_profile_monitor.conf
# 在 Windows PowerShell 上(推荐以避免编码问题)
spotify_profile_monitor --generate-config spotify_profile_monitor.conf
```
编辑 `spotify_profile_monitor.conf` 文件并更改任何所需的配置选项(每项都有详细的注释说明)。
**v3.1 新增:** 该工具现在使用混合认证方式。当使用 `cookie` 或 `client` token 来源方法时,需要 OAuth app 凭证(`SP_APP_CLIENT_ID`、`SP_APP_CLIENT_SECRET`)来检索播放列表和用户信息。有关设置说明,请参阅 [Spotify OAuth App](#spotify-oauth-app) 部分。
**v2.9 新增:** 配置文件包含用于在控制台和邮件输出中启用/禁用音乐服务 URL(Apple Music、YouTube Music、Amazon Music、Deezer、Tidal)和歌词服务 URL(Genius、AZLyrics、Tekstowo.pl、Musixmatch、Lyrics.com)的选项。
### Spotify access token 来源
该工具支持四种获取 Spotify access token 的方法。
当你决定使用 `cookie` 或 `client` token 来源方法时,该工具使用**混合认证方式**,你还需要配置 **OAuth app 凭证**(`SP_APP_CLIENT_ID`、`SP_APP_CLIENT_SECRET`)用于检索播放列表和用户信息,如 [Spotify OAuth App](#spotify-oauth-app) 中所述。
token 来源方法可以通过 `TOKEN_SOURCE` 配置选项或 `--token-source` 标志进行配置。
**推荐:`cookie`**
使用 `sp_dc` cookie 从 Spotify web 端点检索 token。此方法设置简单,支持除获取拥有 access token 的账户的点赞曲目列表之外的所有功能(由于最近 Spotify token 的范围限制)。
自 3.1 版本起,由于 Spotify 在 2025 年 12 月 22 日引入的限制,除非用户是另一个用户拥有的播放列表上的合作者,否则它不再显示添加到用户个人资料的其他用户的播放列表。
**替代方案:`client`**
使用从 Spotify 桌面客户端捕获的凭证和基于 Protobuf 的登录流程。设置较为复杂,但支持所有功能。此方法适用于希望获得具有最广泛访问权限的长期有效 token 的高级用户。
自 3.1 版本起,由于 Spotify 在 2025 年 12 月 22 日引入的限制,除非用户是另一个用户拥有的播放列表上的合作者,否则它不再显示添加到用户个人资料的其他用户的播放列表。
**安全回退:`oauth_app`**
依赖官方 Spotify Web API(Client Credentials OAuth 流程)。此方法设置简单且使用安全,但有一些限制。以下功能**不**受支持:
- 查看粉丝/关注列表
- 访问关注数(仅追踪粉丝数;**2026 年 2 月后**:粉丝数也不可用)
- 获取最近播放的艺人列表
- 显示添加到用户个人资料的其他用户的播放列表(除非用户是其他用户拥有的播放列表上的合作者)
- 获取拥有 access token 的账户的点赞曲目列表
- 按名称搜索 Spotify 用户
**个人:`oauth_user`**
专门用于通过官方 Spotify Web API(Authorization Code OAuth 流程)追踪经过身份验证的用户自己的账户。我个人使用此模式来监控我自己账户的变更——例如新增或失去的粉丝/关注、我播放列表上的点赞,或合作者添加新歌时。你也可以使用此模式追踪其他用户。
此方法设置简单且使用安全,但有一些限制。
监控**你自己的账户**时,以下功能**不**受支持:
- 查看粉丝列表
- 查看完整的关注列表(仅有关注的艺人可用;关注的用户不包括在内)
- 按名称搜索 Spotify 用户
- **查看粉丝数(2026 年 2 月后)**
**注意**:如果你使用 `oauth_user` 监控自己的账户,该工具将列出你所有的播放列表,包括私有的。
在此模式下监控**其他用户**时,以下功能**不**受支持:
- 查看粉丝/关注列表
- 访问关注数(仅追踪粉丝数;**2026 年 2 月后**:粉丝数也不可用)
- 获取最近播放的艺人列表
- 显示添加到用户个人资料的其他用户的播放列表(除非用户是其他用户拥有的播放列表上的合作者)
- 按名称搜索 Spotify 用户
如果未指定方法,该工具默认使用 `cookie` 方法。
**重要**:如果你通过 `cookie` 或 `client` 方法获取 access token,强烈建议为此工具使用单独的 Spotify 账户。这些方法与内部未记录的端点交互以实现许多功能(如检索粉丝/关注列表、关注数或最近播放的艺人)。如果你更倾向于使用常规 Spotify 账户,请考虑 `oauth_app` 或 `oauth_user` 方法——虽然它们有一些限制,但该工具在它们之上仍能完全正常运行。话虽如此,虽然我从未在自己的账户上遇到过任何问题,但我无法保证 Spotify 将来不会施加限制——特此警告。
#### Spotify sp_dc Cookie
这是用于获取 Spotify access token 的默认方法。
- 在 Web 浏览器中登录 [https://open.spotify.com/](https://open.spotify.com/)。
- 找到并复制 `sp_dc` cookie 的值。
- 使用你的 Web 浏览器开发者控制台或 cgagnier 的 **Cookie-Editor** 轻松提取它:[https://cookie-editor.com/](https://cookie-editor.com/)
- 使用以下方法之一提供 `SP_DC_COOKIE` 密钥:
- 在运行时使用 `-u` / `--spotify-dc-cookie` 传递
- 将其设置为[环境变量](#storing-secrets)(例如 `export SP_DC_COOKIE=...`)
- 将其添加到 [.env 文件](#storing-secrets)(`SP_DC_COOKIE=...`)以持久使用
- 回退:硬编码在代码或配置文件中
如果你的 `sp_dc` cookie 过期,该工具将通过控制台和邮件通知你。在这种情况下,你需要获取新的 `sp_dc` cookie 值。
如果你将 `SP_DC_COOKIE` 存储在 dotenv 文件中,你可以更新其值并发送 `SIGHUP` 信号来重新加载包含新 `sp_dc` cookie 的文件,而无需重启工具。更多信息请参阅 [存储密钥](#storing-secrets) 和 [信号控制](#signal-controls-macoslinuxunix)。
#### Spotify 桌面客户端
这是用于获取 Spotify access token 的替代方法,它使用从真实会话拦截的凭证模拟从真实 Spotify 面应用登录。
- 运行你选择的拦截代理(如 [Proxyman](https://proxyman.com) —— 试用版即足够)
- 为 `spotify.com` 域启用 SSL 流量解密
- 在 Proxyman 中:点击 **Tools → SSL Proxying List → + button → Add Domain → 粘贴 `*.spotify.com` → Add**
- 启动 Spotify 桌面客户端,然后切换到你的拦截代理(如 Proxyman)并查找发往 `https://login5.spotify.com/v3/login` 的 POST 请求
- 如果你没有看到此请求,请尝试以下步骤(一旦成功即停止):
- 重启 Spotify 桌面客户端
- 从 Spotify 桌面客户端注销并重新登录
- 在其设置中直接将 Spotify 指向拦截代理,即在 **Spotify → Settings → Proxy Settings** 中,设置:
- **proxy type**:`HTTP`
- **host**:`127.0.0.1`(你代理的 IP/FQDN,对于 Proxyman 使用你在顶部栏看到的 IP)
- **port**:`9090`(你代理的端口,对于 Proxyman 使用你在顶部栏看到的端口)
- 重启应用;由于 QUIC (HTTP/3) 需要原始 UDP 且无法通过 HTTP CONNECT 隧道传输,Spotify 将降级为仅 TCP 的 HTTP/2 或 1.1,拦截代理可以解密
- 使用你选择的防火墙在操作系统级别阻止 Spotify 的 UDP 端口 443 —— 这可以防止 QUIC (HTTP/3),强制 TLS over TCP 并允许拦截代理执行 MITM
- 尝试旧版本的 Spotify 桌面客户端
- 将登录请求体(二进制 Protobuf payload)导出到文件(例如 ***login-request-body-file***)
- 在 Proxyman 中:**右键点击请求 → Export → Request Body → Save File**。
` 运行工具:
```
spotify_profile_monitor --token-source client -w
```
如果成功,该工具将自动提取必要的字段并开始监控。
你可以通过设置 `LOGIN_REQUEST_BODY_FILE` 配置选项来持久化 Protobuf 登录请求文件路径,而不是每次都使用 `-w` 标志。
`--token-source client` 标志也是如此 —— 你可以通过将 `TOKEN_SOURCE` 配置选项设置为 `client` 来持久化它。
该工具将使用拦截到的 refresh token 自动刷新 access token 和 client token。
如果你的 refresh token 过期,该工具将通过控制台和邮件通知你。在这种情况下,你需要重新导出登录请求体。
如果你将登录请求体重新导出为相同的文件名,你可以发送 `SIGHUP` 信号来重新加载包含新 refresh token 的文件,而无需重启工具。更多信息请参阅 [信号控制](#signal-controls-macoslinuxunix)。
提供了高级选项以供进一步自定义 —— 请参阅配置文件注释。但是,默认设置适用于大多数用户,通常**不**建议修改其他值。
#### Spotify OAuth App
可作为独立模式使用,也可作为 `cookie` 或 `client` token 来源方法的次要模式,用于检索播放列表和用户信息(由于 Spotify 在 2025 年 12 月 22 日引入的限制,这是必需的)。
此方法使用官方 Spotify Web API(Client Credentials OAuth 流程)。
获取凭证:
- 登录 [Spotify Developer dashboard](https://developer.spotify.com/dashboard)
- 创建新应用
- 对于 **Redirect URL**,使用:`http://127.0.0.1:1234`
- URL 必须与显示的完全一致,包括末尾没有 `/`
- 右键复制链接时,某些浏览器可能会在 URL 中添加额外的 `/`
- 选择 **Web API** 作为预期的 API
- 复制 **Client ID** 和 **Client Secret**
- 使用以下方法之一提供 `SP_APP_CLIENT_ID` 和 `SP_APP_CLIENT_SECRET` 密钥:
- 在运行时使用 `-r` / `--oauth-app-creds` 传递(使用 `SP_APP_CLIENT_ID:SP_APP_CLIENT_SECRET` 格式 —— 注意冒号分隔符)
- 将其设置为[环境变量](#storing-secrets)(例如 `export SP_APP_CLIENT_ID=...; export SP_APP_CLIENT_SECRET=...`)
- 将其添加到 [.env 文件](#storing-secrets)(`SP_APP_CLIENT_ID=...` 和 `SP_APP_CLIENT_SECRET=...`)以持久使用
- 回退:硬编码在代码或配置文件中
示例:
```
spotify_profile_monitor --token-source oauth_app -r "your_spotify_app_client_id:your_spotify_app_client_secret"
```
该工具会自动刷新 OAuth app access token,因此它可以无限期保持有效。Token 缓存在 `SP_APP_TOKENS_FILE` 配置选项指定的文件中(默认:`.spotify-profile-monitor-oauth-app.json`)。
如果你将 `SP_APP_CLIENT_ID` 和 `SP_APP_CLIENT_SECRET` 存储在 dotenv 文件中,你可以更新它们的值并发送 `SIGHUP` 信号来重新加载包含新密钥值的文件,而无需重启工具。更多信息请参阅 [存储密钥](#storing-secrets) 和 [信号控制](#signal-controls-macoslinuxunix)。
你也可以通过将 `TOKEN_SOURCE` 设置为 `oauth_app` 来将此方法用作独立的 token 来源(不使用 `cookie` 或 `client`),但这有一些限制,如 [Spotify access token 来源](#spotify-access-token-source) 部分所述。
#### Spotify OAuth User
此方法使用官方 Spotify Web API(Authorization Code OAuth 流程)。
- 登录 Spotify Developer dashboard:https://developer.spotify.com/dashboard
- 创建新应用
- 对于 **Redirect URL**,使用:http://127.0.0.1:1234
- URL 必须与显示的完全一致,包括末尾没有 /
- 右键复制链接时,某些浏览器可能会在 URL 中添加额外的 /
- 选择 **Web API** 作为预期的 API
- 复制 **Client ID** 和 **Client Secret**(如果你使用 `PKCE` 模式,则不需要密钥)
- 使用以下方法之一提供 `SP_USER_CLIENT_ID` 和 `SP_USER_CLIENT_SECRET` 密钥:
- 在运行时使用 `-n` / `--oauth-user-creds` 传递
- 使用 `SP_USER_CLIENT_ID`:`SP_USER_CLIENT_SECRET` 格式 —— 注意冒号分隔符
- 将其设置为[环境变量](#storing-secrets)(例如 `export SP_USER_CLIENT_ID=...; export SP_USER_CLIENT_SECRET=...`)
- 将其添加到 [.env 文件](#storing-secrets)(`SP_USER_CLIENT_ID=...` 和 `SP_USER_CLIENT_SECRET=...`)以持久使用
- 回退:硬编码在代码或配置文件中
要使用 `PKCE` 模式,请将 SP_USER_CLIENT_SECRET 设置为空字符串("")。
你可以使用与 [Spotify OAuth App](#spotify-oauth-app) 相同的 client ID 和密钥值。
示例:
```
spotify_profile_monitor --token-source oauth_user -n "your_spotify_user_client_id:your_spotify_user_client_secret"
```
该工具负责刷新 access token,因此它应该无限期保持有效。
如果你将 `SP_USER_CLIENT_ID` 和 `SP_USER_CLIENT_SECRET` 存储在 dotenv 文件中,你可以更新它们的值并发送 `SIGHUP` 信号来重新加载包含新密钥值的文件,而无需重启工具。更多信息请参阅 [存储密钥](#storing-secrets) 和 [信号控制](#signal-controls-macoslinuxunix)。
### 如何获取好友的用户 URI ID
最简单的方法是通过 Spotify 桌面或移动客户端:
- 进入你好友的个人资料
- 点击**三个点** (•••) 或按 **Share** 按钮
- 复制个人资料链接
你会得到一个像这样的 URL:[https://open.spotify.com/user/spotify_user_uri_id?si=tracking_id](https://open.spotify.com/user/spotify_user_uri_id?si=tracking_id)
提取 `/user/` 和 `?si=` 之间的部分 —— 在这个例子中是:`spotify_user_uri_id`
将其用作用户 URI ID(`spotify_user_uri_id`)在工具中使用。
或者,你可以使用内置功能搜索用户名(`-s` 标志)来获取用户 URI ID:
```
spotify_profile_monitor -s "user name"
```
它将列出所有具有该名称的用户及其用户 URI ID。
在使用此功能之前,请确保你遵循了[此处](#spotify-sha256-optional)的说明。
### Spotify sha256(可选)
此步骤是可选的,仅当你想要使用在 Spotify 目录中搜索具有特定名称的用户以获取其 Spotify 用户 URI ID(`-s` 标志)的功能时才需要。为此,你必须拦截 Spotify 客户端的网络流量并提取所需的 `sha256Hash` 值。
- 运行你选择的拦截代理(如 [Proxyman](https://proxyman.com))。
- 启动 Spotify 桌面客户端并搜索某个用户
- 查找带有 `searchUsers` 或 `searchDesktop` 操作名称的请求
- 显示其中一个请求的详细信息并复制 **sha256Hash** 参数值(下面标记为 `XXXXXXXXXX` 的字符串)
示例请求:
`https://api-partner.spotify.com/pathfinder/v1/query?operationName=searchUsers&variables={"searchTerm":"spotify_user_uri_id","offset":0,"limit":5,"numberOfTopResults":5,"includeAudiobooks":false}&extensions={"persistedQuery":{"version":1,"sha256Hash":"XXXXXXXXXX"}}`
- 使用以下方法之一提供 `SP_SHA256` 密钥:
- 将其设置为[环境变量](#storing-secrets)(例如 `export SP_SHA256=...`)
- 将其添加到 [.env 文件](#storing-secrets)(`SP_SHA256=...`)以持久使用
- 回退:硬编码在代码或配置文件中
### 时区
默认情况下,时区使用 `tzlocal` 自动检测。你可以在 `spotify_profile_monitor.conf` 中手动设置:
```
LOCAL_TIMEZONE='Europe/Warsaw'
```
你可以像这样获取 pytz 支持的所有时区列表:
```
python3 -c "import pytz; print('\n'.join(pytz.all_timezones))"
```
### SMTP 设置
如果你想使用邮件通知功能,请在 `spotify_profile_monitor.conf` 文件中配置 SMTP 设置。
使用 `--send-test-email` 标志验证你的 SMTP 设置(工具将尝试发送测试邮件通知):
```
spotify_profile_monitor --send-test-email
```
### 存储密钥
建议将 `SP_DC_COOKIE`、`SP_APP_CLIENT_ID`、`SP_APP_CLIENT_SECRET`、`SP_USER_CLIENT_ID`、`SP_USER_CLIENT_SECRET`、`REFRESH_TOKEN`、`SP_SHA256` 或 `SMTP_PASSWORD` 等密钥存储为环境变量或 dotenv 文件。
在 **Linux/Unix/macOS/WSL** 系统上使用 `export` 设置所需的环境变量:
```
export SP_DC_COOKIE="your_sp_dc_cookie_value"
export SP_APP_CLIENT_ID="your_spotify_app_client_id"
export SP_APP_CLIENT_SECRET="your_spotify_app_client_secret"
export SP_USER_CLIENT_ID="your_spotify_user_client_id"
export SP_USER_CLIENT_SECRET="your_spotify_user_client_secret"
export REFRESH_TOKEN="your_spotify_app_refresh_token"
export SP_SHA256="your_spotify_client_sha256"
export SMTP_PASSWORD="your_smtp_password"
```
在 **Windows Command Prompt** 上使用 `set` 代替 `export`,在 **Windows PowerShell** 上使用 `$env`。
或者将它们持久化存储在 dotenv 文件中(推荐):
```
SP_DC_COOKIE="your_sp_dc_cookie_value"
SP_APP_CLIENT_ID="your_spotify_app_client_id"
SP_APP_CLIENT_SECRET="your_spotify_app_client_secret"
SP_USER_CLIENT_ID="your_spotify_user_client_id"
SP_USER_CLIENT_SECRET="your_spotify_user_client_secret"
REFRESH_TOKEN="your_spotify_app_refresh_token"
SP_SHA256="your_spotify_client_sha256"
SMTP_PASSWORD="your_smtp_password"
```
默认情况下,工具将在当前目录及其上级目录中自动搜索名为 `.env` 的 dotenv 文件。
你可以使用 `DOTENV_FILE` 或 `--env-file` 标志指定自定义文件:
```
spotify_profile_monitor --env-file /path/.env-spotify_profile_monitor
```
你也可以使用 `DOTENV_FILE = "none"` 或 `--env-file none` 禁用 `.env` 自动搜索:
```
spotify_profile_monitor --env-file none
```
作为回退,你也可以将密钥存储在配置文件或源代码中。
## 用法
### 监控模式
要监控特定用户的所有个人资料变更(包括播放列表),只需键入 [Spotify 用户 URI ID](#how-to-get-a-friends-user-uri-id) 作为命令行参数(下面示例中的 `spotify_user_uri_id`):
```
spotify_profile_monitor
```
如果你使用默认方法获取 Spotify access token(`cookie`)且尚未设置 `SP_DC_COOKIE` 密钥,可以使用 `-u` 标志:
```
spotify_profile_monitor -u "your_sp_dc_cookie_value"
```
**注意:** 现在需要 OAuth app 凭证来检索播放列表和用户信息。如果你尚未通过环境变量或 `.env` 文件设置 `SP_APP_CLIENT_ID` 和 `SP_APP_CLIENT_SECRET`,可以使用 `-r` 标志:
```
spotify_profile_monitor -u "your_sp_dc_cookie_value" -r "your_spotify_app_client_id:your_spotify_app_client_secret"
```
有关详细的设置说明,请参阅 [Spotify OAuth App](#spotify-oauth-app)。
默认情况下,工具会在以下位置查找名为 `spotify_profile_monitor.conf` 的配置文件:
- 当前目录
- 主目录(`~`)
- 脚本目录
如果你按照[配置](#configuration)中的描述生成了配置文件,但以不同的名称保存在不同的目录中,你可以使用 `--config-file` 标志指定其位置:
```
spotify_profile_monitor --config-file /path/spotify_profile_monitor_new.conf
```
默认情况下,仅获取用户拥有的公开播放列表。要更改此行为:
- 将 `GET_ALL_PLAYLISTS` 设置为 `True`
- 或使用 `-k` 标志
```
spotify_profile_monitor -k
```
这有助于处理由其他用户创建并添加到另一个用户个人资料的播放列表。
某些用户不会在其个人资料中列出他们所有的公开播放列表,但如果你知道播放列表的 URI,你仍然可以监控它。
为此,请向 `ADD_PLAYLISTS_TO_MONITOR` 配置选项添加条目。示例:
```
ADD_PLAYLISTS_TO_MONITOR = [
{'uri': 'spotify:playlist:{playlist_id1}', 'owner_name': '{user_id}', 'owner_uri': 'spotify:user:{user_id}'},
{'uri': 'spotify:playlist:{playlist_id2}', 'owner_name': '{user_id}', 'owner_uri': 'spotify:user:{user_id}'}
]
```
将 `{playlist_id1}` 和 `{playlist_id2}`替换为你想要监控的播放列表 URI ID,将 `{user_id}` 替换为所有者的 URI ID(`spotify_user_uri_id`)。
如果你想完全禁用检测用户公开播放列表中的变更(如播放列表中添加/移除的曲目、播放列表名称和描述变更、播放列表点赞数):
- 将 `DETECT_CHANGES_IN_PLAYLISTS` 设置为 `False`
- 或使用 `-q` 标志
```
spotify_profile_monitor -q
```
如果你想跳过某些用户的播放列表处理,可以使用 `PLAYLISTS_TO_SKIP_FILE` 或 `-t` 标志(更多信息见[此处](#playlist-blacklisting))
```
spotify_profile_monitor -t ignored_playlists
```
该工具运行直到被中断(`Ctrl+C`)。使用 `tmux` 或 `screen` 保持持久运行。
你可以通过运行脚本的多个副本来监控多个 Spotify 用户。
该工具自动将其输出保存到 `spotify_profile_monitor_.log` 文件。日志文件名可以通过 `SP_LOGFILE` 配置选项更改,其后缀可以通过 `FILE_SUFFIX` / `-y` 标志更改。可以通过 `DISABLE_LOGGING` / `-d` 标志完全禁用日志记录。
该工具还将关注、粉丝和播放列表列表保存到这些文件:
- `spotify_profile__followings.json`
- `spotify_profile__followers.json`
- `spotify_profile__playlists.json`
多亏了这一点,我们可以在工具重启后检测变更。
该工具还将用户头像保存到 `spotify_profile_{user_uri_id/file_suffix}_pic*.jpeg` 文件。
### 列表模式
该工具还有另一种模式,用于显示各种请求的信息。
如果你想显示特定 Spotify 播放列表 URL 的详细信息(即其名称、描述、曲目数、点赞数、总时长、创建和最后更新日期、曲目列表及其添加时间信息),则使用 `-l` 标志:
```
spotify_profile_monitor -l "https://open.spotify.com/playlist/playlist_uri_id"
```
-i
```
-i -k
```
如果你想额外将用户的每个播放列表导出到单独的 .CSV 文件(以播放列表名称命名并经过清理),请使用 `--export-all-playlists` 标志(需要 `pathvalidate` 库):
```
spotify_profile_monitor -i --export-all-playlists
```
如果你想完全禁用处理用户的公开播放列表,同时显示特定 Spotify 用户个人资料 URL 的详细信息(以加快处理速度),你可以使用 `-q` 标志:
```
spotify_profile_monitor -i -q
```
如果你只想显示用户的关注和粉丝列表(`-f` 标志):
```
spotify_profile_monitor -f
```
如果你想显示最近播放的艺人列表(此功能仅在用户在其设置中启用时才有效),请使用 `-a` 标志:
```
spotify_profile_monitor -a
```
如果你想在 Spotify 目录中搜索具有特定名称的用户以获取其 Spotify 用户 URI ID(`-s` 标志):
```
spotify_profile_monitor -s "user name"
```
### 邮件通知
要为所有用户个人资料变更(包括播放列表)启用邮件通知:
- 将 `PROFILE_NOTIFICATION` 设置为 `True`
- 或使用 `-p` 标志
```
spotify_profile_monitor -p
```
要禁用发送关于新粉丝/关注的邮件(当启用 `-p` 标志时默认发送这些):
- 将 `FOLLOWERS_FOLLOWINGS_NOTIFICATION` 设置为 `False`
- 或使用 `-g` 标志
```
spotify_profile_monitor -p -g
```
要禁用错误时发送邮件(默认启用):
- 将 `ERROR_NOTIFICATION` 设置为 `False`
- 或使用 `-e` 标志
```
spotify_profile_monitor -e
```
确保你之前已定义 SMTP 设置(见 [SMTP 设置](#smtp-settings))。
示例邮件:
-b spotify_profile_changes_spotify_user.csv
```
如果文件不存在,将自动创建。
### 检测变更的头像
该工具可以检测被监控用户何时更改了他们的头像。通知会显示在控制台和(如果启用了 `-p` 标志)邮件中。
此功能默认启用。要禁用它,可以:
- 将 `DETECT_CHANGED_PROFILE_PIC` 设置为 `False`
- 或使用 `-j` 标志
#### 工作原理
由于 Spotify 会定期更改头像 URL,即使图像相同,该工具也会对 JPEG 文件执行二进制比较以检测实际变更。
首次运行时,它将当前头像保存到 `spotify_profile__pic.jpeg`
在随后的每次检查中,会获取新图像,并将其与保存的图像逐字节比较。
如果检测到变更,旧图片将移动到 `spotify_profile__pic_old.jpeg`,新图片保存到:
- `spotify_profile__pic.jpeg`(当前)
- `spotify_profile__pic_YYmmdd_HHMM.jpeg`(用于历史记录)
### 在终端中显示图片
如果你安装了 `imgcat`,你可以启用直接在终端中内联显示头像和播放列表封面。
为此,请在 `IMGCAT_PATH` 配置选项中设置 `imgcat` 二进制文件的路径。
如果你只指定二进制名称,它将在你的 PATH 中自动搜索。
将其设置为空以禁用此功能。
### 播放列表黑名单
默认情况下,所有 Spotify 拥有的播放列表都会跳过处理,即该工具不会获取或报告其变更的曲目和点赞数。这是因为它们通常是动态生成的,在点赞数方面变化量大,有时曲目也是如此。你可以通过将 `IGNORE_SPOTIFY_PLAYLISTS` 设置为 `False` 来更改此行为。
除此之外,你还可以使用 `PLAYLISTS_TO_SKIP_FILE` / `-t` 标志,它允许你指示包含要加入黑名单的额外播放列表的文件。
该文件可以包含引用播放列表 URI 和 URL 以及播放列表所有者名称、URI 和 URL 的行。以下是一个包含可接受条目的 `ignored_playlists` 文件示例:
```
playlist_uri_id
spotify:playlist:playlist_uri_id
https://open.spotify.com/playlist/playlist_uri_id
https://open.spotify.com/playlist/playlist_uri_id?si=1
Some User Name
user_uri_id
spotify:user:user_uri_id
https://open.spotify.com/user/user_uri_id?si=1
```
如果需要,你可以用 # 注释掉特定行。
如果某些播放列表被列入黑名单,将有相应的消息。例如:
```
- 'Afternoon Acoustic' [ IGNORED ]
[ https://open.spotify.com/playlist/37i9dQZF1DX4E3UdUs7fUx?si=1 ]
[ songs: 100, likes: 2164491, collaborators: 0 ]
[ owner: Spotify ]
[ date: Fri 23 Aug 2024, 17:05:15 - 7 months, 10 hours, 27 minutes ago ]
[ update: Fri 23 Aug 2024, 17:05:15 - 7 months, 10 hours, 27 minutes ago ]
'Unwind and let the afternoon unfold.'
```
### 受限播放列表 (Spotify API 404)
某些播放列表(尤其是 Spotify 策划的)可能出现在个人资料页面上,但在公开的 `/v1/playlists/{id}` 端点上返回 `404`。
在这种情况下,该工具将它们标记为 `[ RESTRICTED ]`,并回退到个人资料视图元数据(`public_playlists`),而不是将其视为一般处理错误。
对于受限播放列表,该工具可以监控:
- 从个人资料中添加/移除
- 播放列表名称变更
- 点赞/粉丝数变更(当个人资料视图中可用时)
对于受限播放列表,该工具无法监控:
- 曲目级别的变更
- 合作者
- 描述变更
- 从曲目历史派生的创建/最后更新时间戳
### 检查间隔
如果你想自定义轮询间隔,请使用 `-c` 标志(或 `SPOTIFY_CHECK_INTERVAL` 配置选项):
```
spotify_profile_monitor -c 900
```
### 信号控制
该工具实现了几个信号处理程序,允许在无需使用新配置选项/标志重启工具的情况下更改工具的行为。
支持的信号列表:
| Signal | 描述 |
| ----------- | ----------- |
| USR1 | 切换用户个人资料变更的邮件通知 (-p) |
| TRAP | 增加个人资料检查计时器(5 分钟) |
| ABRT | 减少个人资料检查计时器(5 分钟) |
| HUP | 从 .env 文件重新加载密钥,并从 Protobuf 文件重新加载 token 来源凭证 |
使用 `kill` 或 `pkill` 发送信号,例如:
```
pkill -USR1 -f "spotify_profile_monitor "
```
由于 Windows 支持有限数量的信号,此功能仅在 Linux/Unix/macOS 上可用。
### 使用 GRC 为日志输出着色
你可以使用 [GRC](https://github.com/garabik/grc) 为日志着色。
添加到你的 GRC 配置(`~/.grc/grc.conf`):
```
# monitoring 日志文件
.*_monitor_.*\.log
conf.monitor_logs
```
现在将 [conf.monitor_logs](https://raw.githubusercontent.com/misiektoja/spotify_profile_monitor/refs/heads/main/grc/conf.monitor_logs) 复制到你的 `~/.grc/`,在使用 `grc` 工具时日志文件应该会有很好的颜色。
示例:
```
grc tail -F -n 100 spotify_profile_monitor_.log
```
## 调试工具
为了帮助故障排除和开发,相关的 [spotify_monitor](https://github.com/misiektoja/spotify_monitor) 项目的 [debug](https://github.com/misiektoja/spotify_monitor/tree/dev/debug) 目录中提供了两个调试实用程序。
### 通过 sp_dc Cookie 和 TOTP 获取 Access Token
[spotify_monitor_totp_test](https://github.com/misiektoja/spotify_monitor/blob/dev/debug/spotify_monitor_totp_test.py) 工具使用 Web Player `sp_dc` cookie 和 TOTP 参数检索 Spotify access token。
从[这里](https://github.com/misiektoja/spotify_monitor/blob/dev/debug/spotify_monitor_totp_test.py)下载或:
```
wget https://raw.githubusercontent.com/misiektoja/spotify_monitor/refs/heads/dev/debug/spotify_monitor_totp_test.py
```
安装需求:
```
pip install requests python-dateutil pyotp
```
运行:
```
python3 spotify_monitor_totp_test.py --sp-dc "your_sp_dc_cookie_value"
```
你应该获得一个有效的 Spotify access token,示例输出:
标签:API 调用, ESC4, OSINT, Python, Spotify, Unix, 代码示例, 字符串匹配, 实时追踪, 播放列表管理, 数字足迹, 数据分析, 数据泄露, 无后门, 用户画像分析, 用户行为分析, 社交媒体监控, 粉丝统计, 终端工具, 逆向工具