You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Dart中Spotify API歌曲年代过滤功能失效问题求助

解决Spotify API年代过滤失效问题

你的音乐推荐应用年代过滤失效的核心原因是错误使用了Spotify Recommendations API的过滤参数。Spotify推荐接口不支持直接用release_date作为筛选条件,必须通过min_release_date和max_release_date两个参数分别指定发行日期的起始和结束范围,且日期格式需符合ISO 8601标准(如2020-01-01)。

以下是具体修改步骤:

1. 调整main.dart中的年份范围处理

修改年份范围的生成逻辑,返回包含起始和结束日期的完整ISO格式字符串:

// 在_MyHomePageState类中替换原_getYearRange方法
Map<String, String> _getYearRange(String decade) {
  int startYear = int.parse(decade.substring(0, 4));
  int endYear = startYear + 9;
  return {
    'min': '$startYear-01-01', // 年代起始日期
    'max': '$endYear-12-31'   // 年代结束日期
  };
}

// 替换原_recommend方法
void _recommend() async {
  final genre = _selectedGenre;
  final dateRange = _getYearRange(_selectedDecade);

  final results = await _spotifyService.recommendTracks(
    genre,
    minReleaseDate: dateRange['min']!,
    maxReleaseDate: dateRange['max']!,
  );
  setState(() {
    _recommendationResults = results;
  });
}

2. 修改spotify_service.dart中的API请求逻辑

更新recommendTracks方法,使用正确的API参数构造请求:

// 替换原recommendTracks方法
Future<List<Map<String, dynamic>>> recommendTracks(
    String genre, {
    required String minReleaseDate,
    required String maxReleaseDate,
  }) async {
    final accessToken = await _getAccessToken();

    // 使用Uri构造器拼接参数,避免手动拼接字符串出错
    final recommendationUrl = Uri.parse('https://api.spotify.com/v1/recommendations')
        .replace(queryParameters: {
          'seed_genres': genre,
          'min_release_date': minReleaseDate,
          'max_release_date': maxReleaseDate,
        });

    print('Recommendation URL: ${recommendationUrl.toString()}');

    final response = await http.get(
      recommendationUrl,
      headers: {'Authorization': 'Bearer $accessToken'},
    );

    if (response.statusCode == 200) {
      final jsonResponse = json.decode(response.body);
      final tracks = jsonResponse['tracks'] as List<dynamic>;
      print('Number of Tracks: ${tracks.length}');

      return tracks.map((track) {
        return {
          'name': track['name'] as String,
          'artists': track['artists'] as List<dynamic>,
          'album': {
            'images': track['album']['images'] as List<dynamic>,
            'release_date': track['album']['release_date'] as String,
          },
        };
      }).toList();
    } else {
      throw Exception('Failed to recommend tracks: ${response.statusCode}');
    }
  }

验证修改

运行应用后,点击推荐按钮,查看控制台打印的请求URL,确认包含min_release_date和max_release_date参数。此时返回的歌曲发行日期应该会严格落在你选择的年代范围内。

内容的提问来源于stack exchange,提问作者Sena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:43:18