TTKMusicPlayer  4.2.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwyquerymovierequest.cpp
Go to the documentation of this file.
2 
3 namespace ReqWYInterface
4 {
8  static void parseFromMovieProperty(QString &url, const QString &id, int bitrate);
9 
10 }
11 
12 void ReqWYInterface::parseFromMovieProperty(QString &url, const QString &id, int bitrate)
13 {
14  QNetworkRequest request;
15  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
17  TTK::Algorithm::mdII(WY_VIDEO_PATH_DATA_URL, false).arg(id).arg(bitrate));
18 
19  const QByteArray &bytes = TTK::syncNetworkQueryForPost(&request, parameter);
20  if(bytes.isEmpty())
21  {
22  return;
23  }
24 
25  QJsonParseError ok;
26  const QJsonDocument &json = QJsonDocument::fromJson(bytes, &ok);
28  {
29  QVariantMap value = json.toVariant().toMap();
30  if(value["code"].toInt() == 200)
31  {
32  const QVariantList &datas = value["urls"].toList();
33  for(const QVariant &var : qAsConst(datas))
34  {
35  if(var.isNull())
36  {
37  continue;
38  }
39 
40  value = var.toMap();
41  url = value["url"].toString();
42 
43  if(!url.isEmpty())
44  {
45  return;
46  }
47  }
48  }
49  }
50 }
51 
52 
55 {
57 }
58 
60 {
61  TTK_INFO_STREAM(className() << __FUNCTION__ << offset);
62 
63  if(needToUnity())
64  {
66  return;
67  }
68 
69  deleteAll();
70  m_totalSize = 0;
72 
73  QNetworkRequest request;
74  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
76  TTK::Algorithm::mdII(WY_SONG_SEARCH_DATA_URL, false).arg(1014).arg(m_queryValue).arg(m_pageSize * offset).arg(m_pageSize).toUtf8());
77 
78  m_reply = m_manager.post(request, parameter);
79  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
81 }
82 
83 void MusicWYQueryMovieRequest::startToSearch(const QString &value)
84 {
85  resetUnity();
87 }
88 
90 {
91  TTK_INFO_STREAM(className() << __FUNCTION__ << value);
92 
93  deleteAll();
94  m_queryValue = value;
95 
97 }
98 
100 {
101  TTK_INFO_STREAM(className() << __FUNCTION__);
102 
104  if(m_reply && m_reply->error() == QNetworkReply::NoError)
105  {
106  QJsonParseError ok;
107  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
109  {
110  QVariantMap value = json.toVariant().toMap();
111  if(value["code"].toInt() == 200)
112  {
113  value = value["result"].toMap();
114  m_totalSize = value["videoCount"].toInt();
115 
116  const QVariantList &datas = value["videos"].toList();
117  for(const QVariant &var : qAsConst(datas))
118  {
119  if(var.isNull())
120  {
121  continue;
122  }
123 
124  value = var.toMap();
126 
127  const int type = value["type"].toInt();
128  if(type == 0)
129  {
130  const qint64 vid = value["vid"].toLongLong();
131  if(vid == 0)
132  {
133  continue;
134  }
135 
137  parseFromMovieList(vid);
139  }
140  else if(type == 1)
141  {
143  parseFromVideoList(value["vid"].toString());
145  }
146  }
147  }
148  }
149  }
150 
151  if(!pageValid())
152  {
153  setToUnity();
154  }
155 
156  Q_EMIT downLoadDataChanged({});
157  deleteAll();
158 }
159 
161 {
162  TTK_INFO_STREAM(className() << __FUNCTION__);
163 
165 
166  const qint64 vid = m_queryValue.toLongLong();
167  if(vid != 0)
168  {
170  parseFromMovieList(vid);
172  }
173 
174  Q_EMIT downLoadDataChanged({});
175  deleteAll();
176 }
177 
179 {
180  QNetworkRequest request;
181  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
183  TTK::Algorithm::mdII(WY_MOVIE_DATA_URL, false).arg(id));
184 
185  const QByteArray &bytes = TTK::syncNetworkQueryForPost(&request, parameter);
186  if(bytes.isEmpty())
187  {
188  return;
189  }
190 
191  QJsonParseError ok;
192  const QJsonDocument &json = QJsonDocument::fromJson(bytes, &ok);
194  {
195  QVariantMap value = json.toVariant().toMap();
196  if(value["code"].toInt() == 200)
197  {
198  value = value["data"].toMap();
200 
202  info.m_songId = QString::number(id);
203  info.m_songName = TTK::String::charactersReplace(value["name"].toString());
204 
205  info.m_artistName = ReqWYInterface::makeSongArtist(info.m_artistName, value["artistName"].toString());
206 
207  info.m_coverUrl = value["cover"].toString();
208  info.m_duration = TTKTime::formatDuration(value["duration"].toInt());
209 
210  value = value["brs"].toMap();
211  for(const QString &key : value.keys())
212  {
213  const int bitrate = key.toInt();
215  if(bitrate <= 375)
216  {
217  prop.m_bitrate = TTK_BN_250;
218  }
219  else if(bitrate > 375 && bitrate <= 625)
220  {
221  prop.m_bitrate = TTK_BN_500;
222  }
223  else if(bitrate > 625 && bitrate <= 875)
224  {
225  prop.m_bitrate = TTK_BN_750;
226  }
227  else if(bitrate > 875)
228  {
229  prop.m_bitrate = TTK_BN_1000;
230  }
231 
232  prop.m_url = value[key].toString();
234 
235  if(!fetchUrlPathSize(&prop, info.m_duration))
236  {
237  continue;
238  }
239 
240  info.m_songProps.append(prop);
241  }
242 
243  if(info.m_songProps.isEmpty())
244  {
245  return;
246  }
247 
248  Q_EMIT createResultItem({info, serverToString()});
249  m_items << info;
250  }
251  }
252 }
253 
255 {
256  QNetworkRequest request;
257  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
260 
261  const QByteArray &bytes = TTK::syncNetworkQueryForPost(&request, parameter);
262  if(bytes.isEmpty())
263  {
264  return;
265  }
266 
267  QJsonParseError ok;
268  const QJsonDocument &json = QJsonDocument::fromJson(bytes, &ok);
270  {
271  QVariantMap value = json.toVariant().toMap();
272  if(value["code"].toInt() == 200)
273  {
274  value = value["data"].toMap();
276 
278  info.m_songId = id;
279  info.m_songName = TTK::String::charactersReplace(value["title"].toString());
280 
281  const QVariantMap &artistObject = value["creator"].toMap();
282  info.m_artistName = ReqWYInterface::makeSongArtist(info.m_artistName, artistObject["nickname"].toString());
283 
284  info.m_coverUrl = value["cover"].toString();
285  info.m_duration = TTKTime::formatDuration(value["durationms"].toInt());
286 
287  const QVariantList &datas = value["resolutions"].toList();
288  for(const QVariant &var : qAsConst(datas))
289  {
290  if(var.isNull())
291  {
292  continue;
293  }
294 
295  value = var.toMap();
297 
298  const int bitrate = value["resolution"].toInt();
302 
303  if(prop.isEmpty())
304  {
305  continue;
306  }
307 
308  if(bitrate <= 375)
309  {
310  prop.m_bitrate = TTK_BN_250;
311  }
312  else if(bitrate > 375 && bitrate <= 625)
313  {
314  prop.m_bitrate = TTK_BN_500;
315  }
316  else if(bitrate > 625 && bitrate <= 875)
317  {
318  prop.m_bitrate = TTK_BN_750;
319  }
320  else if(bitrate > 875)
321  {
322  prop.m_bitrate = TTK_BN_1000;
323  }
324 
325  prop.m_size = TTK::Number::sizeByteToLabel(value["size"].toInt());
327  info.m_songProps.append(prop);
328  }
329 
330  if(info.m_songProps.isEmpty())
331  {
332  return;
333  }
334 
335  Q_EMIT createResultItem({info, serverToString()});
336  m_items << info;
337  }
338  }
339 }
340 
341 
342 
344  : MusicQueryMovieRequest(parent)
345 {
348 }
349 
351 {
352  TTK_INFO_STREAM(className() << __FUNCTION__ << offset);
353 
354  deleteAll();
355  m_totalSize = 0;
357 
358  QNetworkRequest request;
359  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
362 
363  m_reply = m_manager.post(request, parameter);
364  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
366 }
367 
369 {
370  TTK_INFO_STREAM(className() << __FUNCTION__);
371 
373  if(m_reply && m_reply->error() == QNetworkReply::NoError)
374  {
375  QJsonParseError ok;
376  const QJsonDocument &json = QJsonDocument::fromJson(m_reply->readAll(), &ok);
378  {
379  QVariantMap value = json.toVariant().toMap();
380  if(value["code"].toInt() == 200 && value.contains("mvs"))
381  {
385 
386  const QVariantList &datas = value["mvs"].toList();
387  for(const QVariant &var : qAsConst(datas))
388  {
389  if(var.isNull())
390  {
391  continue;
392  }
393 
394  value = var.toMap();
396 
397  MusicResultDataItem item;
398  item.m_id = value["id"].toString();
399  item.m_coverUrl = value["imgurl"].toString();
400  item.m_name = value["name"].toString();
401  item.m_time.clear();
402  Q_EMIT createMovieItem(item);
403  }
404  }
405  }
406  }
407 
408  Q_EMIT downLoadDataChanged({});
409  deleteAll();
410 }
411 
413 {
415 
416  QNetworkRequest request;
417  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
419  TTK::Algorithm::mdII(WY_ARTIST_MOVIE_DATA_URL, false).arg(id).arg(0).arg(m_totalSize));
420 
421  const QByteArray &bytes = TTK::syncNetworkQueryForPost(&request, parameter);
422  if(bytes.isEmpty())
423  {
424  return;
425  }
426 
427  QJsonParseError ok;
428  const QJsonDocument &json = QJsonDocument::fromJson(bytes, &ok);
430  {
431  const QVariantMap &value = json.toVariant().toMap();
432  if(value["code"].toInt() == 200 && value.contains("mvs"))
433  {
434  m_totalSize = value["mvs"].toList().count();
435  }
436  }
437 }
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForPost(QNetworkRequest *request, const QByteArray &data)
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
bool pageValid() const noexcept
#define TTK_NETWORK_QUERY_CHECK(VALUE)
static constexpr const char * WY_SONG_SEARCH_URL
song url
The class of the search result data item.
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
static constexpr const char * WY_ARTIST_MOVIE_DATA_URL
QNetworkReply * m_reply
The class of the unity query mv download data from net.
QVariant toVariant() const
The class of the music song property.
Definition: musicobject.h:237
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
QString makeSongArtist(const QString &in, const QString &name)
MusicSongPropertyList m_songProps
Definition: musicobject.h:309
void createResultItem(const MusicResultInfoItem &result)
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
virtual void downLoadFinished() overridefinal
#define TTK_BN_1000
Definition: ttkglobal.h:434
static constexpr const char * WY_MOVIE_URL
movie url
virtual void startToSearchByID(const QString &value) overridefinal
virtual void downLoadFinished()
void createMovieItem(const MusicResultDataItem &item)
#define TTK_BN_250
Definition: ttkglobal.h:430
void parseFromVideoList(const QString &id)
static constexpr const char * WY_VIDEO_INFO_DATA_URL
#define TTK_BN_500
Definition: ttkglobal.h:432
voidpf uLong offset
Definition: ioapi.h:142
ParseError error
TTK::MusicSongInformationList m_items
#define qAsConst
Definition: ttkqtglobal.h:57
static constexpr const char * QUERY_WY_INTERFACE
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:74
#define TTK_SIGNLE_SHOT(...)
Definition: ttkqtglobal.h:189
The class of the query movie download data from net.
QNetworkAccessManager m_manager
MusicWYQueryArtistMovieRequest(QObject *parent=nullptr)
static constexpr wchar_t key[]
static constexpr const char * WY_VIDEO_PATH_DATA_URL
bool isEmpty() const noexcept
Definition: musicobject.h:250
The namespace of the wangyi request interface.
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
virtual void replyError(QNetworkReply::NetworkError error) override
#define TTK_SLOT
Definition: ttkqtglobal.h:177
virtual void startToPage(int offset) overridefinal
virtual void downLoadFinished() override
#define ARTIST_ATTR_PAGE_SIZE
TTK_MODULE_EXPORT QString splitToken(const QString &name)
static constexpr const char * WY_SONG_SEARCH_DATA_URL
TTK_MODULE_EXPORT QString toString(Record type) noexcept
MusicWYQueryMovieRequest(QObject *parent=nullptr)
#define TTK_HIGH_LEVEL
Definition: ttkglobal.h:334
virtual void downLoadFinished() overridefinal
virtual void startToPage(int offset) overridefinal
virtual void startToSearch(const QString &value) override
static void parseFromMovieProperty(QString &url, const QString &id, int bitrate)
virtual void startToPage(int offset) override
static constexpr const char * WY_ARTIST_MOVIE_URL
virtual void startToSearch(const QString &value) overridefinal
static constexpr const char * WY_VIDEO_PATH_URL
QByteArray makeTokenRequest(QNetworkRequest *request, const QString &query, const QString &data)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
The class of the music song information.
Definition: musicobject.h:295
#define TTK_BN_750
Definition: ttkglobal.h:433
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123
static constexpr const char * WY_VIDEO_INFO_URL
static constexpr const char * WY_MOVIE_DATA_URL