téměř automatické statistiky na geocaching.com

je pěkný, když má někdo v profilu na geocaching.com nějaké pěkné statistiky. jak těchto statistik dosáhnout je vcelku jednoduché, můžeme použít nějaky program pro správu keší, a třeba GSAK, nebo GeoGet nám statistiky nějakým způsobem vygeneruje. člověk je ale tvor líný, a tak hledá jak si celou činnost co nejvíce usnadnit

program GSAK nepoužívám, prostě mám nějak rád GeoGet. ten sice v základu jakýsi pokus o statistiky vygeneruje, ale bez pomoci třetí strany to není ono. používal jsem tedy ještě nedávno program GeoStatGen, ten nabízí relativně široké možnosti přizpůsobení, ale jeho vývoj nějak ustanul a tak se objevil nástupce ve formě GgStat. po jeho „instalaci“ se vám na liště v geogetu objeví dvě nové ikonky, z nichž jedna volá skript perlu, a druhá samostatný exe soubor.

perl v pc nemám, tak jsem zkusil ten exe. po nastaveni několika proměnných v makru stačí kliknout a statistiky (ne nepodobné těm z GSAKu) jsou na světě.

no jo, ale teď nastává ta část, kdy musíte obsah html souboru zkopírovat do schránky, a v nastavení profilu na geocaching.com jej ručně vložit, a dát uložit. to je hezké kdyby se to dělalo jednou, ale dělat to po každé nalezené keši je pěkná otrava.

jako spravnou PHP lamu mě napadlo použít něco jako include, pokud by to stránka geocaching dovolila. ale medwyn_cz mě upozornil, že na stránkach, které běží pod ASP prostě PHP include nepůjde, a navíc přihodil malou radu, kterou zahlíd na něčím profilu

<object data="http://www.hradnik.cz/geocaching/index.html" type="text/html" width="98%" height="700">http://www.hradnik.cz/geocaching/index.html</object>

tohle už vypadá slibně! po několika pokusech s nastavením rozměrů už se mi v profilu ukazovaly statistiky, které se tahaly z mého webu! stačilo přidat

<!--[if IE]> Error, Internet Explorer has very poor support for tag &amp;lt;object&amp;gt;
and geocaching.com blocking other options like iframe, js...
You will find my stats <a href="http://gc.mikrom.cz/stats.html">here</a>.
<![endif]-->
<!--[if !IE]> <--><object type="text/html" data="http://gc.mikrom.cz/stats.html" width="790" height="4200"> Some error. You'll find my stats <a href="http://gc.mikrom.cz/stats.html">here</a>.</object><!-->
<![endif]-->

teď jsme sice ve fázi kdy se nám tahají data z jiného webu, ale páci to ušetřilo leda tak v tom, že nyní stačí na web nahrát celý soubor a nemusíme se babrat se zdrojákem. vzpomněl jsem si proto na FTP((FileTransferProtocol)) a po chvilce už věděl, že se s FTP dá vcelku použitelně komunikovat přes příkazový řádek. po pár planých pokusech jsem vygooglil řešení v podobě následujících řádků upload.stats.bat

:: piseme bataky
:: http://hps.mallat.cz/view.php?cisloclanku=2003070903
:: code
:: http://wiki.trivialbeing.net/Right_Click_Upload_to_Internet_via_Batch_File @echo off setlocal
:: Variables
set file=stats.html
set f=log.txt
set web=ftp.mikrom.cz
set name=mikrom_cz
set password=mojetajneheslo

:: Compose ftp commands file
echo open %web% > %f%
echo user %name% %password% >> %f%
echo binary >> %f%

:: Change to correct directory
echo cd gc >> %f%

:: Upload to this directory
echo put %file% >> %f%
echo bye >> %f%

:: Execute ftp command
:: Use &amp;amp;amp;amp;quot;-d&amp;amp;amp;amp;quot; key for verbose output
ftp -n -d -s:%f%

:: Cleanup
del /f /q %f%
del /f /q %file%
endlocal
exit

nyní už jen stačilo poupravit makro GgStat.ggp.pas aby vygenerované statistiky uložilo do datového adresáře geogetu, zavolalo soubor .bat (obsah viz výše) uložený tamtéž a místo načteni souboru stats.htm v prohlížeči načetlo rovnou stránku s profilem. GgStat.ggp.pas

