用于使用 last.fm API 的库。 这个库涵盖了 last.fm API 页面 中列出的所有服务。
Swift Package Manager 是一个用于管理 Swift 代码分发的工具。
Package.swift
文件中dependencies: [
.package(url: "https://github.com/duhnnie/LastFM.swift", from: "1.5.2")
]
$ swift build
Carthage 是一个简单、分散的 Cocoa 依赖管理工具。 要使用 Carthage 安装 LastFM.swift,请执行以下操作
确保 Carthage 已经 安装。
更新您的 Cartfile 以包含以下内容
github "duhnnie/LastFM.swift" ~> 1.5.2
运行 carthage update
并 添加相应的 framework。
CocoaPods 是一个 Cocoa 项目的依赖管理工具。 要使用 CocoaPods 安装 LastFM.swift,请执行以下操作
确保 CocoaPods 已经 安装。
# Using the default Ruby install will require you to use sudo when
# installing and updating gems.
[sudo] gem install cocoapods
更新您的 Podfile 以包含以下内容
use_frameworks!
target 'YourAppTargetName' do
pod 'LastFM.swift', '~> 1.5.2'
end
运行 pod install --repo-update
。
您需要一个 last.fm API 帐户,您可以 在这里 获取一个。 获得 API 帐户后,您需要创建一个 LastFM.swift 实例,并提供 api key 和 api 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)
}
}
)
LastFM.swift 受 Linux 支持。 但是,运行测试会导致致命错误
Fatal error: Constant strings cannot be deallocated
这就是为什么某些测试在 GitHub Actions 中运行。 无论如何,您可以通过运行在本地 Docker 容器 (它具有不同的 Swift 版本) 中运行测试
./runLinuxTests.sh
LastFM.swift 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。