Marcel Miller: Wert auslesen, vergleichen und Adresse ausgeben.

Hallo Forumsgemeinde,

auf der Treffpage (http://www.treffpage.de) gibt es die möglichkeit Bilder zu kommentieren.

Bei der Realisierung bin ich einer Person ganz besonders dankbar. Diese Person heißt Philipp Hasenfratz. Warscheinlich sagt einigen von euch dieser Name etwas. Er hat nur indirekt mit meiner Frage zu tun, da er dieses Script inclusive Statistik für mich programmiert hat. Das musste einfach mal gesagt werden. Danke Philipp.

Jetzt würde ich gerne die Kommentarfunktion erweitern. Da die Treffpage mittlerweile ziemlich gut besucht ist, und auch die kommentarmöglichkeit häufig genutzt wird, sind in den letzten Monaten schon über 700 Kommentare zusammengekommen.

Bei so vielen Kommentaren (und Bildern) ist es nicht leicht immer den überblick zu behalten, wo jetzt die neusten Kommentare abgegeben wurden. Es wäre super für die übersicht, wenn irgendwo auf der seite dynamisch Links zu den letzten 10 Bildern, die kommentiert wurden, angezeigt würden.

Leider habe ich nur sehr beschränkte Kenntnise von Perl (dafür aber ein ganz dickes Buch gekauft...).
Mir ist auch klar, dass dieses Forum nicht dazu da ist, mir eine fertige Lösung hinzuknallen nach dem Motto nimm und friss (oder so).
Es wäre aber super nett von euch (und eventuell Philipp) wenn Ihr mir bei der lösung des Problems helfen würdet.

Die Kommentare werden direkt in das shtml-dokument eingefügt zu dem jeweiligen Bild eingefügt (also ohne datenbank). Dabei wird immer ein Kennzeichen in eine Datei namens pages.log geschrieben. In dieser Art:
e10;1054376786
d07;1054376833
a08;1054377253
q16;1054556639
q18;1054556695
Also immer ein einmaliges Kennzeichen (für ein Bild) und dann mit einem Strichpunkt abgetrennt die UNIX_TIMESTAMP.

In einer anderen datei (pages.txt) sind die links zu den shtml-Seiten mit den Bildern zu denen das einzigartige Kennzeichen gehört gespeichert.
In dieser Art:
a01=/fotos/c01/01.shtml
a02=/fotos/c01/02.shtml
a03=/fotos/c01/03.shtml
a04=/fotos/c01/04.shtml
a05=/fotos/c01/05.shtml
a06=/fotos/c01/06.shtml

Jetzt meine Idee: Kann man nicht mit einem Perlscript die letzten 10 eindeutigen Kennzeichen (also auch die die als letztes abgegeben wurden) auslesen und dann den dazugehörigen Link aus der Datei pages.txt in einem shtml-Dokument ausgeben? Dann hätte man die Links zu den 10 letzten Kommentaren die abgegeben wurden. Soweit zu meiner Idee. Wie man das Programmiert habe ich keinen Schimmer.

Wäre euch für eure Hilfe sehr dankbar.

mfg Marcel

  1. Hallo,

    warum antwortet mir keiner?
    Ist die Frage zu schwierig? Zu doof? Zu einfach?

    mfg Marcel

  2. Halihallo Marcel

    Bei der Realisierung bin ich einer Person ganz besonders dankbar. Diese Person heißt Philipp Hasenfratz. Warscheinlich sagt einigen von euch dieser Name etwas. Er hat nur indirekt mit meiner Frage zu tun, da er dieses Script inclusive Statistik für mich programmiert hat. Das musste einfach mal gesagt werden. Danke Philipp.

    Danke für die Blumen :-)

    Jetzt würde ich gerne die Kommentarfunktion erweitern. Da die Treffpage mittlerweile ziemlich gut besucht ist, und auch die kommentarmöglichkeit häufig genutzt wird, sind in den letzten Monaten schon über 700 Kommentare zusammengekommen.

    Ei, ei, ei, also wenn das so weitergeht, sollte ich vielleicht mal eine richtig
    gute Version davon programmieren, ich schäme mich nämlich etwas für das Script...
    Ich glaube, dass wäre ich mir selber schuldig...

    Bei so vielen Kommentaren (und Bildern) ist es nicht leicht immer den überblick zu behalten, wo jetzt die neusten Kommentare abgegeben wurden. Es wäre super für die übersicht, wenn irgendwo auf der seite dynamisch Links zu den letzten 10 Bildern, die kommentiert wurden, angezeigt würden.

    Also: die pages.log, wie du selbst sagst, enthält jeweils die "comment_id" des Kommentars
    und die Zeit als Unix Timestamp, wann er gepostet wurde...
    Du bräuchtest also ein Script, welches diese Datei pages.log einliest und verarbeitet.
    Genauer liesse sich die Verarbeitung wie folgt beschreiben:

    - Linie einlesen
     - In comment_id und timestamp splitten => perldoc -f split
     - Ein Hash verwalten, der jeweils zu einer comment_id die Zeit vom letzten Post
       speichert.

    if ($hash{$comment_id} < $current_timestamp) {$hash{$comment_id}=$current_timestamp}

    Mit diesem kleinen Trick wird nur der jeweils letzte Post zu
       einer "Kommentarmöglichkeit" gespeichert => es könnte ja sein, dass die letzten
       Kommentare alle zum selben Kommentarfeld gemacht wurden und dann soll ja nicht
       10x die selbe Seite ausgegeben werden...

    - dann lässt du dir die values des hashes sortieren
       perldoc -f values
       perldoc -f sort

    - Tja, dann nimmst du die ersten 10 Werte aus dem sortierten Array mit den letzten
       10 Zeiten der Posts und suchst die entsprechende Comment im Hash.

    - Ist zwar eine üble Umsetzung, aber iteriere einfach über den Hash mit
         "perldoc -f each" und überprüfe, ob die Zeit im Hash mit der Zeit aus dem aktuellen
         Array-Element übereinstimmt. Wenn ja => Link ausgeben, denn dann haben wir ein
         Top-10 Kommentar gefunden.

    - Dann der _entsprechende_ Link aus pages.txt auslesen und Link ausgeben.

    Na? - Hoffe, dass dir das etwas hilft.

    Viele Grüsse

    Philipp

    --
    RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
    Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
    1. Hallihallo Philipp,

      Danke für die Blumen :-)

      Gerne geschehen.

      Ei, ei, ei, also wenn das so weitergeht, sollte ich vielleicht mal eine richtig
      gute Version davon programmieren, ich schäme mich nämlich etwas für das Script...
      Ich glaube, dass wäre ich mir selber schuldig...

      Das wäre doch schön. Ich würde dann gerne Werbung dafür machen. Wobei ich nicht weiß was du noch alles verbessern möchtest.
      Eine Möglichkeit wäre doch z.B. die Kommentare in einer Datenbank zu speichern.

      Na? - Hoffe, dass dir das etwas hilft.

      Ja und nein.
      Wenn du dachtest ich kann mir jetzt einfach daraus ein Perlscript basteln muss ich mit einem definitiven Nein antworten.
      Aber ja, ich habe glaube ich deine Idee soweit verstanden.
      Wir erstellen on the fly eine Liste in der jeweils die Zeit des letzten Kommentars zu jeder comment_id gespeichert wird. Dann sortieren wir die Liste nach der unix timestamp aufsteigend und nehmen die 10 comments_id's die ganz oben in der Liste stehen. Zu diesen 10 comments_id's suchen wir dann den jeweiligen Link aus der pages.txt und geben ihn aus.
      Und das hat dann den Vorteil, dass wir ausschließen können, dass mehrere linkszu derselben comment_id führen, wenn auf diese mehrere der letzen 10 Kommentare
      abgegeben wurden.
      Habe ich das so richtig verstanden?

      Ist das viel arbeit das zu programmieren?

      Kannst du/ihr es vileicht noch etwas genauer den Quellcode aufschreiben, da ich von einem Perlscript nur weiß, das es mit *.pl endet.

      mfg Marcel

      1. Halihallo Marcel

        Ei, ei, ei, also wenn das so weitergeht, sollte ich vielleicht mal eine richtig
        gute Version davon programmieren, ich schäme mich nämlich etwas für das Script...
        Ich glaube, dass wäre ich mir selber schuldig...
        Das wäre doch schön. Ich würde dann gerne Werbung dafür machen. Wobei ich nicht weiß was du noch alles verbessern möchtest.
        Eine Möglichkeit wäre doch z.B. die Kommentare in einer Datenbank zu speichern.

        Stimmt. Nur werden solche Scripts meistens von Personen verwendet, die nicht umgedingt
        mit Datenbanken zu tun haben (wollen). Das Flat-file-Prinzip (Textdateien) ist schon
        OK, nur ist das Backend im Moment, naja, etwas sehr einfach und unelegant. Z.B. werden
        die Kommentare wenn ich mich recht erinnere in der HTML-Datei selber gespeichert. Ich
        mag mich an den Einwand von Michael Schroepl erinnern, dass dies falsch sei, womit ich
        ihm 100% recht gebe. Die Kommentare sollten wenn, dann über ein Script ausgegeben werden
        (per SSI in den HTML-Quelltext eingebettet werden), welches die Daten aber über die
        Flatfiles (Textdateien) einliest. Na, mal sehen, wenn ich etwas weniger Arbeit habe,
        kann ich das ja mal kurz verbessern... Ich glaube aber, dass es solches Zeug schon wie
        Sand am Meer gibt, aber mal sehen...

        Na? - Hoffe, dass dir das etwas hilft.
        Ja und nein.
        Wenn du dachtest ich kann mir jetzt einfach daraus ein Perlscript basteln muss ich mit einem definitiven Nein antworten.

        Ist mir schon klar, dass dies für dich nicht einfach umzusetzen ist. Das ist am Anfang
        immer so, aber versuche es doch; du wirst dich evtl. sogar wundern, wie einfach und
        logisch das umsetzbar ist..

        Wir erstellen on the fly eine Liste in der jeweils die Zeit des letzten Kommentars zu jeder comment_id gespeichert wird. Dann sortieren wir die Liste nach der unix timestamp aufsteigend und nehmen die 10 comments_id's die ganz oben in der Liste stehen. Zu diesen 10 comments_id's suchen wir dann den jeweiligen Link aus der pages.txt und geben ihn aus.
        Und das hat dann den Vorteil, dass wir ausschließen können, dass mehrere linkszu derselben comment_id führen, wenn auf diese mehrere der letzen 10 Kommentare
        abgegeben wurden.
        Habe ich das so richtig verstanden?

        Ja, genau.

        Ist das viel arbeit das zu programmieren?

        schätze um die 20-30 Linien. Wie lange man daran zu arbeiten hat hängt natürlich von
        vielen Faktoren ab.

        Kannst du/ihr es vileicht noch etwas genauer den Quellcode aufschreiben, da ich von einem Perlscript nur weiß, das es mit *.pl endet.

        Du weisst, dass es hier im Forum keine Komplettlösungen gibt? Hier wird einem nur ge-
        holfen auf den richtigen Weg zu kommen.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Hallihallo Philipp,

          Ist mir schon klar, dass dies für dich nicht einfach umzusetzen ist. Das ist am Anfang
          immer so, aber versuche es doch; du wirst dich evtl. sogar wundern, wie einfach und
          logisch das umsetzbar ist..

          Ja, du hast recht. Würde mich auch sehr reizen so etwas sellbst zu programmieren.
          Also werde ich mich ab heute abend auf Perl stürzen.

          Wir erstellen on the fly eine Liste in der jeweils die Zeit des letzten Kommentars zu jeder comment_id gespeichert wird. Dann sortieren wir die Liste nach der unix timestamp aufsteigend und nehmen die 10 comments_id's die ganz oben in der Liste stehen. Zu diesen 10 comments_id's suchen wir dann den jeweiligen Link aus der pages.txt und geben ihn aus.
          Und das hat dann den Vorteil, dass wir ausschließen können, dass mehrere linkszu derselben comment_id führen, wenn auf diese mehrere der letzen 10 Kommentare
          abgegeben wurden.
          Habe ich das so richtig verstanden?

          Ja, genau.

          Fängt doch gut an, verstehen ist doch des programmierens Anfang. Oder?

          Ist das viel arbeit das zu programmieren?
          schätze um die 20-30 Linien. Wie lange man daran zu arbeiten hat hängt natürlich von
          vielen Faktoren ab.

          Was nur 20 Zeilen? Na das ist ja wenig. Ich fürchte nur, dass die viele Faktoren das sehr in die Länge ziehen werden.

          Du weisst, dass es hier im Forum keine Komplettlösungen gibt? Hier wird einem nur ge-
          holfen auf den richtigen Weg zu kommen.

          Verstehe ich. Mit dieser dieser Antwort habe ich bereits gerechnet.
          Dann werde ich mich jetzt mal an die programmiertechnische Lösung des Problems machen, die Idee wurde mir ja bereits serviert.

          Danke.

          mit freundlichen Grüßen
          Marcel Miller