diff --git a/geofriends.cpp b/geofriends.cpp new file mode 100644 index 0000000..1041c1c --- /dev/null +++ b/geofriends.cpp @@ -0,0 +1,121 @@ +#include "okapi.h" +#include "cache.h" +#include "debug.h" +#include "common.h" + +#include +#include +#include +#include + +void show_usage() { + std::cout << "Usage: geofriends [options] 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); + + + 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); + } + + std::cout << "\n"; + std::cout << "\n"; + std::cout << " \n"; + std::cout << " \n"; + std::cout << " \n"; + std::cout << " Geocaching stats\n"; + std::cout << "\n"; + std::cout << "\n"; + 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](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](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 << ""; + 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 << ""; + 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(); +} diff --git a/meson.build b/meson.build index 361b5da..4ea10e3 100644 --- a/meson.build +++ b/meson.build @@ -15,10 +15,12 @@ endif link = ['-lheatmap'] src = ['geostat.cpp', 'okapi.cpp', 'cache.cpp', 'debug.cpp', 'heat.cpp', 'ocdb.cpp', 'common.cpp', 'region.cpp'] +src_fr = ['geofriends.cpp', 'okapi.cpp', 'cache.cpp', 'debug.cpp', 'common.cpp'] src_cli = ['geostat_cli.cpp', 'okapi.cpp', 'gpx.cpp', 'cache.cpp', 'debug.cpp', 'heat.cpp', 'ocdb.cpp', 'common.cpp', 'region.cpp'] src_db = ['geodb.cpp', 'debug.cpp', 'ocdb.cpp', 'okapi.cpp', 'cache.cpp', 'common.cpp'] executable('geostat', src, dependencies : [curl_dep, json_dep, magick_dep, sqlite_dep], link_args: link, install: true) +executable('geofriends', src_fr, dependencies : [curl_dep, json_dep], install: true) executable('geostat_cli', src_cli, dependencies : [curl_dep, json_dep, magick_dep, sqlite_dep, gpx_dep], link_args: link, install: true) executable('geodb', src_db, dependencies : [sqlite_dep, json_dep, curl_dep], install: true)