YM-API - Unofficial Swift Yandex Music Library
Fully ported Yandex Music API Swift implementation.
Russian Readme (Readme на русском)
Thanks to MarshalX for his Yandex Music API research and the python library.
Content
Introduction
The library provides an interface for interacting with the Yandex Music API.
macOs 10.14+ and iOS 10.0+ are supported by the module.
Yandex personal data access
Constant values CLIENT_ID и CLIENT_SECRET were borrowed from the Yandex Music official application at Microsoft Store. Since the API is private and only used internally, it is impossible to register own application for now on [oauth.yandex.ru] (https://oauth.yandex.ru), and therefore, use your own constant values.
Setup
YM-API is available with CocoaPods. To install a module, just add the module name to the Podfile:
- iOS
platform :ios, '10.0'
...
pod "YM-API"
- macOS
platform :osx, '10.14'
...
pod "YM-API"
Getting started
You can interact with the API throw YMClient instance.
You can initialize the client in 2 ways:
Basic, at first lauch or logout state
import YM_API
let client = YMClient.initialize(device: YMDevice, lang: ApiLanguage)
device parameter - Device info. Essentially needed during working with play queues
let device = YMDevice(os: "iOS", osVer: 14.6, manufacturer: "Apple",
model: iPhone8,4, clid: "app-store",
deviceId: UUID().uuidString.replacingOccurrences(of: "-", with: "").lowercased(),
uuid: UUID().uuidString.replacingOccurrences(of: "-", with: "").lowercased())
lang parameter - Yandex Music localization. There are 7 options to choose from:
enum ApiLanguage: String {
case en//English
case uz//Uzbek
case uk//Ukrainian
case us//English (US)
case ru//Russian
case kk//Kazakh
case hy//Armenian
}
Extended, if there is an active session
import YM_API
let client = YMClient.initialize(device: YMDevice, lang: ApiLanguage, uid: Int, token: String)
uid parameter - Account ID token parameter - Account token
To work with the service in the absence of an active session, you must sign in.
Login by login and password:
client.authByCredentials(login: String, pass: String, captchaAnswer: nil,
captchaKey: nil, captchaCallback: nil) { result in
//Actions with the result of the query
}
Usage examples
If you have an initialized client with authorized session, you can use all available methods from the API.
Retrieving a list of generated daily playlists in the context of the feed
client.getFeed { result in
guard let feed = try? result.get() else {return}
let playlists = feed.generatedPlaylists
}
Retrieving playlist tracks data
Option with calling a function from a playlist track instance
playlist.tracks?[index].fetchTrack(completion: { result in
//Actions with track data
})
Option with calling a function from a client instance
let trackIds = playlist.tracks?.map{ track in return track.trackId }
client.getTracks(trackIds: trackIds, positions: false) { result in
//Actions with tracks data
}
Retrieving the track download link
var track: Track!
... acquiring track data...
track.getDownloadLink(codec: .mp3, bitrate: .kbps_192) {result in
//Actions with download link
}
Application example
An application for iOS (10.0+) was created for this API. It implements a working minimum: playlists generated by Yandex, displaying its content, playing songs including local play queue, the ability to like or dislike them, display the 'my collection' tracks with the ability to listen and search tracks. Its source code is publicly available.
Visit this page, to see the example application source.
Setup application ways
This application can be installed on your device for testing in several ways:
Free and simple
You need mac and XCode. Plus you need to have a basic developer account (without paid license) and the Apple device added to it. Update the pod dependencies in the project and just compile the sample application project for your device. The installed application will be available for 7 days due to the limitations of the basic developer account.
Advanced and paid
You need mac and and a developer account with a paid license. Необходимо иметь мак и аккаунт разработчика с проплаченной лицензией. On the Apple Developer site you need to prepare the infrastructure for uploading: certificates, application ID (basic capabilities set), provision profiles set. So you can use the application not only on your personal device (App Store Connect public testing throw TestFlight) and not for 7 days. P.S. And if you want to show the whole breadth of your soul and, perhaps, thank the creator, you can upload the application to TestFlight for open testing and share the link, which I will post here =)
Getting help
If you find problems or want to suggest a new feature in the API itself create an issue
I don't plan to add anything to the application itself - it is an example of using the API
License
You can copy, distribute and modify the software provided that modifications are described and licensed free of charge in accordance with c LGPL-3. Artworks derivatives (including modifications or anything statically linked to the library) may only be distributed in accordance with the LGPL-3, but applications that use a library, optional.