• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Ratinginterface

greiol

Geoguru
Mit dem NB von morgen gibt es ein experimentelles Interface um Ratinginformationen an CacheWolf zu übergeben.

Dafür dürfen sich unsere fleissigen Zusatztoolentwickler austoben, denn alles passiert ist folgendes:
- in die pref.xml wird die Zeile
Code:
<rater tool="/pfad/zu/tool"/>
eingetragen
- im Menü Verwalten gibt es den neuen punkt Rater (sofern die o.g. Zeile in der pref.xml steht
- an den Rater werden alle sichtbaren Wegpunkte, die keine Addis und nicht Custom sind übergeben
- der Rater muss einen Integer Exitcode erzeugen der der Bewertung entspricht (ok, das ist ein böser Verstoß gegen einige Programmierregeln)
- der Wert wird mit dem Wegpunkt gespeichert und in der Spalte OC Empfehlungen (Anwendung/Einstellungen/Liste) angezeigt (ich habe mir erlaubt die Spalte mal zu missbrauchen)

Das Ratingtool muss sich selber darum kümmern woher es seine Daten für den Wegpunkt bekommt. Jeder kann sich ein Tool für seinen Lieblingsbewerter (Geocaching Australien, GCVoter, keenpeople etc.) basteln.

Das Feature ist wie gesagt experimentell und ich erhoffe mir Feedback von den übrigen Entwicklern und den Anwendern. Wir werden das dann in Ruhe bewerten und entscheiden ob es drin bleibt - oder nicht.

Ach ja: getestet habe ich es bisher nur unter Linux mit der Java Version
 

pfeffer

Geowizard
Ich finde es gut, dass wir so ein Interface bekommen!

ich habe nur die commit-diffs gesehen:
Wenn ich das dabei richtig gesehen habe, dann schreibst Du den zurückgegebenen Wert in in CacheHolder.numRecommended - da steht die Anzahl Empfehlungen von Opencaching drin.
Ich denke, es wäre besser in CacheHolder.recommendationScore aufgehoben: da wird ein ein Index aus Anzahl Logs und den Empfehlungen bei Opencaching berechnet.

Gruß,
Pfeffer.
 

cache7

Geocacher
Hallo,

finde das eine prima Idee!
Damit kommen jetzt natürlich auch die Wünsche :D
Könnte man dieses Feld auch in den Filter mit einbauen? Dass es sich um einen Integer handelt wäre ja bekannt, damit bräuchte man "nur" einen Filter auf ">", "=", "<" ...

cache7
 

t31

Geowizard
Nette Sache, nur das mit dem Errorlevel ist mir noch nicht ganz klar, dieser kann doch nur 0 bis 255 sein. Könnte man nicht auch die Konsolenausgabe als Rückgabewert nehmen? Dann wäre das sogar über eine Batch unter Windows möglich z.B. GC-Vote abzufragen:
Code:
@echo off
wget -q http://dosensuche.de/GCVote/getVotes.php?waypoints=%1
for /F "tokens=7 delims='" %%b IN ('findstr "voteAvg" getVotes.php?waypoints*') do @echo %%b
echo j|del getVotes.php?waypoints*
 
OP
G

greiol

Geoguru
pfeffer schrieb:
Wenn ich das dabei richtig gesehen habe, dann schreibst Du den zurückgegebenen Wert in in CacheHolder.numRecommended - da steht die Anzahl Empfehlungen von Opencaching drin.
Ich denke, es wäre besser in CacheHolder.recommendationScore aufgehoben: da wird ein ein Index aus Anzahl Logs und den Empfehlungen bei Opencaching berechnet.
theoretisch könnten wir es auch ganz von der oc thematik entkoppel und eines der freien bytes im longfield nehmen, da wie t31 korrekt angemerkt hat spätestens unter unix ohnehin die zahl der möglichen rückgabewerte begrenzt ist (gem. test erhält cw dort im prinzip ein signed byte zurück).
 
OP
G

greiol

Geoguru
cache7 schrieb:
Damit kommen jetzt natürlich auch die Wünsche :D
:D
machen wir es in zwei schritten.
- wir klären ob und wie wir es aufnehmen
- wir klären anschließend was wir damit dann alles anstellen (filter wäre da natürlich konsequent)
 

t31

Geowizard
greiol schrieb:
aus technischen gründen: nein
Ok, ich habe erstmal eine Lösung gefunden welche dann Errorlevel 10 bis 50 zurückgibt, ob das auch wie gewünscht funktioniert werde ich morgen sehen, ... kann es kaum erwarten *freu*.
 

Wutschkow

Geomaster
Unter Windows könntest Du in der Batchdatei ein Script aufrufen, dass Dir den gewünschten Errorlevel liefert. Wenn Du das als letztes im Batch aufrufst, liefert die Batchdatei diesen Errorlevel zurück.
Ist im einfachsten Fall ein Einzeiler wie WScript.Quit(WScript.Arguments[1]) oder so (hab es jetzt nicht ausprobiert).
 

t31

Geowizard
@Wutschkow

geht auch ohne WScript per Batch:
Aufruf: gcvote.cmd GC77
Code:
@echo off
wget -q http://dosensuche.de/GCVote/getVotes.php?waypoints=%1
for /F "tokens=7 delims='" %%b IN ('findstr "voteAvg" getVotes.php?waypoints*') do set data=%%b
echo j|del getVotes.php?waypoints*
exit %data:~0,1%%data:~2,1%
Ergebnis wäre hier aktuell: 34 also 3.4
 

t31

Geowizard
hmm, ich bekomme es nicht zum laufen ...

<rater tool="D://N//gcvote.cmd"/>
<rater tool="D:/gcvote.cmd"/>
<rater tool="/gcvote.cmd"/>
<rater tool="gcvote.cmd"/>

eigenartigerweise wird bei mir auch exiftool.exe aufgerufen, ich nehme mal an das der Pfad durchgegangen wird dann wurde auch D:/Datfile/GC77 aufgerufen (unter D:/Datfile ist CW installiert)
 

t31

Geowizard
nee, klappt nicht - cw scheint die gcvote.cmd nicht zu finden :???: bei mir wir immer versucht die cmd.exe in allen zugänglichen Pfaden zu öffnen.
 

Wutschkow

Geomaster
t31 schrieb:
nee, klappt nicht - cw scheint die gcvote.cmd nicht zu finden :???: bei mir wir immer versucht die cmd.exe in allen zugänglichen Pfaden zu öffnen.
Aber wenn Du gcvote.cmd direkt aufrufst (z.B. per Doppelklick), dann läuft es? :???:
An sich gibt ja ComSpec vor, wo die cmd.exe zu finden ist.
 

t31

Geowizard
Die Batch funktioniert kann man mit Exit /b .... testen und anschließend mit Echo %Errorlevel% den Wert abfragen was sonst CW tun würde, nur der Aufruf klappt nicht, keine Ahnung warum das nicht geht. Wenn ich spaßeshalber Notepad.exe angeben wird der Editor aufgrufen, also grundsätzlich scheint es zu gehen nur nicht mit einer cmd- oder bat-Datei.

Da muß dann wohl doch jemand eine Exe zusammenschreiben. Die cmd zu compilieren geht nicht, zumindest kenne ich keinen bat-Compiler der die erweiterten Batchfunktionen von Windows unterstützt, die meisten scheitern schon an der for-Konstruktion.
 

Wutschkow

Geomaster
Also bei mir klappt das mit dem folgenden Eintrag problemlos:
Code:
    <rater tool="F:\Eclipse\Cachewolf\work\rater.cmd"/>
(Bei mir heißt es eben rater.cmd)
Ich habe es allerdings bislang nur aus Eclipse heraus getestet nicht mit der fertig kompilierten Cachewolf.exe. Möglicherweise ist da noch ein Unterschied?
 

t31

Geowizard
Wenn ich eine cmd oder bat nehme dann wird diese nicht ausgeführt und laut Filemon auch nicht von CW gefunden, ich habe dazu auch noch einen Pausebefehl eingefügt damit das Fenster offen bleibt, es schließt sich aber trotzdem sofort was darauf hindeutet das nur die cmd kurz geöffnet wird.

Dann habe ich zumindest einen Democompiler (bat2exe) gefunden der sogar vollständig funktioniert, ich kann den Wert per Echo ausgeben. Allerdings geht der Errorlevel verloren, die Exe wird erfolgreich ausgeführt und beendet, also Errorlevel 0, eigenartigerweise zeigt dann CW 1 an.

Die Variante "cmd.exe gcvote.cmd" geht nicht.

Naja da muß ich halt warten bis sich jemand der Sache annimmt, ich habe da leider keine Erfahrung mit der Programmierung, ich habe hier nur VB6 rumliegen und da wüsste ich jetzt auch nicht wie ich da schnell mal eben eine Konsolenprogramm mit xml-Abruf zusammen schreibe, ich bin eher auf der Anwender- und Simulationsseite zuhause.
 

t31

Geowizard
Jetzt habe ich mir tatsächlich VB.net Express installiert und mich versucht.

Code:
Imports System.Xml
Imports System.Net
Imports System.IO
Module Module1
    Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
    Sub Main()
        Dim E As String = ""
        Dim url As String = "http://dosensuche.de/GCVote/getVotes.php?waypoints=" + Command$()
        Dim reader As XmlReader = XmlReader.Create(url)
        With reader
            Do While .Read
                Select Case .NodeType
                    Case Xml.XmlNodeType.Element
                        If .AttributeCount > 0 Then
                            While .MoveToNextAttribute
                                If .Name = "voteAvg" Then E = .Value : Exit Do
                            End While
                        End If
                End Select
            Loop
            .Close()
        End With
        If E = "" Then E = "00"
        ExitProcess(Left(E.Replace(".", ""), 2))
    End Sub
End Module

Die daraus resultierende gcv.exe funktioniert in der Konsole wie gewüscht:

gcv.exe gc77
echo %errorlevel%

ergibt 33, wenn irgendwas schief läuft wäre 0 die Folge

Tja, aber im CW funktioniert nichts. :hilfe: die gcv.exe wird aufgerufen und Resultat ist bei jedem Cache 1.

Was mache ich falsch? Ich habe mal die compilierte gcv.exe gezippt angehangen.
 

Anhänge

  • gcv.zip
    6,4 KB · Aufrufe: 9
Oben