TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicblqueryinterface.cpp
Go to the documentation of this file.
2 #include "musicabstractnetwork.h"
3 
4 void ReqBLInterface::makeRequestRawHeader(QNetworkRequest *request)
5 {
8  request->setRawHeader("Cookie", TTK::Algorithm::mdII(BL_BUVID_URL, false).toUtf8());
9 }
10 
12 {
13  QNetworkRequest request;
14  request.setUrl(TTK::Algorithm::mdII(BL_MOVIE_DATA_URL, false).arg(info->m_songId));
16 
17  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
18  if(bytes.isEmpty())
19  {
20  return;
21  }
22 
23  QJson::Parser json;
24  bool ok = false;
25  const QVariant &data = json.parse(bytes, &ok);
26  if(ok)
27  {
28  QVariantMap value = data.toMap();
29  if(value["code"].toInt() == 0 && value.contains("data"))
30  {
31  const QVariantList &datas = value["data"].toList();
32  for(const QVariant &var : qAsConst(datas))
33  {
34  if(var.isNull())
35  {
36  continue;
37  }
38 
39  value = var.toMap();
40 
41  cid = value["cid"].toString();
42  break;
43  }
44  }
45  }
46 }
47 
49 {
50  QNetworkRequest request;
51  request.setUrl(TTK::Algorithm::mdII(BL_MOVIE_PLAY_URL, false).arg(info->m_songId, cid).arg(16));
53 
54  const QByteArray &bytes = TTK::syncNetworkQueryForGet(&request);
55  if(bytes.isEmpty())
56  {
57  return;
58  }
59 
60  QJson::Parser json;
61  bool ok = false;
62  const QVariant &data = json.parse(bytes, &ok);
63  if(ok)
64  {
65  QVariantMap value = data.toMap();
66  if(value["code"].toInt() == 0 && value.contains("data"))
67  {
68  value = value["data"].toMap();
69 
70  const QVariantList &datas = value["durl"].toList();
71  for(const QVariant &var : qAsConst(datas))
72  {
73  if(var.isNull())
74  {
75  continue;
76  }
77 
78  value = var.toMap();
79 
81  prop.m_url = value["url"].toString();
82  prop.m_bitrate = TTK_BN_250;
84  prop.m_size = TTK::Number::sizeByteToLabel(value["size"].toInt());
85  info->m_songProps.append(prop);
86 
87  info->m_duration = TTKTime::formatDuration(value["length"].toInt());
88  break;
89  }
90  }
91  }
92 }
static constexpr const char * BL_BUVID_URL
song url
The class of the music song property.
Definition: musicobject.h:223
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
MusicSongPropertyList m_songProps
Definition: musicobject.h:295
TTK_MODULE_EXPORT QString sizeByteToLabel(qint64 size)
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForGet(QNetworkRequest *request)
#define TTK_BN_250
Definition: ttkglobal.h:350
#define MP4_FILE_SUFFIX
Definition: musicobject.h:53
#define qAsConst
Definition: ttkqtglobal.h:53
void parseFromMovieInfo(TTK::MusicSongInformation *info, QString &cid)
static constexpr const char * BL_MOVIE_DATA_URL
QVariant parse(QIODevice *io, bool *ok=0)
Read JSON string from the I/O Device and converts it to a QVariant object.
Definition: parser.cpp:69
static constexpr const char * BL_MOVIE_PLAY_URL
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
void makeRequestRawHeader(QNetworkRequest *request)
void parseFromMovieProperty(TTK::MusicSongInformation *info, const QString &cid)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
The class of the music song information.
Definition: musicobject.h:281
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123