const
  GgStat = 'GgStat.exe';
  Database = 'geoget.db3';
  Statistics = 'stats.html';
  Template = 'GgStatTemplate.en';
  Upload = 'GgStatUpload.bat';
  HomeLat = '50.558708'; //Geoget_RefX
  HomeLon = '15.913619'; //Geoget_RefY
  ProfilePage = 'http://www.geocaching.com/profile/?guid=c3b9afaa-8556-4ddc-9d17-12459c86528b';

function PluginCaption: string;
begin
  Result := 'GgStat exe';
end;

function PluginHint: string;
begin
  Result := 'GgStat exe';
end;

function PluginIcon: string;
begin
  Result := DecodeBase64('Qk32AAAAAAAAAHYAAAAoAAAAEAAAABAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AIAAAAAAAACIB////////wgIAA8ABwAAcAcMwAuwCZEABwzEC7MJkQgHDMQLswmRCAcMxAuzCZEIBwzEC7MJkQgIDMQLswmRCAeAAAuzCZEICHCIC7MJkQgHgIgLswCRCA9wiAuzCAAIgPCIC7gIiIiIAIiAAAiIiIiAiIiIiIiI');
end;

function PluginFlags: string;
begin
  Result := 'toolbar';
end;

procedure PluginStart;
begin
  RunExec('&amp;amp;amp;amp;quot;' + AnsiToOem(GgStat) + '&amp;amp;amp;amp;quot; -d &amp;amp;amp;amp;quot;' + AnsiToOem(Database) + '&amp;amp;amp;amp;quot; -o &amp;amp;amp;amp;quot;' + AnsiToOem(Statistics) + '&amp;amp;amp;amp;quot; -t &amp;amp;amp;amp;quot;' + AnsiToOem(Template) + '&amp;amp;amp;amp;quot; -c ' + Geoget_Owner + ' -x ' + HomeLat + ' -y ' + HomeLon);
  RunExec(AnsiToOem(Upload)); //RunShell(Statistics);
  RunShell(ProfilePage);
end;

vysledek? JEDNOu jedinkrát kliknu na ikonku v geogetu a v tu ránu mám na profilu aktuální statistiky! to je skvělé, ne?

EDIT 11.11.2008: trochu jsem zaktualizoval *.pas a *.bat a upravil kód do profilu abych ošetřil IE, který jako jediný prohlížeč nezvládá tag <object> pozor!

EDIT 13.11.2008: nový geojarry (v.11) umí nahrávat soubory do profilu! pro stávající uživatele geojarryho to znamená POUZE upravit soubor GgStat.ggp.pas na:

{$INCLUDE geojarry.config.pas }

const
  GgStat = 'GgStat.exe';
  Database = 'geoget.db3';
  Statistics = 'stats.html';
  Template = 'GgStatTemplate.en';
  //Upload = 'GgStatUpload.bat';
  HomeLat = '50.558708'; //Geoget_RefX
  HomeLon = '15.913619'; //Geoget_RefY
  ProfilePage = 'http://www.geocaching.com/profile/?guid=c3b9afaa-8556-4ddc-9d17-12459c86528b';

function PluginCaption: string;
begin
  Result := 'GgStat exe';
end;

function PluginHint: string;
begin
  Result := 'GgStat exe';
end;

function PluginIcon: string;
begin
  Result := DecodeBase64('Qk32AAAAAAAAAHYAAAAoAAAAEAAAABAAAAABAAQAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AIAAAAAAAACIB////////wgIAA8ABwAAcAcMwAuwCZEABwzEC7MJkQgHDMQLswmRCAcMxAuzCZEIBwzEC7MJkQgIDMQLswmRCAeAAAuzCZEICHCIC7MJkQgHgIgLswCRCA9wiAuzCAAIgPCIC7gIiIiIAIiAAAiIiIiAiIiIiIiI');
end;

function PluginFlags: string;
begin
  Result := 'toolbar';
end;

procedure PluginStart;
var
  gjini: string;
  datadir: string;
  inif: string;
  gjresult: integer;
