7 static constexpr
const char *
WY_USER_URL =
"resource/user";
8 static constexpr
const char *
WY_UA_URL =
"Vkloais0Z0Q4Smp1aElYSXFUVy96SXdoZ2VsTURzdDBpZEZjT21jMy9PRE1DMzdwQ0p5MllueTkrRGdzb2VkdlJMemJhWEFReHlUUk9uSEtMTHRLUzRxS3psczJiRW9LZ3BQbHh1Z3lGRlhEQk5JbVVGb1NDN1JzTDhZMjBybllLcndKSHlSNC94QzRJWXlL";
9 static constexpr
const char *
WY_COOKIE_URL =
"eU5NVy9LRm5jWE9pdUU1MzNQNi9OcjVUbi9vSGhYcGVaQWc0NjlPbCt1WnNDbDlONDg1SSthTi9JUDQ1YVpsRg==";
10 static constexpr
const char *
WY_USER1_URL =
"VzJpdUVPQ0xkZnp4VENJWjVIVFhQYzZKbnYrSU9pRTFmWXNkcXFaSWorRDRWMjJxUGdZaklZUDNzZXNweXJuczJMeGc2TVFRSEk4SkxCYkxXQ2FFUHpBbENUcjRZZ3RVNGpwRUloVkhVSWhSem50NTM3ZjFGMXdQVXFWN01mNE1GZUg2WFk3anl1Z1hxVkc0eXM3ZFZCVkpGNDZlNVA1MmhvYzZ6UT09";
11 static constexpr
const char *
WY_USER2_URL =
"TE40MEZBWWJkbkhTbTM2OEVTMkE3VjlJOWZuUjVNQ3BFRGMwYjZ4NW9yeE5QdWozU0ZuSjJrQVdpQkdaT3B4enBMOGpTNUJiVXZDTUxmSWFNRkV5SGVqMXcxaS8rZnlsVmo2bkFJR1BvaGQ2c3llUFlyTVNITWdtcFRpMlA2SEl4VE40RnphRTRza2FPaG5RR3hkeGtZOHVGdHV6Nko3UHNBb25rdz09";
12 static constexpr
const char *
WY_USER3_URL =
"c0s1RFpDY0Iya1hNOGFob2JLdGNiUFNxVCs0bE44MDBtQWtmTng4SDRqWlZOZWJXbUkySEtrSDNqVnhUOGMrUVpiNk9lc21MRlFTdFdNYlBwdWNtMmo2VUs4b1M4MFUvS2EzYkpjcnJTZHdZNGdsZ0JsU3lhWkoxaFY1czB4THF6anlDWWp5Ym1VKzJERjAvSmx1WXFPY0ErbjJrMnl2OFhGNGFBUT09";
13 static constexpr
const char *
WY_USER4_URL =
"RGdEcVgrSERYQjErNUovY0hFOVU1dElWR00xRVNiRTRVenlHaVpiMkZ1Z0tXV2ZTZVpjL3RCV2pvajhLNjhINjFaUG5QWGdNcnZlcVlxZm93V01IUUgyWWM3NFFTdGE5K203MG5KeE0rNzFPV1ZFUmJHUnBSSHRXRUx1NEVYcU91VGgzWUh6M0hOcUVaUG9YQU9GNXFIaHlDVk5UVGNISmtmcHllQT09";
14 static constexpr
const char *
WY_USER5_URL =
"ZmxqdmFXWFlmWFdtYzB2M212VVRaSDhIL1NhYnRySDg5dlV0eWx3YVdZUG82NFlMRlZMNnRHVGFlbVhqaFF0ckJ2YTVRSG12YnYrb1ZqaTJFY2ViK0Y3RG5WbWVHVldzVWk0enFweDd1dkhBNmF1dg==";
15 static constexpr
const char *
WY_RAND_URL =
"V0Zsb2tGREU1R0thR29GYjRYdk5jbm5NZjEvN1d6WWNiQlZqb2k4eE1nTm9lTHlBRktkQTBOaXNjQ3ZHU0ZMSw==";
16 static constexpr
const char *
WY_BASE_URL =
"MVNVTXo4bW9WdHhXR1dXeTZmU3k5dmFOcGlua1VOMlE=";
17 static constexpr
const char *
WY_SECKRY_URL =
"411571dca16717d9af5ef1ac97a8d21cb740329890560688b1b624de43f49fdd7702493835141b06ae45f1326e264c98c24ce87199c1a776315e5f25c11056b02dd92791fcc012bff8dd4fc86e37888d5ccc060f7837b836607dbb28bddc703308a0ba67c24c6420dd08eec2b8111067486c907b6e53c027ae1e56c188bc568e";
19 Q_GLOBAL_STATIC(QString, WY_USER_DATA)
28 if(WY_USER_DATA()->isEmpty())
31 if(file.open(QIODevice::ReadOnly))
33 *WY_USER_DATA() = QString::fromUtf8(file.readAll());
53 return in.isEmpty() ? artistName : (in +
";" + artistName);
64 QByteArray param = aes.
encryptCBC(data.toUtf8(),
"0CoJUm6Qyw8W8jud",
"0102030405060708");
65 param = aes.
encryptCBC(param,
"a44e542eaac91dce",
"0102030405060708");
68 request->setUrl(query);
75 const QString &message =
"nobody" + query +
"use" + data +
"md5forencrypt";
76 const QByteArray &digest = QCryptographicHash::hash(message.toUtf8(), QCryptographicHash::Md5).toHex();
77 const QString &body = query +
"-36cd479b6b5-" + data +
"-36cd479b6b5-" + digest;
80 const QByteArray ¶m = aes.
encryptECB(body.toUtf8(),
"e82ckenh8dichen8",
true);
84 return "params=" + param.toUpper();
91 if(prop.m_bitrate == bitrate)
97 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in v1 module");
99 QNetworkRequest request;
111 const QVariant &data = json.
parse(bytes, &ok);
114 QVariantMap value = data.toMap();
115 if(value[
"code"].toInt() == 200 && value.contains(
"data"))
117 value = value[
"data"].toMap();
123 const int rate = value[
"br"].toInt() / 1000;
127 prop.
m_url = value[
"url"].toString();
129 prop.
m_format = value[
"type"].toString();
141 if(prop.m_bitrate == bitrate)
147 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in v2 module");
149 QNetworkRequest request;
162 const QVariant &data = json.
parse(bytes, &ok);
165 QVariantMap value = data.toMap();
166 if(value[
"code"].toInt() == 200 && value.contains(
"data"))
168 const QVariantList &datas = value[
"data"].toList();
169 for(
const QVariant &var :
qAsConst(datas))
178 const int rate = value[
"br"].toInt() / 1000;
182 prop.
m_url = value[
"url"].toString();
184 prop.
m_format = value[
"type"].toString();
197 if(prop.m_bitrate == bitrate)
203 TTK_INFO_STREAM(
"parse song" << bitrate <<
"kbps property in v3 module");
214 QNetworkRequest request;
228 const QVariant &data = json.
parse(bytes, &ok);
231 QVariantMap value = data.toMap();
232 if(value[
"code"].toInt() == 200 && value.contains(
"data"))
234 const QVariantList &datas = value[
"data"].toList();
235 for(
const QVariant &var :
qAsConst(datas))
244 const int rate = value[
"br"].toInt() / 1000;
248 prop.
m_url = value[
"url"].toString();
250 prop.
m_format = value[
"type"].toString();
314 const QVariantMap &privilege = key[
"privilege"].toMap();
315 if(!privilege.isEmpty())
317 const QString &brStr = privilege[
"maxbr"].toString();
318 if(brStr ==
"999000")
322 else if(brStr ==
"320000" || brStr ==
"192000" || brStr ==
"190000")
326 else if(brStr ==
"160000")
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForPost(QNetworkRequest *request, const QByteArray &data)
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
static constexpr const char * WY_COOKIE_URL
static constexpr const char * WY_SECKRY_URL
static constexpr const char * WY_SONG_PATH_V3_URL
static constexpr const char * WY_USER1_URL
static constexpr const char * WY_SONG_PATH_V3_DATA_URL
TTK_MODULE_EXPORT QString urlEncode(QString &data)
The class of the music song property.
static constexpr const char * WY_USER5_URL
static constexpr wchar_t key[]
QByteArray encryptECB(const QByteArray &in, const QByteArray &key, bool hex=false)
static constexpr const char * WY_SONG_PATH_V2_URL
QString makeSongArtist(const QString &in, const QString &name)
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
static constexpr const char * WY_USER_URL
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
static void parseSongPropertyV3(TTK::MusicSongInformation *info, int bitrate)
static constexpr const char * WY_USER3_URL
QByteArray encryptCBC(const QByteArray &in, const QByteArray &key, const QByteArray &iv, bool hex=false)
static constexpr const char * MDII_UA_KEY
#define APPCACHE_DIR_FULL
static void parseSongProperty(TTK::MusicSongInformation *info, int bitrate)
static void parseSongPropertyV1(TTK::MusicSongInformation *info, int bitrate)
#define TTK_INFO_STREAM(msg)
void makeRequestRawHeader(QNetworkRequest *request)
static constexpr const char * WY_SONG_PATH_V1_URL
The class of the aes wrapper.
static QString makeUser()
QVariant parse(QIODevice *io, bool *ok=0)
Read JSON string from the I/O Device and converts it to a QVariant object.
static constexpr const char * WY_SONG_PATH_V2_DATA_URL
static constexpr const char * WY_USER4_URL
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
static constexpr const char * WY_SONG_PATH_V3_QUERY_URL
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
static constexpr const char * WY_USER2_URL
QString makeCoverPixmapUrl(const QString &url)
Main class used to convert JSON data to QVariant objects.
static constexpr const char * WY_UA_URL
QByteArray makeTokenRequest(QNetworkRequest *request, const QString &query, const QString &data)
static void parseSongPropertyV2(TTK::MusicSongInformation *info, int bitrate)
static constexpr const char * WY_RAND_URL
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
static constexpr const char * WY_BASE_URL