4 static constexpr
const char *
KG_UA_URL =
"cGhYNDZVdmNaVG5KZk50NVFvcUJyYWVQdmdNTkFTMmM=";
5 static constexpr
const char *
KG_COOKIE_URL =
"M1BlYjdvWUlwdHJIYXgzeGpUVDlWbnB6ZGZPaUxWVzhKdEZ2RHBHR1RBckFUbG82ZzlOOHRnMW0wUUZpVmdDNGNQMFFjTXd1OVhidmwvdHh6NjNkZ08reXEzWUl0ZXl3d21Ka3ErM1Q1eEp3WUs0YkYvV3dWVUFDSVd3YmI3c3U3c09pZTlIM1FQRFUyMG43Z2ZqRXJVTHhubkhjRC9EN3hVbzhia1QzdUZQU3orRzZZRmRncGZLazhkMD0=";
7 static constexpr
const char *
KG_SONG_PATH_V1_URL =
"c0FiK1UzOWFtRGNobi9oYlo1WmpEbWUwRzR0UStHd1lkZFFRakxkSGlMZmpHMmoxOWc4NGtGa3NJRUtiVXJEYlJqYzNYNmRHNlZ0dUZIR05Rb0RZcUgyb2lFMm5pNU9KaDhMeHNkQnJzcWJqeHhwQWdpUXBPV1ZEQ05RT0kvNE5IWG9qZ2hYYk9BMG8yQ25qbzFYUGFYeUVMWVk9";
8 static constexpr
const char *
KG_SONG_PATH_V2_URL =
"Q3dWL3pJbVlWTDY1Nk0vT3BkYWNGNC9ObWEyVmtyQ3lqVFlUZjE1VjU2V0ZhZFN2L1hFUXlob1JxM2Zjak9KcjBPZGE1QkxQRlhUaFpEMWxQNDMzbmdjWG5kMVNxRy9zR0tvVXB5SDlZUHl1OVUzaGlVM2NHUTBTY0l4cG1GNjY0alYzdmI5eU1ldXB2KzFzU2JHMkgrTHdxaUdSL3pwY0o1bk9kSk1GcG4yK2JVSndqUFRYNXRTbkk5VHBQcVM0Y256ZElxV1BCcy80NGpXaXNvWWZvQT09";
9 static constexpr
const char *
KG_SONG_PATH_V3_URL =
"b1VyUUJFN3l5RG0wZkhxZ2RHazUyRDVraGNXK21oODUvVWZCUHJ0TWx0VFJsdEwyemdzd0JmdnFRNFJQRitRb1NIVkZuTWZmUjlya2UrWi9pQ0Z0MjVFV2FZU1lDU3lieXBOb0RaVXVVcU5DR0xEYlQySXFHbXhKWjZ5ZkFuOEJmNzdGQ0tTNVFGMkg3eldDR3VqOUUxQWJKNzh6YWZPZzkyYUtKeFNORnB6bVlzZ1grYWduWXNBN1BDdENrb0ZEMklhSDVacmhBNkZiRWFPUDh6VXFIcnMzQUZqY0FYaG5ZbytGZkJUTnpJNTlLRHVZZitkYVlDVXR3Slh5U1IrSU9TbmF5TUxJZ0dJeGRxL0EwaDB2Qm1RUnBnTHM2bVdFQUsyRzZqeC83bTBjQ1RsSlB3dEVLcFlqdUU2c095aGN1cVJhR1E9PQ==";
10 static constexpr
const char *
KG_SONG_PATH_V3_DATA_URL =
"V1RsSGgvREcwWDBLNGdHeE5weEdoRWZCYVFhL2RlZDRBTUcxQXJqZlFIRXhsQzkzaldUclNodG1kSDJtekJXSjVlVGtEYUU1bkxYcTBrRjM1dHd0dFhhM2ZZd1B4N255Wk5MYWRBTWQwclF2dEIwenlLcFNVSXZGY1RZRXNVcDcwSUdJaVlQNmh1RnNQQVpMTVRrZ003YmI4RmcwTS9Jc1lFZ2VvbnFNYU1ZN0RMUVNwVkFoZFhsOVk1UXJGanpNbUpZWmpjdlZUQjlVc3FraENVMGF4SFIvOEVSS0o4ZVBEWC9iME52Q3lWNDdKYTFadXlCQ20rM0JueWtZVjBCZGdtM2NMakRSQzl3YlZRZEFPQnRvZEU3aHhiVnZ0aEJNemtUWWE5amFOaVk3RVBGdFBkSzRPQTRsYklZYTltNy9rRUNVc3dMZmI4WT0=";
11 static constexpr
const char *
KG_ALBUM_INFO_URL =
"ejhjT0JOd0RyMWtmaTdTa2x4REdsMXlucDkyYk8wT3RTZ21DOVVTeU15MFQ1Z1k0SVJ6bHdiY2hNVURKRE91NGdWSWc2NTJNZEsyNnF0b0YrK0E0TSs3UjRKam40VmhqM0JxTWI1dmtyR1ZQWk1tOGFnR1NGcnAzVzJ4M3dvZWU2YlhMR0IvZWVSND0=";
30 return in.isEmpty() ? artistName : (in +
";" + artistName);
40 QNetworkRequest request;
54 QVariantMap value = json.
toVariant().toMap();
55 if(value[
"errcode"].toInt() == 0 && value.contains(
"data"))
57 value = value[
"data"].toMap();
59 info->
m_artistId = value[
"singerid"].toString();
61 info->
m_coverUrl = value[
"imgurl"].toString().replace(
"{size}",
"500");
84 if(hash.isEmpty() || album.isEmpty())
89 QNetworkRequest request;
103 QVariantMap value = json.
toVariant().toMap();
104 if(value[
"error_code"].toInt() == 0 && value.contains(
"data"))
106 QVariantList datas = value[
"data"].toList();
107 for(
const QVariant &var :
qAsConst(datas))
114 for(
const QVariant &al : var.toList())
122 item->
m_id = value[
"album_id"].toString();
125 item->
m_time = value[
"publish_date"].toString();
126 item->
m_category = value[
"language"].toString();
138 if(prop.m_bitrate == bitrate)
144 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in v1 module");
148 QNetworkRequest request;
159 const QVariantMap &value = json.
toVariant().toMap();
160 if(value.contains(
"status") && value[
"status"].toInt() == 1)
163 prop.
m_url = value[
"url"].toString();
165 prop.
m_format = value[
"extName"].toString();
177 if(prop.m_bitrate == bitrate)
183 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in v2 module");
185 const QString &mid =
TTK::Algorithm::mdII(
"Wk51dktMOHJXUTdmM1VsVUVXTFM5RTlYQ05laDE0Z2lZMzFPL1M1VUJSaHd1N0kwRDQxdkpWVFJPZTQ9",
false);
186 const QString &sign =
TTK::Algorithm::mdII(
"SVhlNmFTaWpqdVhYVTAwaHh4QllwRkFGSmJpY0VSZUhXQmQrV2Q4WHo0eXVCWm1zK1p0RkVRPT0=",
false);
187 const QString &user =
"0";
190 QNetworkRequest request;
192 request.setRawHeader(
"x-router",
TTK::Algorithm::mdII(
"MTJnUGtpL0hqWXhZQmlCNE9hVzVyREF0QXZmeVBNNVc=",
false).toUtf8());
202 const QVariantMap &value = json.
toVariant().toMap();
203 if(value.contains(
"status") && value[
"status"].toInt() == 1)
205 const QVariantList &datas = value[
"url"].toList();
209 prop.
m_url = datas.first().toString();
211 prop.
m_format = value[
"extName"].toString();
225 QNetworkRequest request;
236 QVariantMap value = json.
toVariant().toMap();
237 if(value.contains(
"data") && value[
"err_code"].toInt() == 0)
239 value = value[
"data"].toMap();
240 id = value[
"encode_album_audio_id"].toString();
242 const int rate = value[
"bitrate"].toInt();
243 const QString &url = value[
"play_url"].toString();
245 if(rate == bitrate && !url.isEmpty())
263 if(prop.m_bitrate == bitrate)
269 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in v3 module");
284 if(prop.m_bitrate == bitrate)
290 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in unity module");
354 info->
m_formatProps = key[
"hash"].toString() +
"|" + key[
"128hash"].toString() +
"|" + key[
"320hash"].toString() +
"|" + key[
"sqhash"].toString();
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
static void parseSongPropertyV2(TTK::MusicSongInformation *info, const QString &hash, int bitrate)
The class of the search result data item.
static constexpr const char * KG_SONG_INFO_URL
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone) noexcept
static constexpr const char * KG_SONG_PATH_V1_URL
static qint64 currentTimestamp() noexcept
QVariant toVariant() const
static constexpr const char * KG_SONG_PATH_V3_DATA_URL
The class of the music song property.
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
static constexpr const char * QUERY_KG_INTERFACE
QString makeSongArtist(const QString &name)
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
TTK_MODULE_EXPORT QByteArray md5(const QByteArray &data, bool base64=false)
static constexpr const char * KG_SONG_PATH_V3_URL
static void parseSongPropertyUnity(TTK::MusicSongInformation *info, const QString &hash, int bitrate)
static constexpr const char * MDII_UA_KEY
static void parseSongProperty(TTK::MusicSongInformation *info, const QString &hash, int bitrate)
static constexpr const char * KG_SONG_PATH_V2_URL
#define TTK_INFO_STREAM(msg)
static void parseSongPropertyV1(TTK::MusicSongInformation *info, const QString &hash, int bitrate)
static constexpr wchar_t key[]
static constexpr const char * KG_SONG_LRC_URL
TTK_MODULE_EXPORT void setContentTypeHeader(QNetworkRequest *request, const QByteArray &data={}) noexcept
static constexpr const char * KG_ALBUM_INFO_URL
static constexpr const char * KG_COOKIE_URL
TTK_MODULE_EXPORT QString toString(Record type) noexcept
void parseFromSongAlbumLrc(TTK::MusicSongInformation *info)
void parseFromSongAlbumInfo(TTK::MusicSongInformation *info, const QString &album)
void parseFromSongProperty(TTK::MusicSongInformation *info, const QString &type, const QString &id, int bitrate)
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
void makeRequestRawHeader(QNetworkRequest *request) noexcept
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
static void parseSongPropertyV3(TTK::MusicSongInformation *info, const QString &module, QString &id, int bitrate)
static constexpr const char * KG_UA_URL