30 const std::unordered_set<std::string>& batch,
34 return nlohmann::json::object();
38 ?
"https://www.wikidata.org/w/api.php"
39 :
"https://commons.wikimedia.org/w/api.php");
41 = (kind != corespace::entity_kind::entity_schema ? join_str(opt.props)
42 : join_str(opt.prop));
44 corespace::parameter_list base_params { opt.params };
46 base_params.emplace_back(
"action",
"query");
48 base_params.emplace_back(
"action",
"wbgetentities");
51 std::string prefix {};
53 prefix =
"EntitySchema:";
55 nlohmann::json combined = nlohmann::json::object();
56 for (
auto&& chunk : batch | std::views::chunk(opt.batch_threshold)) {
57 std::vector<std::string> chunk_vec;
58 for (
const auto& id : chunk) {
59 if (arachne::identify(id) != kind) {
62 chunk_vec.emplace_back(prefix + id);
64 corespace::parameter_list params { base_params };
65 auto entities = join_str(chunk_vec);
67 if (kind == corespace::entity_kind::entity_schema) {
68 params.emplace_back(
"titles", entities);
69 params.emplace_back(
"prop", props);
71 params.emplace_back(
"ids", entities);
72 params.emplace_back(
"props", props);
74 auto r = client.get(url, params);
75 auto data = nlohmann::json::parse(r.text,
nullptr,
true);
76 if (!data.is_object()) {
79 combined.merge_patch(data);