9 static constexpr
const char *
ACR_QUERY_URL =
"VzBxZCtBUDBKK1R6aHNiTGxMdy84SzlIUVA5a3cvbjdKQ1ZIVGdYRThBS0hZMTlZSnhRQ0Y5N0lZdi9QQ3VveVEyVDdXbll3ZUZvPQ==";
10 static constexpr
const char *
XF_QUERY_URL =
"cFJiZUh0Z3FxalV6NzlBcEhUVmN5VGRzMm5NZ01rbzlWaFUzRE1ubzBoTU53WlI5cEZpNnVxT3l6OEE9";
11 static constexpr
const char *
XF_QUERY_BODY =
"VHd2bFMwaTZGNFQxeDBuU0prYXE0SDIzOVYyWlVwMWk=";
12 static constexpr
const char *
XF_QUERY_DATA =
"a29sU1NRVExPbzIzRDdiNjRlbWUwdz09";
23 connect(
this, SIGNAL(
finished()), &loop, SLOT(quit()));
43 if(!file.open(QIODevice::ReadOnly))
49 const QString &boundary =
"----";
50 const QString &start =
"--" + boundary;
51 const QString &end =
"\r\n--" + boundary +
"--\r\n";
52 const QString &contentType =
"multipart/form-data; boundary=" + boundary;
54 const QString &method =
"POST";
55 const QString &endpoint =
"/v1/identify";
56 const QString &type =
"fingerprint";
57 const QString &version =
"1";
60 const QString &sign = method +
"\n" + endpoint +
"\n" +
m_accessKey +
"\n" + type +
"\n" + version +
"\n" + timeStamp;
64 value += start +
"\r\nContent-Disposition: form-data; name=\"access_key\"\r\n\r\n" +
m_accessKey +
"\r\n";
65 value += start +
"\r\nContent-Disposition: form-data; name=\"data_type\"\r\n\r\n" + type +
"\r\n";
66 value += start +
"\r\nContent-Disposition: form-data; name=\"timestamp\"\r\n\r\n" + timeStamp +
"\r\n";
67 value += start +
"\r\nContent-Disposition: form-data; name=\"signature_version\"\r\n\r\n" + version +
"\r\n";
68 value += start +
"\r\nContent-Disposition: form-data; name=\"signature\"\r\n\r\n" + body +
"\r\n";
69 value += start +
"\r\nContent-Disposition: form-data; name=\"sample_bytes\"\r\n\r\n" + QString::number(file.size()) +
"\r\n";
70 value += start +
"\r\nContent-Disposition: form-data; name=\"sample\"; filename=\"" + file.fileName() +
"\"\r\n";
71 value +=
"Content-Type: application/octet-stream\r\n\r\n";
74 body.append(value.toUtf8());
75 body.append(file.readAll());
76 body.append(end.toUtf8());
79 QNetworkRequest request;
102 QVariantMap value = json.
toVariant().toMap();
103 if(value.contains(
"metadata"))
105 value = value[
"metadata"].toMap();
107 const QVariantList &datas = value[
"music"].toList();
108 for(
const QVariant &var :
qAsConst(datas))
115 for(
const QVariant &artists : value[
"artists"].toList())
117 value = artists.toMap();
149 const QVariantMap &value = json.
toVariant().toMap();
168 if(!file.open(QIODevice::ReadOnly))
174 const QByteArray &data = file.readAll();
181 QNetworkRequest request;
183 request.setRawHeader(
"X-CurTime", timeStamp);
184 request.setRawHeader(
"X-Param", audioBody);
185 request.setRawHeader(
"X-Appid",
m_accessKey.toUtf8());
186 request.setRawHeader(
"X-CheckSum", md5);
208 QVariantMap value = json.
toVariant().toMap();
209 if(value[
"code"].toInt() == 0)
211 const QVariantList &datas = value[
"data"].toList();
212 for(
const QVariant &var :
qAsConst(datas))
247 const QVariantMap &value = json.
toVariant().toMap();
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
#define TTK_NETWORK_QUERY_CHECK(VALUE)
TTK_MODULE_EXPORT QByteArray md5(const QByteArray &data)
void downLoadDataChanged(const QString &bytes)
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone) noexcept
void downLoadRawDataChanged(const QByteArray &bytes)
static qint64 currentTimestamp() noexcept
QVariant toVariant() const
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=0)
MusicXFIdentifyRequest(QObject *parent=nullptr)
virtual void startToRequest(const QString &path) overridefinal
virtual void downLoadFinished() overridefinal
static constexpr const char * XF_QUERY_BODY
int exec(ProcessEventsFlags flags=AllEvents)
TTK_MODULE_EXPORT QByteArray hmacSha1(const QByteArray &data, const QByteArray &key)
virtual void downLoadFinished()
The class of the ttk event loop.
The class of the song identify data item.
static constexpr const char * XF_QUERY_DATA
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={}) noexcept
virtual void startToRequest(const QString &path) overridefinal
#define TTK_INFO_STREAM(msg)
The class of the data source download request.
QNetworkAccessManager m_manager
virtual void replyError(QNetworkReply::NetworkError error) override
MusicAbstractIdentifyRequest(QObject *parent=nullptr)
The class of the abstract network.
static constexpr const char * OS_ACRCLOUD_URL
void startToRequest(const QString &url)
TTK_MODULE_EXPORT QString toString(Record type) noexcept
virtual void downLoadFinished() overridefinal
virtual void downLoadKeyFinished(const QByteArray &bytes) overridefinal
The class of the abstract song identify query request.
virtual void downLoadKeyFinished(const QByteArray &bytes) overridefinal
MusicACRIdentifyRequest(QObject *parent=nullptr)
static constexpr const char * XF_QUERY_URL
static constexpr const char * ACR_QUERY_URL
virtual void downLoadKeyFinished(const QByteArray &bytes)=0
#define TTK_ERROR_STREAM(msg)
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
static QString makeDataBucketUrl()
MusicSongIdentifyDataList m_items
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.