begin
  if gjUsername = '' then begin
    ShowMessage('Please, fill variables in geojarry.config.pas first and restart Geoget!');
    exit;
  end;

  //build GeoJarry.ini
  gjini := '[geojarry]' + CRLF;
  gjini := gjini + 'username=' + gjUsername + CRLF;
  gjini := gjini + 'password=' + gjPassword + CRLF;
  gjini := gjini + 'proxyip=' + gjproxyip + CRLF;
  gjini := gjini + 'proxyport=' + gjproxyport + CRLF;
  gjini := gjini + 'proxyuser=' + gjproxyuser + CRLF;
  gjini := gjini + 'proxypass=' + gjproxypass + CRLF;
  gjini := gjini + 'countryid=' + gjcountryid + CRLF;
  gjini := gjini + 'stateid=' + gjstateid + CRLF;
  gjini := gjini + 'maxcount=10' + CRLF;
  datadir := geoget_datadir + 'gjtemp';
  Forcedirectories(datadir);
  gjini := gjini + 'datadir=' + datadir + CRLF;

  inif := Geoget_datadir + 'gjtemp.ini';
  StringTofile(gjini, inif);

  //build stats.html
  RunExec('&amp;amp;amp;amp;quot;' + AnsiToOem(GgStat) + '&amp;amp;amp;amp;quot; -d &amp;amp;amp;amp;quot;' + AnsiToOem(Database) + '&amp;amp;amp;amp;quot; -o &amp;amp;amp;amp;quot;' + AnsiToOem(Statistics) + '&amp;amp;amp;amp;quot; -t &amp;amp;amp;amp;quot;' + AnsiToOem(Template) + '&amp;amp;amp;amp;quot; -c ' + Geoget_Owner + ' -x ' + HomeLat + ' -y ' + HomeLon);

  //upload stats on FTP //RunExec(AnsiToOem(Upload));

  //upload stats on gc.com profile
  gjresult := RunExec('&amp;amp;amp;amp;quot;' + Geoget_datadir + 'geojarry.exe&amp;amp;amp;amp;quot; &amp;amp;amp;amp;quot;' + inif + '&amp;amp;amp;amp;quot; profile &amp;amp;amp;amp;quot;' + Statistics + '&amp;amp;amp;amp;quot;'); //RunShell(Statistics);

  case gjresult of
    0: begin
      RunShell(ProfilePage);
    end;
  end;
end;

a je to! v podstatě vidíte, že jsem si jen z geojarryho maker vypůjčil vygenerovaní ini souboru a předhodil mu ho s parametrem `profile` a cestou k souboru se statistikami. hodně štěstí při zprovozňování! vlákno na fóru geocaching.cz najdete zde.

EDIT 7.12:2008: v dokumentech je ke stažení nová verze makra, která počítá ftf-index, využívá konfigurace přes samostatný soubor a přes rozhraní GeoGetu.

EDIT 21.1.2009: makro se trochu rozrůstá, takže občas sledujte sekci dokumenty, najdete tam GgStat2.zip s popisem aktualníchzměn. pokud máte problémy s rozběhnutím statistik, tak nejprve koukněte na wiki a až pak mě kontaktujte (píše mi kvůli tomu čím dál víc lidí) v krajním případě jsem ochoten Vám to přes TeamViewer rozchodit. v současné době makro umí:

  • poskládat si soubor BAT a nahrát s ním statistiky na FTP pro případ, že používáte prvni metodu přes <object>
  • nebo nahraje statistiky přímo na profil pomocí GeoJarry
  • počítá FTF index, který uloží do souboru *html*, který pomocí INCLUDE vložíte do statistik
  • nalezené kešky opatří tagem CZ kraj a CZ okres pro generování mapky nálezů podle krajů a okresů
  • nalezené kešky opatří tagem Elevation, který obsahuje jejich nadmořskou výšku a hodí se pro statistiky související s nadmořskou výškou
  • nalezené kešky nahraje na server geocaching.cz, aby Vám byl schopen vygenerovat mapku nálezů
  • v případě problémů Vás bude po nastavení volby SilentMode = 'no' informovat o každém kroku všechny tyto volby je možné nastavit buď ručně v souboru GgStat2.config.pas, nebo skrze rozhraní GeoGetu: Tools -> Settings -> Plugins víceméně aktuální podobu výsledných statistik si můžete prohlédnout na mém profilu.

Pokračování -> AutoStat

mikrom

Roman Mikulka aka mikrom. Ajťák, opravář, programátor samouk, elektrotechnik, koloběžkář a geocacher. Více na samostatné stránce O mně.

Mohlo by se vám líbit...