LastFM.swift

用于使用 last.fm API 的库。 这个库涵盖了 last.fm API 页面 中列出的所有服务。

安装

Swift Package Manager

Swift Package Manager 是一个用于管理 Swift 代码分发的工具。

  1. 将以下内容添加到您的 Package.swift 文件中
dependencies: [
    .package(url: "https://github.com/duhnnie/LastFM.swift", from: "1.5.2")
]
  1. 构建您的项目
$ swift build

Carthage

Carthage 是一个简单、分散的 Cocoa 依赖管理工具。 要使用 Carthage 安装 LastFM.swift,请执行以下操作

  1. 确保 Carthage 已经 安装

  2. 更新您的 Cartfile 以包含以下内容

    github "duhnnie/LastFM.swift" ~> 1.5.2
  3. 运行 carthage update添加相应的 framework

CocoaPods

CocoaPods 是一个 Cocoa 项目的依赖管理工具。 要使用 CocoaPods 安装 LastFM.swift,请执行以下操作

  1. 确保 CocoaPods 已经 安装

    # Using the default Ruby install will require you to use sudo when
    # installing and updating gems.
    [sudo] gem install cocoapods
  2. 更新您的 Podfile 以包含以下内容

    use_frameworks!
    
    target 'YourAppTargetName' do
        pod 'LastFM.swift', '~> 1.5.2'
    end
  3. 运行 pod install --repo-update

用法

您需要一个 last.fm API 帐户,您可以 在这里 获取一个。 获得 API 帐户后,您需要创建一个 LastFM.swift 实例,并提供 api keyapi secret

import LastFM

let lastFM = LastFM(apiKey: "your_api_key", apiSecret: "your_api_secret")

之后,您就可以开始使用服务了 (查看 这里 以获取有关所有可用服务的信息/文档)

使用 async/await

let recentTrackParams = RecentTracksParams(user: "someUser", limit: 10, page: 1)
                
do {
    let recentTracks = try await lastFM.User.getRecentTracks(params: recentTrackParams)
    
    for track in recentTracks.items {
        print("\(track.artist.name) - \(track.name) - \(track.nowPlaying ? "🔈" : track.date!.debugDescription)")
    }
} catch LastFMError.LastFMServiceError(let errorType, let message) {
    print(errorType, message)
} catch LastFMError.NoData {
    print("No data was returned.")
} catch {
    print("An error ocurred: \(error)")
}

使用 completion handlers

let recentTrackParams = RecentTracksParams(user: "someUser", limit: 10, page: 1)

lastFM.User.getRecentTracks(params: recentTrackParams) { result in
    switch (result) {
    case .failure(let error):
        print("error message: \(error.localizedDescription)")

        switch(error) {
        case .LastFMServiceError(let lastfmErrorType, let message):
            print(lastfmErrorType, message)
        case .NoData:
            print("No data was returned.")
        case .OtherError(let error):
            print("An error ocurred: \(error)")
        }
    case .success(let obj):
        for track in obj.items {
            print("\(track.artist.name) - \(track.name) - \(track.nowPlaying ? "🔈" : track.date!.debugDescription)")
        }
    }
}

身份验证

某些服务需要身份验证,此库提供了所有必需的方法 (您可以阅读 last.fm 提供的所有身份验证路径 这里)。

例如,要将一首歌曲提交到您的 last.fm 个人资料,您需要提供从任何 last.fm 身份验证路径获得的会话密钥,以便 last.fm 知道该歌曲应该归哪个帐户。

var scrobbleParams = ScrobbleParams()

try scrobbleParams.addItem(
  item: ScrobbleParamItem(
    artist: "The Strokes",
    track: "The Adults Are Talking",
    date: Date(),
    album: "The New Abnormal"
  )
)

let scrobble = try await lastFM.Track.scrobble(params: scrobbleParams, sessionKey: "your-session-key")

// Or using the completion handler version:
try lastFM.Track.scrobble(
  params: scrobbleParams,
  sessionKey: "your_session_key",
  onCompletion: { result in
    switch (result) {
    case .success(let scrobble):
        print(scrobble)
    case .failure(let error):
        print(error)
    }
  }
)

Linux 支持

LastFM.swift 受 Linux 支持。 但是,运行测试会导致致命错误

Fatal error: Constant strings cannot be deallocated

这就是为什么某些测试在 GitHub Actions 中运行。 无论如何,您可以通过运行在本地 Docker 容器 (它具有不同的 Swift 版本) 中运行测试

./runLinuxTests.sh

关于 Linux 中的问题

贡献

原始作者

许可证

LastFM.swift 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件