#include "okapi.h" #include "cache.h" #include "debug.h" #include "common.h" #include #include void show_usage() { std::cout << "Usage: geofriends nick1 nick2\n"; std::cout << "Generate HTML stats for user caching intersection from Opencaching data.\n\n"; std::exit(EXIT_FAILURE); } int main(int argc, char** argv) { std::string ocpl_url = "https://opencaching.pl/okapi/"; #include "config_user.h" if (argc < 3) show_usage(); std::string ocpl_user1 = argv[1]; std::string ocpl_user2 = argv[2]; Okapi OCpl(ocpl_url, ocpl_key); std::string ocpl_user_uuid1 = OCpl.get_uuid(ocpl_user1); std::string ocpl_user_profile1 = OCpl.get_profile_url(ocpl_user_uuid1); std::string ocpl_user_uuid2 = OCpl.get_uuid(ocpl_user2); std::string ocpl_user_profile2 = OCpl.get_profile_url(ocpl_user_uuid2); Caches cc1 = OCpl.get_user_caches(ocpl_user_uuid1, 0); Caches cc2 = OCpl.get_user_caches(ocpl_user_uuid2, 0); int cc_no1 = OCpl.get_user_caches_no(ocpl_user_uuid1); int cc_no2 = OCpl.get_user_caches_no(ocpl_user_uuid2); pCaches caches_by_user1; pCaches caches_by_user2; for (auto& i : cc2) { if (i.owner_uuid == ocpl_user_uuid1) caches_by_user1.push_back(&i); } for (auto& i : cc1) { if (i.owner_uuid == ocpl_user_uuid2) caches_by_user2.push_back(&i); } header_html(); std::cout << "
\n"; std::cout << "

Geocaching stats for user profiles:

\n"; std::cout << "\"OCpl\" " << ocpl_user1 << "
\n"; std::cout << "\"OCpl\" " << ocpl_user2 << "
\n"; std::cout << "
\n"; std::cout << "
\n"; std::cout << "Number of caches created by " << ocpl_user1 << " found by " << ocpl_user2 << ": " << caches_by_user1.size() << "
\n"; std::cout << "Number of recommendations given: " << std::count_if(cc2.begin(), cc2.end(), [ocpl_user_uuid1](const auto& c) { return (c.recommended && c.owner_uuid == ocpl_user_uuid1); }) << "
\n"; ; std::cout << "Number of caches created by " << ocpl_user2 << " found by " << ocpl_user1 << ": " << caches_by_user2.size() << "
\n"; std::cout << "Number of recommendations given: " << std::count_if(cc1.begin(), cc1.end(), [ocpl_user_uuid2](const auto& c) { return (c.recommended && c.owner_uuid == ocpl_user_uuid2); }) << "
\n"; ; std::cout << "
\n"; // const int LIST_MAX = 100; short int n = 1; std::cout << "

Caches created by " << ocpl_user1 << " found by " << ocpl_user2 << "

\n"; std::cout << "
\n"; std::cout << "
" << 100 * caches_by_user1.size() / cc_no1 << "%
\n"; std::cout << "
\n"; std::cout << "\n"; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << "\n"; for (auto& i : caches_by_user1) { std::cout << " "; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << "\n"; n++; // if (n > LIST_MAX) break; } std::cout << "
CacheTypeDate hiddenDate foundRegion
" << n << "" << i->link_name() << "" << i->type << "" << i->date_hidden << "" << i->date << "" << i->region << "
\n"; n = 1; std::cout << "

Caches created by " << ocpl_user2 << " found by " << ocpl_user1 << "

\n"; std::cout << "
\n"; std::cout << "
" << 100 * caches_by_user2.size() / cc_no2 << "%
\n"; std::cout << "
\n"; std::cout << "\n"; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << "\n"; for (auto& i : caches_by_user2) { std::cout << " "; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << ""; std::cout << "\n"; n++; // if (n > LIST_MAX) break; } std::cout << "
CacheTypeDate hiddenDate foundRegion
" << n << "" << i->link_name() << "" << i->type << "" << i->date_hidden << "" << i->date << "" << i->region << "
\n"; footer_html(); }