automatisch Wetter-Info posten

  • Guten Morgen,

    ich hoffe, ich bin mit meinem Problem hier im richtigen Bereich.

    Ich betreibe eine Wetterstation, deren Wetterdaten in meinem Blog (wuppertal-wetter.de) abrufbar sind.
    Seit geraumer Zeit, habe ich über einen Cronjob eingerichtet, daß die aktuellen Daten morgens täglich automatisch im Blog gepostet werden.

    An und für sich funktioniert das auch, bis auf ganz wenige Ausnahmen.
    Dann wird die Post-ID "0" ausgegeben, aber keine Fehlermeldung
    und es wird auch kein Beitrag generiert.

    Auch die (maximal 5) weiteren Versuche nach einer Wartezeit bringen das gleiche Ergebnis.

    Hat jemand eine Vermutung woran es liegen könnte oder eine Idee wie ich das Problem lösen kann?

    Nach der Erzeugung des Arrays für den Beitrag folgt dann dieser Code:

    $try=0;
    do {
    $try = $try + 1;
    $post_id = wp_insert_post ($args, $wp_error);
    echo '<hr/>';
    if( is_wp_error( $post_id ) ) { echo '[Err: '.get_error_message().']'; }
    echo '[ID: '.$post_id.']['.$try.'. Versuch]<br/><hr>';
    sleep (5);
    if ($try >= 5) break;
    } while ($post_id<=0);

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Hallo


    // Ich betreibe eine Wetterstation

    cool ... ich auch... in Hagen ;)

    Code
    $try=0;
    do {
    $try = $try + 1;
    $post_id = wp_insert_post ($args, $wp_error);
    echo '<hr/>';
    if( is_wp_error( $post_id ) ) { echo '[Err: '.get_error_message().']'; }
    echo '[ID: '.$post_id.']['.$try.'. Versuch]<br/><hr>';
    sleep (5);
    if ($try >= 5) break;
    } while ($post_id<=0);

    Durch einen echo Befehl - wirst du nie erfahren, was in get_error_message steht.

    Mach doch einfach eine error_log Datei auf und schreib deine Fehlermeldung da rein

    https://www.php.net/manual/de/function.error-log.php

    Code
    error_log("Du hast Mist gebaut!", 3, "/var/tmp/meine-fehler.log");

    /var/tmp/meine-fehler.log ersetzt du einen pfad zu einer beschreibbaren datei.

    "Du hast Mist gebaut!" ersetzt du durch deine Fehlermeldung:

    Code
    $sErr = '[' . date('D M j G:i:s Y') . ']'
               .' [error]';
    Code
    $sErr .= '[Err: '.get_error_message().']'
    . ' [ID: '.$post_id.']['.$try.'. Versuch]' . "\n";
    
    
    @error_log($sErr, 3, '/var/tmp/meine-fehler.log');

    Evtl. ist der Fehler auch vorher - dafür könnte man auch den Debug Mods von WordPress einschalten und dort die Log einschalten

    Mit offenen Augen träumen

  • Für jemanden der programmiert sollte es selbstverständlich sein erstens lesbaren Code zu liefern und zweitens alle notwendigen Informationen anzugeben.

    1. Inhalt von $args fehlt
    2. Zustand von $wp_error fehlt
    3. Warum 5 Versuche?
    4. Wie wird der Code ausgeführt?

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Ich komme heute erst dazu, eure Antworten zu lesen.

    @r23:
    Das werde ich gleich mal umsetzen undausprobieren.

    @mensmaximus:

    1. $args=array(
      'post_title' => $titel,
      'post_status' => 'Publish',
      'post_author' => 20,
      'post_type' => 'post',
      'post_content' => $inhalt,
      'comment_status' => 'open',
      'ping_status' => 'open',
      'post_category' => array( 133 ),
      'tags_input' => array( 'Wuppertal-Wetter', 'aktuelle Wetterdaten', 'Temperatur', 'Luftdruck', 'Wind', 'Sonne', 'Regen', 'Vorhersage', 'Unwetterwarnungen', 'Niederschlagsradar', 'Blitze', 'Gewitter', 'UV-Index', 'Webcam', 'Wetterstation Aprather Weg', 'Bauernregel', 't&auml;gliche Wetterinfos' )
      );

      In 99,9% der Fälle läuft's ja auch einwandfrei.

    2. Genau da setzt r23's Info an, die ich gleich ausprobiere, ich bekam ja nichts zurück.
    3. Um zu schauen, ob es wenig später funktioniert (habe ich nur zum Testen eingebaut,diese Schleife.
    4. Über eine PHP in einem Cronjob.


    Bitte meinen Beitrag oben nochmal lesen, da steht alles drin, außer den Args.


  • 'post_title' => $titel
    'tags_input' => array( 't&auml;gliche Wetterinfos' )


    Die Codierung Deiner Anwendung scheint nicht UTF8 zu sein. Das kann zu Problemen führen, falls $titel Sonderzeichen enthält


    Genau da setzt r23's Info an,


    Ich habe nach dem Zustand von $wp_error gefragt nicht nach dem Inhalt. Es kann keine Fehlerausgabe erfolgen wenn $wp_error nicht TRUE ist. Ich weiß nicht was @r23 da bastelt. WordPress hat eine eingebaute Fehlerbehandlung, die funktioniert aber nur, wenn man sie aktiviert


    Über eine PHP in einem Cronjob.
    Bitte meinen Beitrag oben nochmal lesen, da steht alles drin, außer den Args.


    Ich lese immer die Fragen, sonst macht antworten ja keinen Sinn. In deinem Beitrag fanden sich keine Antworten auf meine Fragen. Die Erwähnung des Cronjobs sagt nicht ob es sich um einen Cronjob in WordPress oder in Linux handelt, ob eine Methode in einem Plugin ausführt wird oder eine Funktion, die fliegend in die functions.php eingebaut ist.

    Ich bin raus.

    WordPress ist "frei" wie in Freiheit es zu nutzen, aber nicht im Sinne von Freibier. Wer also glaubt man bekommt rund um WordPress alles kostenlos, der irrt. Hilfe ist ein Geschenk für das man sich bedankt, dafür gibt es den 'Gefällt mir' Button. Wer das nicht kann und sich selbst nicht zu helfen weiss, muss sich bezahlte Unterstützung suchen.

  • Code
    $sErr = '[' . date('D M j G:i:s Y') . ']'
               .' [error]';
    Code
    $sErr .= '[Err: '.get_error_message().']'
    . ' [ID: '.$post_id.']['.$try.'. Versuch]' . "\n";
    
    
    @error_log($sErr, 3, '/var/tmp/meine-fehler.log');

    Evtl. ist der Fehler auch vorher - dafür könnte man auch den Debug Mods von WordPress einschalten und dort die Log einschalten


    In dieser Zeile >> "$sErr .= '[Err: '.get_error_message().']' <<< bricht das Script ab.
    Der Debug-Log zeigt auch nichts.

    Dann bleibt's halt so ... der Feher mit dem nicht posten tritt ja nur recht selten auf.

  • In dieser Zeile >> "$sErr .= '[Err: '.get_error_message().']' <<< bricht das Script ab.


    Ja, denn der Aufruf ist von Anfang an falsch: get_error_message() ist eine Methode von WP_Error.

    Empfehlung für jegliche Art von Programmierung: Dokumentation lesen, Codebeispiele nachvollziehen, jeder Unklarheit bzw. Fehlern direkt auf den Grund gehen, erst dann weitermachen.

    Keine Empfehlung: Copy & Paste von unverstandenem fragwürdigem Code oder Konstrukte wie etwas 5 x versuchen, was 1 x schon nicht geht.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!