[PHP5] Atom Feed: updated must be an RFC-3339 date-time

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [PHP5] Atom Feed: updated must be an RFC-3339 date-time

    Hi,

    ich habe mit PHP und MySQL einen Atom-Feed wie folgt erstellt:
    PHP-Code:

    <?php
    include('db_login.php');
    header("Content-type: application/atom+xml");
    echo 
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
    echo 
    "<feed xmlns=\"http://www.w3.org/2005/Atom\" xml:lang=\"de-DE\">\n";
    ?>
    <title type="text">My FEED</title>

    <id>[url]http://xxxx/atom.php[/url]</id>
    <link rel="alternate" type="application/xhtml+xml" href="http://xxxx/rss/" />
    <link rel="self" type="application/atom+xml" href="http://xxxx/atom.php"/>

    <?php
    $query 
    " SELECT news_id, 
    DATE_FORMAT(timestamp, '%a, %d %b %Y %H:%i:%s GMT') AS timestamp 
    FROM tb_newsfeed 
    ORDER BY news_id DESC LIMIT 0,1 "
    ;
    $result mysql_query($query);
    $row mysql_fetch_object($result);
    ?>
    <updated><?php echo $row->timestamp ?></updated>

    <?php
    $query 
    " SELECT news_id, title, author, news, DATE_FORMAT(timestamp, '%a, %d %b %Y %H:%i:%s GMT') 
    AS timestamp, category 
    FROM tb_newsfeed 
    ORDER BY news_id DESC LIMIT 1, 10 "
    ;

    $result mysql_query($query);

    while(
    $row mysql_fetch_object($result))
    {
        echo 
    "        <entry>\n";
        echo 
    "            <title>".$row->title."</title>\n";
        echo 
    "            <author>\n";
        echo 
    "                <name>".$row->author."</name>\n";
        echo 
    "            </author>\n";
        echo 
    "            <summary type=\"text\">".$row->news."</summary>\n";
        echo 
    "            <content type=\"html\">".$row->news."</content>\n";
        echo 
    "            <category term=\" ".$row->category." \" />\n";
        echo 
    "            <published>".$row->timestamp."</published>\n";
        echo 
    "            <updated>".$row->timestamp."</updated>\n";
        echo 
    "        </entry>\n";
    }
    ?>
    </feed>
    Wenn ich nun das Ganze validieren lasse, erscheint folgende Fehlermeldung:
    updated must be an RFC-3339 date-time
    Wie kann ich das Datum in RFC-3339 umwandeln?? Übrigens das Datum in der Datenbank ist von Datentyp Timestamp und wird automatisch gesetzt.

    Danke für eure Hilfe.
    Zuletzt geändert von bigtail; 08.05.2007, 12:43.

  • #2
    1. code umbrechen
    2. guckst du hier

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      PHP-Code:

      <?php
      include('db_login.php');
      header("Content-type: application/atom+xml");
      echo 
      "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
      echo 
      "<feed xmlns=\"http://www.w3.org/2005/Atom\" xml:lang=\"de-DE\">\n";
      ?>
      <title type="text">My FEED</title>

      <id><a href="http://xxxx/atom.php" target="_blank">
      [url]http://xxxx/atom.php[/url]</a></id>

      <link rel="alternate" type="application/xhtml+xml" href="http://xxxx/rss/" />

      <link rel="self" type="application/atom+xml" href="http://xxxx/atom.php"/>

      <?php
      $query 
      " SELECT news_id, timestamp
      FROM tb_newsfeed 
      ORDER BY news_id DESC LIMIT 0,1 "
      ;
      $result mysql_query($query);
      $row mysql_fetch_object($result);

      // get TimeZone
      $timeZone date('O'$timestamp);

      // create first part of AtomTime
      $atomTime[0] = date('Y-m-d\TH:i:s'$timestamp );

      // build second part of AtomTime
      $atomTime[1] = substr($timeZone,0,3). ':' .substr($timeZone,3,2); 

      // merge the 2 parts to one
      $atomTimeString implode(''$atomTime); 
      ?>
      <updated><?php echo $atomTimeString ?></updated>

      <?php
      $query 
      " SELECT news_id, title, author, news, timestamp, category 
      FROM tb_newsfeed 
      ORDER BY news_id DESC LIMIT 1, 10 "
      ;

      $result mysql_query($query);

      // get TimeZone
      $timeZone date('O'$timestamp);

      // create first part of AtomTime
      $atomTime[0] = date('Y-m-d\TH:i:s'$timestamp );

      // build second part of AtomTime
      $atomTime[1] = substr($timeZone,0,3). ':' .substr($timeZone,3,2); 

      // merge the 2 parts to one
      $atomTimeString implode(''$atomTime);

      while(
      $row mysql_fetch_object($result))
      {
          echo 
      "        <entry>\n";
          echo 
      "            <title>".$row->title."</title>\n";
          echo 
      "            <author>\n";
          echo 
      "                <name>".$row->author."</name>\n";
          echo 
      "            </author>\n";
          echo 
      "            <summary type=\"text\">".$row->news."</summary>\n";
          echo 
      "            <content type=\"html\">".$row->news."</content>\n";
          echo 
      "            <category term=\" ".$row->category." \" />\n";
              echo 
      "            <published>".$atomTimeString."</published>\n";
          echo 
      "            <updated>".$atomTimeString."</updated>\n";
          echo 
      "        </entry>\n";
      }
      ?>
      </feed>
      Danke für die Prompte Antwort.

      Die Fehlermeldung ist zwar jetzt weg, als Datum steht aber bei allen Feeds 01 January 1970, 02:00:00

      Was habe ich falsch gemacht??
      Zuletzt geändert von bigtail; 08.05.2007, 13:01.

      Kommentar


      • #4
        Original geschrieben von bigtail
        Was habe ich falsch gemacht??
        1. zum x-ten Mal überbreiten Code gepostet, was du jetzt bitte schleunigst korrigierst,
        2. wieder mal keinerlei eigenen Debugging-Ansatz vorgezeigt. Auch diesbezüglich darfst du gerne nachbessern.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          @wahsaga,
          danke für die Tipps.

          Ich suche schon seit Stunden im Netz nach einer Lösung, und finde aber nichts.

          Wie schon geschrieben, die Fehlermeldung ist zwar jetzt weg, als Datum steht aber bei allen Feeds 01 January 1970, 02:00:00.

          Hat es vielleicht damit zu tun, dass ich in der Datenbank als Datentyp timestamp genommen habe??
          Die Werte für Timestamp in der Tabelle sehen wie in folgendem Beispiel aus:

          2007-02-10 10:59:18

          Kommentar


          • #6
            Hat es vielleicht damit zu tun, dass ich in der Datenbank als Datentyp timestamp genommen habe??
            mySQL hat ein anderes Timestamp-Format als Unix. Siehe z.B. hier:
            http://php.codenewbie.com/articles/p...mp-Page_1.html

            Kommentar


            • #7
              sei so nett und stelle error_reporting richtig ein. ich wundere mich darüber, woher $timestamp kommt.

              Kommentar


              • #8
                PHP-Code:
                $sql "SELECT news_id, title, author, news, UNIX_TIMESTAMP(timestamp) as zeit FROM ...";
                [...]
                echo 
                '<published>'.date('r',$row->zeit).'</published>'
                würde das sonst so probieren...

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  mySQL hat ein anderes Timestamp-Format als Unix. Siehe z.B. hier:
                  http://php.codenewbie.com/articles/...amp-Page_1.html
                  Besten Dank für den Tipp. Genau das wars.

                  If you use MySQL and have a field defined as 'timestamp', then you may find problems when trying to format the time when using PHP
                  @jahlives;

                  echo '<published>'.date('r',$row->zeit).'</published>';
                  Danke für die Antwort, allerdings dein Beispiel ist kein RFC-3339 sondern RFC-822 und wird für RSS v2 verwendet. Atom benötigt RFC-3339.

                  Gruß

                  Kommentar


                  • #10
                    Und was hindert dich daran den Paramenter schnell gegen 'c' auszutauschen ? Dann ist das Datum gemäss ISO8601 und das ist gemäss RFC3339 korrekt
                    aus dem RFC
                    This document defines a date and time format for use in Internet
                    protocols that is a profile of the ISO 8601 standard for
                    representation of dates and times using the Gregorian calendar.
                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar

                    Lädt...
                    X