TTKMusicPlayer  4.1.3.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicwyqueryartistrequest.cpp
Go to the documentation of this file.
2 
5 {
6  m_pageSize = TTK_HIGH_LEVEL; // ARTIST_PAGE_SIZE;
8 }
9 
11 {
12  TTK_INFO_STREAM(className() << __FUNCTION__ << offset);
13 
14  deleteAll();
15  m_totalSize = m_pageSize; // 0
17 
18  QNetworkRequest request;
19  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
21  QString("{}"));
22 
23  m_reply = m_manager.post(request, parameter);
24  connect(m_reply, SIGNAL(finished()), SLOT(downLoadFinished()));
26 }
27 
29 {
30  TTK_INFO_STREAM(className() << __FUNCTION__ << info->m_songId << bitrate << "kbps");
31 
36 
39 }
40 
42 {
43  TTK_INFO_STREAM(className() << __FUNCTION__);
44 
46  if(m_reply && m_reply->error() == QNetworkReply::NoError)
47  {
48  QJson::Parser json;
49  bool ok = false;
50  const QVariant &data = json.parse(m_reply->readAll(), &ok);
51  if(ok)
52  {
53  QVariantMap value = data.toMap();
54  if(value["code"].toInt() == 200 && value.contains("hotSongs"))
55  {
56  const QVariantMap &artistObject = value["artist"].toMap();
57  const QString &coverUrl = artistObject["picUrl"].toString();
58  const QString &artistName = TTK::String::charactersReplace(artistObject["name"].toString());
59 
60  const QVariantList &datas = value["hotSongs"].toList();
61  for(const QVariant &var : qAsConst(datas))
62  {
63  if(var.isNull())
64  {
65  continue;
66  }
67 
68  value = var.toMap();
70 
72  info.m_songId = value["id"].toString();
73  info.m_songName = TTK::String::charactersReplace(value["name"].toString());
74 
75  info.m_artistName = artistName;
76  const QVariantList &artistsArray = value["ar"].toList();
77  for(const QVariant &artistValue : qAsConst(artistsArray))
78  {
79  if(artistValue.isNull())
80  {
81  continue;
82  }
83 
84  const QVariantMap &artistObject = artistValue.toMap();
85  info.m_artistId = artistObject["id"].toString();
86  break;
87  }
88 
89  const QVariantMap &albumObject = value["al"].toMap();
90  info.m_albumId = albumObject["id"].toString();
91  info.m_albumName = TTK::String::charactersReplace(albumObject["name"].toString());
92 
93  info.m_coverUrl = coverUrl;
95  info.m_duration = TTKTime::formatDuration(value["dt"].toInt());
96  info.m_year.clear();
97  info.m_trackNumber = value["no"].toString();
98 
102 
103  if(!m_artistFound)
104  {
105  m_artistFound = true;
106  MusicResultDataItem item;
108  queryArtistIntro(&item);
110 
111  item.m_nickName.clear();
112  const QVariantList &aliasArray = artistObject["alias"].toList();
113  for(const QVariant &aliasValue : qAsConst(aliasArray))
114  {
115  if(aliasValue.isNull())
116  {
117  continue;
118  }
119 
120  item.m_nickName += aliasValue.toString() + ",";
121  }
122 
123  if(!item.m_nickName.isEmpty())
124  {
125  item.m_nickName.chop(1);
126  }
127  else
128  {
130  }
131 
132  item.m_id = info.m_artistId;
133  item.m_name = info.m_artistName;
134  item.m_coverUrl = info.m_coverUrl;
135  item.m_time = TTKDateTime::format(artistObject["publishTime"].toLongLong(), TTK_DATE_FORMAT);
136  Q_EMIT createArtistItem(item);
137  }
138 
139  Q_EMIT createResultItem({info, serverToString()});
140  m_items << info;
141  }
142  }
143  }
144  }
145 
146  Q_EMIT downLoadDataChanged({});
147  deleteAll();
148 }
149 
151 {
152  QNetworkRequest request;
153  const QByteArray &parameter = ReqWYInterface::makeTokenRequest(&request,
156 
157  const QByteArray &bytes = TTK::syncNetworkQueryForPost(&request, parameter);
158  if(bytes.isEmpty())
159  {
160  return;
161  }
162 
163  QJson::Parser json;
164  bool ok = false;
165  const QVariant &data = json.parse(bytes, &ok);
166  if(ok)
167  {
168  QVariantMap value = data.toMap();
169  if(value["code"].toInt() == 200)
170  {
171  item->m_description = value["briefDesc"].toString();
172  if(!item->m_description.isEmpty())
173  {
174  item->m_description = QString("%1\r\n\r\n").arg(item->m_description);
175  }
176 
177  const QVariantList &datas = value["introduction"].toList();
178  for(const QVariant &var : qAsConst(datas))
179  {
180  if(var.isNull())
181  {
182  continue;
183  }
184 
185  value = var.toMap();
187 
188  item->m_description += QString("**%1**\r\n").arg(value["ti"].toString());
189  item->m_description += value["txt"].toString() + "\r\n\r\n";
190  }
191  }
192  }
193 }
TTK_MODULE_EXPORT QByteArray syncNetworkQueryForPost(QNetworkRequest *request, const QByteArray &data)
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
#define TTK_NETWORK_QUERY_CHECK(VALUE)
The class of the search result data item.
virtual void deleteAll()
void downLoadDataChanged(const QString &bytes)
QNetworkReply * m_reply
#define TTK_DEFAULT_STR
Definition: ttkglobal.h:203
virtual void startToPage(int offset) overridefinal
MusicSongPropertyList m_songProps
Definition: musicobject.h:297
The class of the query artist download data from net.
virtual void downLoadFinished()
MusicWYQueryArtistRequest(QObject *parent=nullptr)
static constexpr const char * WY_ARTIST_INFO_URL
voidpf uLong offset
Definition: ioapi.h:142
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate)
TTK::MusicSongInformationList m_items
#define qAsConst
Definition: ttkqtglobal.h:51
static constexpr const char * QUERY_WY_INTERFACE
#define TTK_INFO_STREAM(msg)
Definition: ttklogger.h:68
static constexpr const char * WY_SONG_LRC_OLD_URL
QNetworkAccessManager m_manager
void createResultItem(const MusicResultInfoItem &songItem)
bool fetchUrlPathSize(TTK::MusicSongProperty *prop, const QString &duration) const
virtual void replyError(QNetworkReply::NetworkError error) override
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
#define TTK_SLOT
Definition: ttkqtglobal.h:181
#define TTK_DATE_FORMAT
Definition: ttkglobal.h:235
virtual void downLoadFinished() overridefinal
void parseFromSongProperty(TTK::MusicSongInformation *info, int bitrate)
#define TTK_HIGH_LEVEL
Definition: ttkglobal.h:260
TTK_MODULE_EXPORT QString toString(Record type)
static constexpr const char * WY_ARTIST_URL
artist url
virtual void startToQueryResult(TTK::MusicSongInformation *info, int bitrate) overridefinal
void queryArtistIntro(MusicResultDataItem *item) const
void createArtistItem(const MusicResultDataItem &item)
Main class used to convert JSON data to QVariant objects.
Definition: parser.h:40
static QString format(const QString &time, const QString &format)
Definition: ttktime.cpp:254
static constexpr const char * WY_ARTIST_INFO_DATA_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:283
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.
Definition: ttkqtcompat.h:59
static qint64 formatDuration(const QString &time) noexcept
Definition: ttktime.cpp:123