Add URL query parameters to the canonical URL
This commit is contained in:
parent
21fc3e43d8
commit
7c772b924c
|
@ -13,7 +13,7 @@ static inline Nodes parse_description_line(const httplib::Request& req, const Co
|
||||||
static inline Element generate_description(const httplib::Request& req, const Config& config, const std::string& description);
|
static inline Element generate_description(const httplib::Request& req, const Config& config, const std::string& description);
|
||||||
static inline Element generate_illust_tags(const httplib::Request& req, const Config& config, const Illust& illust);
|
static inline Element generate_illust_tags(const httplib::Request& req, const Config& config, const Illust& illust);
|
||||||
static inline std::string generate_description_text(const httplib::Request& req, const Config& config, std::string description);
|
static inline std::string generate_description_text(const httplib::Request& req, const Config& config, std::string description);
|
||||||
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const Illust& illust);
|
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const Illust& illust, bool preview);
|
||||||
|
|
||||||
static inline bool is_true(const std::string& str);
|
static inline bool is_true(const std::string& str);
|
||||||
static inline std::string time_to_string(time_t time);
|
static inline std::string time_to_string(time_t time);
|
||||||
|
@ -53,7 +53,7 @@ void artworks_route(const httplib::Request& req, httplib::Response& res, const C
|
||||||
}
|
}
|
||||||
body.nodes.push_back(generate_illust_tags(req, config, illust));
|
body.nodes.push_back(generate_illust_tags(req, config, illust));
|
||||||
body.nodes.push_back(Element("p", {time_to_string(illust.upload_time)}));
|
body.nodes.push_back(Element("p", {time_to_string(illust.upload_time)}));
|
||||||
serve(req, res, config, illust.title, std::move(body), generate_ogp_nodes(req, config, illust));
|
serve(req, res, config, illust.title, std::move(body), generate_ogp_nodes(req, config, illust, preview));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Element generate_user_link(const httplib::Request& req, const Config& config, const Illust& illust) {
|
static inline Element generate_user_link(const httplib::Request& req, const Config& config, const Illust& illust) {
|
||||||
|
@ -227,12 +227,16 @@ static inline std::string generate_description_text(const httplib::Request& req,
|
||||||
return new_description;
|
return new_description;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const Illust& illust) {
|
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const Illust& illust, bool preview) {
|
||||||
|
std::string url = get_origin(req, config) + "/artworks/" + std::to_string(illust.illust_id);
|
||||||
|
if (preview) {
|
||||||
|
url += "?preview=1";
|
||||||
|
}
|
||||||
Nodes nodes({
|
Nodes nodes({
|
||||||
Element("meta", {{"property", "og:title"}, {"content", illust.title}}, {}),
|
Element("meta", {{"property", "og:title"}, {"content", illust.title}}, {}),
|
||||||
Element("meta", {{"property", "og:type"}, {"content", "photo"}}, {}),
|
Element("meta", {{"property", "og:type"}, {"content", "photo"}}, {}),
|
||||||
Element("meta", {{"property", "og:site_name"}, {"content", "Pixwhile"}}, {}),
|
Element("meta", {{"property", "og:site_name"}, {"content", "Pixwhile"}}, {}),
|
||||||
Element("meta", {{"property", "og:url"}, {"content", get_origin(req, config) + "/artworks/" + std::to_string(illust.illust_id)}}, {})
|
Element("meta", {{"property", "og:url"}, {"content", std::move(url)}}, {})
|
||||||
});
|
});
|
||||||
if (illust.comment) {
|
if (illust.comment) {
|
||||||
nodes.push_back(Element("meta", {{"property", "og:description"}, {"content", generate_description_text(req, config, *illust.comment)}}, {}));
|
nodes.push_back(Element("meta", {{"property", "og:description"}, {"content", generate_description_text(req, config, *illust.comment)}}, {}));
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "../../pixivclient.h"
|
#include "../../pixivclient.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const User& user);
|
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const User& user, uint64_t page);
|
||||||
|
|
||||||
void user_illustrations_route(const httplib::Request& req, httplib::Response& res, const Config& config, PixivClient& pixiv_client) {
|
void user_illustrations_route(const httplib::Request& req, httplib::Response& res, const Config& config, PixivClient& pixiv_client) {
|
||||||
uint64_t user_id = to_ull(req.matches[1].str());
|
uint64_t user_id = to_ull(req.matches[1].str());
|
||||||
|
@ -36,15 +36,21 @@ void user_illustrations_route(const httplib::Request& req, httplib::Response& re
|
||||||
generate_user_header(std::move(user), config),
|
generate_user_header(std::move(user), config),
|
||||||
generate_illusts_pager(req, config, illusts, page, "illusts")
|
generate_illusts_pager(req, config, illusts, page, "illusts")
|
||||||
});
|
});
|
||||||
serve(req, res, config, user.display_name + "'s illustrations", std::move(body), generate_ogp_nodes(req, config, user));
|
serve(req, res, config, user.display_name + "'s illustrations", std::move(body), generate_ogp_nodes(req, config, user, page));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const User& user) {
|
static inline Nodes generate_ogp_nodes(const httplib::Request& req, const Config& config, const User& user, uint64_t page) {
|
||||||
|
using namespace std::string_literals;
|
||||||
|
|
||||||
|
std::string url = get_origin(req, config) + "/users/" + std::to_string(user.user_id) + "/illustrations";
|
||||||
|
if (page != 0) {
|
||||||
|
url += "?p="s + std::to_string(page + 1);
|
||||||
|
}
|
||||||
Nodes nodes({
|
Nodes nodes({
|
||||||
Element("meta", {{"property", "og:title"}, {"content", user.display_name + " (@" + user.username + ')'}}, {}),
|
Element("meta", {{"property", "og:title"}, {"content", user.display_name + " (@" + user.username + ')'}}, {}),
|
||||||
Element("meta", {{"property", "og:type"}, {"content", user.ogp_image ? "photo" : "website"}}, {}),
|
Element("meta", {{"property", "og:type"}, {"content", user.ogp_image ? "photo" : "website"}}, {}),
|
||||||
Element("meta", {{"property", "og:site_name"}, {"content", "Pixwhile"}}, {}),
|
Element("meta", {{"property", "og:site_name"}, {"content", "Pixwhile"}}, {}),
|
||||||
Element("meta", {{"property", "og:url"}, {"content", get_origin(req, config) + "/users/" + std::to_string(user.user_id) + "/illustrations"}}, {})
|
Element("meta", {{"property", "og:url"}, {"content", std::move(url)}}, {})
|
||||||
});
|
});
|
||||||
if (user.ogp_image) {
|
if (user.ogp_image) {
|
||||||
nodes.push_back(Element("meta", {{"property", "og:image"}, {"content", proxy_image_url(config, *user.ogp_image)}}, {}));
|
nodes.push_back(Element("meta", {{"property", "og:image"}, {"content", proxy_image_url(config, *user.ogp_image)}}, {}));
|
||||||
|
|
|
@ -37,6 +37,8 @@
|
||||||
// Source: fast-hash https://github.com/ztanml/fast-hash (26 Nov 2021)
|
// Source: fast-hash https://github.com/ztanml/fast-hash (26 Nov 2021)
|
||||||
// Changes: General uplift and providing a general constant hash for ranges
|
// Changes: General uplift and providing a general constant hash for ranges
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// Compression function for Merkle-Damgard construction.
|
// Compression function for Merkle-Damgard construction.
|
||||||
|
|
Loading…
Reference in New Issue