Benötige Hilfe / stoß in die richtige Richtung



  • Hallo,

    erstmal hoffe ich, dass ich in diesem Unterforum richtig bin 🙂

    Mein Anliegen:

    Ich brauche Hilfe bei einem Project.
    Ich habe Grundkentisse im Programmieren, allerdings nicht soviel, dass ich hier irgentwie alleine zurecht komme.

    Was ich vorhabe/möchte:

    Daten, welche ich von hier "lesen" kann, temporär Speichern, und Auswerten.

    Der Link, welcher die Daten "liest", sieht dann so aus:
    http://api.bfbcs.com/api/pc?players=cottton&fields=weapons,online *(manchmal "overload", link stimmt aber)
    *
    Diese Daten beinhalten:
    - Spielernamen
    - Waffennamen + Kills, Headshots, ect
    - weiteres für mich nicht relevantes

    Wenn ich jetzt wüsste, wie man das Ganze programmiert, würde es in etwa so aussehen:

    - lese spielernamen** aus extra liste mit meheren tausend namen \- setze **spielernamen in link ein > http://api.bfbcs.com/api/pc?players=$spielernamen&fields=weapons,online
    - speichere daten in Datei "Temp"
    - erstelle Datei "Result"
    - suche in Datei "Temp" nach:

    "AEK-971 Vintovka","kills":22,"shots_fired":1750,"shots_hit":316,"seconds":1913.501,"headshots":4,
    und WENN "kills" > 99 DANN berechne "headshots" / "kills" * 100 = $kHSratio
    - WENN $kHSratio > 50 dann $gefunden = +1, und $AEK = "Waffenname(AEK ...), "kills", "headshots", $kHSratio"
    - SONST weiter nächste Waffe

    - suche in Datei "Temp" weiter nach nächster Waffe
    "XM8 Prototype","kills":616,"shots_fired":37148,"shots_hit":6538,"seconds":31161.297,"headshots":130,
    und WENN "kills" > 99 DANN berechne "headshots" / "kills" * 100 = $kHSratio
    - WENN $kHSratio > 50 dann $gefunden = +1, und $Xm8pro = "Waffenname(XM8 ...), "kills", "headshots", $kHSratio"
    - SONST weiter nächste Waffe

    und so weiter, bis alle Waffen durch sind. Dann:

    - Wenn $gefunden > 3 dann schreibe in Datei "Result": $spielernamen, $AEK, $XM8pro, ... usw
    - SONST weiter
    - lösche(?) Datei "Temp"
    - Absatz in Datei "Result"

    - alles auf Anfang (Schleife), allerdings mit nächste "$spielernamen aus extra liste mit meheren tausend namen", bis alles Namen durch sind.

    Ergebnis stelle ich mir so vor (zahlen jetzt fiktiv):

    Datei "Result":
    cottton, AEK-971 Vintovka, Kills: 100, Headshots: 50, Kill/Headshot-ratio: 50, XM8 Prototype, Kills: 1000, Headshots: 500, Kill/Headshot-ratio: 50, Stg.77 AUG, Kills: 1000, ...
    nocheinspieler, AEK-971 Vintovka, Kills: 100, Headshots: 50, Kill/Headshot-ratio: 50, ...

    Ich hoffe es ist nicht zu verwirrend.
    Ich denke mal für Kenner kann das kein Problem sein, allerdings weiss ich nicht mal mit welcher Programmiersprache ich an dieses Thema rangehen sollte.
    Bin für jede Hilfe sehr dankbar, und falls sich jemand sogar noch finden sollte, der mir das Ganze schreibt, oder mir dabei hilft (Schritt für Schritt),
    dem knutsch ich den Arsch 😉



  • Kannst du denn schon halbwegs oder wenigstens ein bisschen programmieren, in irgendeiner Sprache?

    Ansonsten haben wir das Projekte-Forum, in dem du ein Angebot machen kannst. Vielleicht findet sich da jemand, der das für ein Taschengeld macht.



  • cottton schrieb:

    Ich hoffe es ist nicht zu verwirrend.

    Es ist etwas wirr, und es fehlen ein paar Details, aber ich hab schon schlimmeres gelesen.

    Ich denke mal für Kenner kann das kein Problem sein

    Jo, das ist keine wilde Sache.

    allerdings weiss ich nicht mal mit welcher Programmiersprache ich an dieses Thema rangehen sollte.

    Ich würde dir PHP ans Herz legen.
    Java oder C# sind sicher auch OK, wenn man sich damit schon ein wenig auskennt, und weiss wie man nen HTTP GET Request macht und wie man JSON geparsed bekommt.



  • Ich gehöre zu cottton und wollte mal fragen wer denn die lust hat uns zu helfen.

    Ich für meinen teil bin ein noob in programmieren und wäre über jede hilfe dankbar.

    Das mit dem Taschengeld wäre ja wohl selbstredend 😃

    Habt ihr vllt irgendwelche namen an die man sich dann so wenden kann ???

    M.f.G. C2K



  • hustbaer schrieb:

    Ich würde dir PHP ans Herz legen.
    Java oder C# sind sicher auch OK, wenn man sich damit schon ein wenig auskennt, und weiss wie man nen HTTP GET Request macht und wie man JSON geparsed bekommt.

    Ich würde hier sogar eher Perl nehmen ("Regular Expression mit Programmierkonstrukten drumherum").
    Da vor allem viel in Richtung String parsing gemacht werden muss, sollte das damit recht flott lösbar sein, solange genügend Grundinteresse vorhanden ist.



  • Ich schätze das mit den "genug grundkenntnisse" trifft auf mich nicht zu 😃



  • Also ich denke ich könnte das Ganze als "Entwurf" niederschreiben, allerdings muss es wohl jemand programmieren.
    Ansonsten muss jemand Schritt für Schritt erklären, was ich machen soll 😉

    Also falls jemand weiss, was wir brauchen, und es uns programmiert, dann vergüten wir das natürlich 🙂

    Ich würde mir wünschen, dass das tool am Ende nicht auf nem server liegt, sondern auf jedem beliebigen PC laufen kann.
    Ist aber kein muss.

    Also, das ist jetzt ne ernste Anfrage 🙂
    Wer kann?
    Wer "ist gewillt"? 😉



  • Fedaykin schrieb:

    hustbaer schrieb:

    Ich würde dir PHP ans Herz legen.
    Java oder C# sind sicher auch OK, wenn man sich damit schon ein wenig auskennt, und weiss wie man nen HTTP GET Request macht und wie man JSON geparsed bekommt.

    Ich würde hier sogar eher Perl nehmen ("Regular Expression mit Programmierkonstrukten drumherum").
    Da vor allem viel in Richtung String parsing gemacht werden muss, sollte das damit recht flott lösbar sein, solange genügend Grundinteresse vorhanden ist.

    Also ich mag Perl nicht, aber das ist ne persönliche Abneigung.
    Ich verstehe aber nicht warum du meinst hier müsste viel mit String-Parsing gemacht werden? Hier muss IMO so-gut-wie nix mit String-Parsing gemacht werden.
    Vorausgesetzt dass ne fertige HTTP und JSON Implementierung verwendet wird -- sowas wird man sich für diese Mini-Aufgabe kaum selbst stricken.



  • cottton schrieb:

    Also, das ist jetzt ne ernste Anfrage 🙂
    Wer kann?
    Wer "ist gewillt"? 😉

    Ich kann. Ob ich will kommt auf die $$$ drauf an 😃



  • Ich kannte JSON bisher noch nicht, nun bin ich etwas schlauer und gebe dir recht. String Parsing ist nocht notwendig wenn man JSON benutzt. Dann ist die Aufgabe noch einfacher als anfangs gedacht.



  • Fedaykin schrieb:

    Ich kannte JSON bisher noch nicht, nun bin ich etwas schlauer und gebe dir recht. String Parsing ist nocht notwendig wenn man JSON benutzt. Dann ist die Aufgabe noch einfacher als anfangs gedacht.

    Klingt sehr gut in meinen ...ehm augen? 😉



  • hustbaer schrieb:

    cottton schrieb:

    Also, das ist jetzt ne ernste Anfrage 🙂
    Wer kann?
    Wer "ist gewillt"? 😉

    Ich kann. Ob ich will kommt auf die $$$ drauf an 😃

    Ich weiss nicht, ob wir das im Forum, oder im TS oder per PM klären sollten.
    Sag bescheid - würde mich freuen.

    Ich hoffe allerdings, dass es im Rahmen bleibt 😉
    Ein neues Auto wollen wir Dir ja nicht finanzieren 😉

    Habe übrigen auch gestern nochmal in PHP rumgelesen, allerdings darf diese kleine Tool keine Rechenfehler, oder überhaupt keine Fehler enthalten.
    Daher macht es wohl keinen Sinn, wenn ich es selbst versuche und am Ende nur Mist rauskommt 😉



  • Schreibe mir deine $$$ vorstellungen mal per mail

    big_boz_z@hotmail.de



  • @cottton
    Ich bräuchte auf jeden Fall nochmal etwas genauere Angaben.
    Wie der Input aussieht kann ich mir ja selbst angucken, das ist kein Thema.
    Könntest du einfach nochmal genauer beschreiben wie der Output aussehen soll?
    Also was soll ausgegeben werden, und genau in welchem Format.
    Möglichst ohne "pseude-code-speak". Wie man es macht weiss ich (bzw. wer auch immer es dann umsetzt) schon selbst. Was gemacht werden soll ist wichtig.

    z.B. konkret: willst du das Output-File danach irgendwie weiterbearbeiten können? Wenn ja, in welchem Programm, bzw. welchem Format soll es entsprechen?

    cottton, AEK-971 Vintovka, Kills: 100, Headshots: 50, Kill/Headshot-ratio: 50, XM8 Prototype, Kills: 1000, Headshots: 500, Kill/Headshot-ratio: 50, Stg.77 AUG, Kills: 1000, ...
    nocheinspieler, AEK-971 Vintovka, Kills: 100, Headshots: 50, Kill/Headshot-ratio: 50, ...

    Ich frage, weil das Format in diesem Beispiel einerseits zum "einfach so lesen" nicht wirklich übersichtlich genug formatiert ist, andrerseits zum Laden als z.B. CSV-Datei auch nicht wirklich geeignet.

    Für CSV bräuchte man vermutlich noch Spalten-Überschriften, und man müsste alle Strings (Spielernamen/Waffennamen) entsprechend formatieren - diese könnten ja das Trennzeichen (",") enthalten. Das muss dann escaped bzw. durch ein anderes Zeichen ersetzt werden.

    Und zum "einfach so lesen" wäre vermutlich ein HTML File mit nem hübschen Table besser.

    Eine andere Sache die unklar ist: angenommen es gibt zwei Spieler und drei Waffen: Spieler "Franz" und "133t-susi", Waffen "Keule", "Gewehr" und "Stein".
    "Franz" hat nen "nennenswerten" Eintrag bei "Keule"
    "133t-susi" hat nen "nennenswerten" Eintrag bei "Gewehr"

    Wie soll der Output dann aussehen?
    a) Für "Franz" wird nur "Keule" gelistet, für "133t-susi" nur "Gewehr"
    b) Für beide Spieler werden sowohl "Keule" als auch "Gewehr" gelistet
    c) Für beide Spieler werden alle drei Waffen gelistet, obwohl keiner von beiden einen "nennenswerten" Eintrag bei "Stein" hat.

    Je nachdem was du damit machen willst, kann a, b oder c die "richtige" Wahl sein.

    Noch was anderes: du schreibst es muss "richtig" gerechnet werden. Da wir hier Brüche haben können schnell unendlich periodische Zahlen entstehen. Was ist also "richtig"? Auf wieviele Stellen genau soll es ausgegeben werden? Wie soll die Ausgabe gerundet werden?

    ps: ist "temporär speichern" wirklich eine Anforderung? Ich sehe nämlich keinen Grund, warum hier irgendwas temporär gespeichert werden müsste. Kann man alles auch einfach im RAM halten. Interessant ist nur, dass es erlaubt ist Temp-Files zu verwenden. (Wobei ich davon im Normalfall ausgehe, also dass es erlaubt ist)

    ps2: müssen wirklich lauter einzelne Requests für die Player geschickt werden? Die API erlaubt anscheinend mehrere Player auf einmal abzufragen. D.h. man sollte das vermutlich auch nutzen, der Server wird es einem danken (100 Player auf einman abfragen ist für den Server ziemlich sicher weniger Aufwand als 100x einen einzigen Player abfragen).



  • cottton arbeitet an einer antwort und ich warte noch auf ne mail 😃



  • Ha, nice!

    Also zu 1. - Output-File

    .txt wäre ausreichend. Das Ergebnis wird erstmal nur zum posten/hochladen benutzt. Ob es später noch auf einer website angezeigt werden soll, ist unklar.
    Also txt oder csv.
    (wichtig eben nur "eine Zeile pro Spielername")

    Wie soll der Output dann aussehen?

    a) Für "Franz" wird nur "Keule" gelistet, für "133t-susi" nur "Gewehr"

    Was "erkannt" wird, muss gelistet werden.

    Auf wieviele Stellen genau soll es ausgegeben werden?

    max 2 Stellen nach dem Komma.

    ps: ist "temporär speichern" wirklich eine Anforderung?

    Nein 🙂

    ps2: müssen wirklich lauter einzelne Requests für die Player geschickt werden?

    Wenn es möglich ist, alle Spieler dann noch fehlerfrei auseinanderzuhalten 🙂
    Ich weiss ja nicht, wie es vom prog gelesen werden kann.

    Ich hatte mir in der Zwischenzeit schon mal Gedanken gemacht.
    Allerdings in meinem pseude-code-speak 😉

    Und vor weg - wir haben etwas vergessen: Wir brauchen am ende noch eine Ausgabe/Datei.
    Allerdings zu viel text, würde ich dir lieber erklären via TS.

    hier meine "gedanken" 😉

    Create file "Temp.txt"
    Create file "Result.txt"
    Create file "gotNoData.txt"
    Create file "NamePlusGUID.dat"
    Load first $playername from file "playernames.txt" //includes 1 player a line. File "playernames.txt" will be created by us self.
    // it will look like this:
    //
    // "=-|-=GaLoS=-|-="
    // // "|R4GE|";"332119"
    // "|EVlL|";"398015"
    // "Docteur Vaseline"
    // "Hoodlum420"
    // "NekoKnight"
    // "IIIIllIIIll"
    // "BeezWax2"

    Insert playernameintourlandloadDatafromAPI//http://api.bfbcs.com/api/pc?players=playername into url and load Data from API //http://api.bfbcs.com/api/pc?players=playername&fields=weapons

    //need something that will show us if this API is overloaded - happen sometimes!
    If API is not responding for 20 sec write $playername into file "gotNoData.txt" and go to next $playername //go to beginning

    Save Data from API into "Temp.txt"
    If $playername is NOT the same name in the "Temp.txt" then add to $playername "--errorTemp" and write $playername into "gotNoData.txt" //just to check

    //Now searching and calculating weapons (not all! no sniper rilfes ect)

    // weapon #1

    Search in "Temp.txt" for "AEK-971 Vintovka" and associated "kills", "headshots", "seconds"

    // "AEK-971 Vintovka" = $AEK
    // "kills" = $kills
    // "headshots" = $headshots
    // "seconds" = $seconds

    If $kills > 99 then $killsperminute = $kills / $seconds * 60
    If $kills > 99 then $kHSratio = $headshots / $kills * 100
    If $kHSratio > 50 then $found +1 AND weapon1="weapon1 = "AEK, $kills, $headshots, $kHSratio, $killsperminute"

    // weapon #2

    Search in "Temp.txt" for "XM8 Prototype" and associated "kills", "headshots", "seconds"

    // "XM8 Prototype" = $XM8pro
    // "kills" = $kills
    // "headshots" = $headshots
    // "seconds" = $seconds

    If $kills > 99 then $killsperminute = $kills / $seconds * 60
    If $kills > 99 then $kHSratio = $headshots / $kills * 100
    If $kHSratio > 50 then $found +1 AND weapon2="weapon2 = "XM8pro, $kills, $headshots, $kHSratio, $killsperminute"

    // weapon #2

    Search in "Temp.txt" for "F2000 Assault" and associated "kills", "headshots", "seconds"

    // "F2000 Assault" = $f2000
    // "kills" = $kills
    // "headshots" = $headshots
    // "seconds" = $seconds

    If $kills > 99 then $killsperminute = $kills / $seconds * 60
    If $kills > 99 then $kHSratio = $headshots / $kills * 100
    If $kHSratio > 50 then $found +1 AND weapon3="weapon3 = "f2000, $kills, $headshots, $kHSratio, $killsperminute"

    // ... and so on untill every weapon is calculated
    // weapons are: AEK-971 Vintovka, XM8 Prototype, F2000 Assault, Stg.77 AUG, AN-94 Abakan, M416, M16A2, 9A-91 Avtomat, SCAR-L Carbine, XM8 Compact, AKS-74U Krinkov, UZI, PP-2000 Avtomat, UMP-45, PKM LMG, M249 Saw, Type 88 LMG, M60 LMG, XM8 LMG, MG36, MG3, WWII M1A1 Thompson, G3, M16A2 - SPECACT, MG3 - SPECACT, UMP - SPECACT, M16A1 Vietnam, AK47 Vietnam, MAC10 Vietnam, PPSh Vietnam, UZI Vietnam, M60 Vietnam, RPK Vietnam, XM22 Vietnam

    //now checking if more then 3 weapons are $found, and if so - write player and detected weapons into "Result.txt"

    if found>3thenwriteinto"Result.txt""found > 3 then write into "Result.txt" "playername, $weapon1, $weapon2, $weapon3, $weapon4, ..." // 1 player per line

    //here we need to get an ID (GUID) to the playername. API - http://ggc-stream.com/interface/api/documentation
    write $playername plus GUID into "NamePlusGUID.dat"

    //clearing strings
    found=0found = 0 kills = 0
    ect ect

    //now clear "Temp.txt" and go to beginning - startig next $playername from file "playernames.txt"



  • Noch ein paar Kleinigkeiten die mir so einfallen...

    Auf welcher Plattform muss das Ding lauffähig sein? Windows-only OK? Linux-only OK?
    C# (=.NET Framework muss installiert sein) OK?
    Java (=Java muss installiert sein) OK?

    Alle (relativen) Pfade/Filenamen fix ins Programm reincompiliert OK (also Name der playernames.txt + die ganzen Output-Files)?
    Muss es "scriptbar" sein (d.h. ohne User-Input laufen)?
    Oder muss es ne GUI geben (und wenn, wozu, bzw. was muss man da machen können)?
    Fehlerlog nötig (abgesehen von der gotNoData.txt Datei)?
    Programmierer-lesbare Fehlermeldungen OK, oder DAU-lesbare Fehlermeldungen nötig?



  • Auf welcher Plattform muss das Ding lauffähig sein? Windows-only OK? Linux-only OK?

    Windows only

    C# (=.NET Framework muss installiert sein) OK? - ja
    Java (=Java muss installiert sein) OK? **- ja
    **

    Alle (relativen) Pfade/Filenamen fix ins Programm reincompiliert OK (also Name der playernames.txt + die ganzen Output-Files)?

    Ja, können wir so lassen, wie sie momentan benannt wurden.

    Muss es "scriptbar" sein (d.h. ohne User-Input laufen)?
    Oder muss es ne GUI geben (und wenn, wozu, bzw. was muss man da machen können)?

    waere gut, wenn es nicht so viel aufwand macht. Aber wir koennen im programm selbst ja auch später nocht die "zahlen" aendern, oder?
    Ansosnten melden wir uns bei dir 🙂

    Fehlerlog nötig (abgesehen von der gotNoData.txt Datei)?
    Programmierer-lesbare Fehlermeldungen OK, oder DAU-lesbare Fehlermeldungen nötig?

    dau meldungen bitte 🙂

    ach ja, ud cypher wartet noch auf eMail soll ich sagen 😉



  • Noch was vergessen:

    wir brauchen noch eine Kontrolle.

    If "shots_fired" = 0 AND IF "shots_hit" = 0 THEN write name into "gotNoData.txt"
    (Also diesen spieler dann nicht verwenden)

    Evtl sollten wir die Datei "gotNoData.txt" in "Error.txt" umbenennen, oder etwas ähnliches, wenn Dir was einfällt.



  • Hab' ne Mail an Cypher2k2010 geschrieben, über's Forum.


Anmelden zum Antworten