При запросе к ресурсу, необходимо настраивать запрос, т.е. формировать правильный url, оставлять пустые параметры нельзя, т.е. к примеру есть некоторые необязательные параметры, и если они не нужно, они не должны присутствовать в запросе.
Я написал структуру настроек, которая формирует QString
на основе данных которые в ней содержатся:
#include <QString>
#include <QtGlobal>
#include <QVariant>
#include <QUrl>
typedef struct kodik_settings_t
{
typedef enum class sort_type_t
{
year = 0x00000000,
create = 0x00000001,
update = 0x00000002
} sort_type_t;
typedef enum class order_by_t
{
ask = 0x00000000,
desk = 0x00000001
} order_by_t;
quint8 limit;
sort_type_t sort_by;
order_by_t order_by;
quint32 year;
qint64 translation_id;
QVariant cam_rip;
QVariant not_blocked_for_me;
QString make_url() const;
kodik_settings_t();
protected:
bool with_episodes_;
bool with_page_links_;
bool with_material_data_;
private:
const QString url_make_;
} kodik_settings_t;
kodik_settings_t::kodik_settings_t() :
limit(100),
sort_by(sort_type_t::update),
order_by(order_by_t::ask),
year(0u),
translation_id(INT64_MIN),
cam_rip(),
not_blocked_for_me(),
with_episodes_(true),
with_page_links_(true),
with_material_data_(true),
url_make_("%1%2%3%4%5%6%7%8&type=anime-serial")
{
}
QString kodik_settings_t::make_url() const
{
QString limit_data = QString("&limit=%1")
.arg(limit);
QString sort_by_data = QString("&sort=%1");
QString order_by_data = QString("&order_by=%1")
.arg(order_by == order_by_t::ask ? "ask" : "desk");
QString year_data = year == 0 ? "" : QString("&year=%1").arg(year);
QString translation_id_data =
translation_id == INT64_MIN
? ""
: QString("&translation_id=%1")
.arg(translation_id);
QString cam_rip_data =
cam_rip.isNull()
? ""
: QString("&camrip=%1")
.arg(cam_rip.toBool() ? "true" : "false");
QString not_blocked_for_me_data =
not_blocked_for_me.isNull()
? ""
: QString("¬_blocked_for_me=%1")
.arg(not_blocked_for_me.toBool() ? "true" : "false");
QString const_data = QString("&with_episodes=%1&with_page_links=%2&with_material_data=%3")
.arg(with_episodes_ ? "true" : "false", with_page_links_ ? "true" : "false", with_material_data_ ? "true" : "false");
switch (sort_by)
{
case sort_type_t::year:
sort_by_data = sort_by_data.arg("year");
break;
case sort_type_t::create:
sort_by_data = sort_by_data.arg("create");
break;
case sort_type_t::update:
sort_by_data = sort_by_data.arg("update");
break;
}
return url_make_
.arg
(
limit_data,
sort_by_data,
order_by_data,
year_data,
translation_id_data,
cam_rip_data,
not_blocked_for_me_data,
const_data
);
}
Но мне кажется что метод make_url
может быть проще чем сейчас. Т.е. без нагромождения arg...arg...arg...
, но увы я не знаю точно это или нет.
Можно ли как-то упростить формирование строки запроса?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В книге "Параллельное программирование на С++ в действии" приводится пример спинлока
Есть 4 листбокса в winforms, количество айтемов там всегда одинаковое, как сделать синхронную прокрутку с клавиатуры(стрелок), колесика мышки...