9 static constexpr
const char *
QUERY_URL =
"VzBxZCtBUDBKK1R6aHNiTGxMdy84SzlIUVA5a3cvbjdKQ1ZIVGdYRThBS0hZMTlZSnhRQ0Y5N0lZdi9QQ3VveVEyVDdXbll3ZUZvPQ==";
20 connect(
this, SIGNAL(
finished()), &loop, SLOT(quit()));
32 const QString &boundary =
"----";
33 const QString &start =
"--" + boundary;
34 const QString &end =
"\r\n--" + boundary +
"--\r\n";
35 const QString &contentType =
"multipart/form-data; boundary=" + boundary;
37 const QString &method =
"POST";
38 const QString &endpoint =
"/v1/identify";
39 const QString &type =
"fingerprint";
40 const QString &version =
"1";
43 const QString &sign = method +
"\n" + endpoint +
"\n" +
m_accessKey +
"\n" + type +
"\n" + version +
"\n" + timeStamp;
47 value += start +
"\r\nContent-Disposition: form-data; name=\"access_key\"\r\n\r\n" +
m_accessKey +
"\r\n";
48 value += start +
"\r\nContent-Disposition: form-data; name=\"data_type\"\r\n\r\n" + type +
"\r\n";
49 value += start +
"\r\nContent-Disposition: form-data; name=\"timestamp\"\r\n\r\n" + timeStamp +
"\r\n";
50 value += start +
"\r\nContent-Disposition: form-data; name=\"signature_version\"\r\n\r\n" + version +
"\r\n";
51 value += start +
"\r\nContent-Disposition: form-data; name=\"signature\"\r\n\r\n" + body +
"\r\n";
54 if(!file.open(QIODevice::ReadOnly))
60 value += start +
"\r\nContent-Disposition: form-data; name=\"sample_bytes\"\r\n\r\n" + QString::number(file.size()) +
"\r\n";
61 value += start +
"\r\nContent-Disposition: form-data; name=\"sample\"; filename=\"" + file.fileName() +
"\"\r\n";
62 value +=
"Content-Type: application/octet-stream\r\n\r\n";
65 body.append(value.toUtf8());
66 body.append(file.readAll());
67 body.append(end.toUtf8());
70 QNetworkRequest request;
91 const QVariant &data = json.
parse(
m_reply->readAll(), &ok);
94 QVariantMap value = data.toMap();
95 if(value.contains(
"metadata"))
97 value = value[
"metadata"].toMap();
99 const QVariantList &datas = value[
"music"].toList();
100 for(
const QVariant &var :
qAsConst(datas))
107 for(
const QVariant &artists : value[
"artists"].toList())
109 value = artists.toMap();
139 const QVariant &data = json.
parse(bytes, &ok);
142 const QVariantMap &value = data.toMap();
TTK_MODULE_EXPORT QString charactersReplace(const QString &value)
#define TTK_NETWORK_QUERY_CHECK(VALUE)
void downLoadDataChanged(const QString &bytes)
void downLoadRawDataChanged(const QByteArray &bytes)
static qint64 currentTimestamp() noexcept
virtual void downLoadFinished() overridefinal
TTK_MODULE_EXPORT void setSslConfiguration(QNetworkRequest *request, QSslSocket::PeerVerifyMode mode=QSslSocket::VerifyNone)
TTK_MODULE_EXPORT QByteArray hmacSha1(const QByteArray &data, const QByteArray &key)
int exec(ProcessEventsFlags flags=AllEvents)
virtual void downLoadFinished()
void downLoadRawDataFinished(const QByteArray &bytes)
The class of the song identify data item.
MusicSongIdentifyDataList m_items
#define TTK_INFO_STREAM(msg)
void startToRequest(const QString &path)
The class of the data source download request.
QNetworkAccessManager m_manager
#define TTK_DATE_TIMES_FORMAT
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.
static constexpr const char * QUERY_URL
The class of the abstract network.
static constexpr const char * OS_ACRCLOUD_URL
void startToRequest(const QString &url)
MusicIdentifySongRequest(QObject *parent=nullptr)
TTK_MODULE_EXPORT void makeContentTypeHeader(QNetworkRequest *request, const QByteArray &data={})
TTK_MODULE_EXPORT QString toString(Record type)
Main class used to convert JSON data to QVariant objects.
#define TTK_ERROR_STREAM(msg)
The class of the semaphore event loop.
TTK_MODULE_EXPORT QString mdII(const QString &data, bool encode)
static QString makeDataBucketUrl()
#define QtNetworkErrorConnect(p, q, f, s)
Network error connect.