Bing - Sitemap Ping

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

  • Bing - Sitemap Ping

    Hallo zusammen,

    ich tüftel sei heute Mittag an einem Problem herum und komme nicht weiter. Hoffe ihr könnt helfen.

    Ich möchte Bing automatisch über Aktualisierungen meiner Seite informieren und möchte dazu XML Sitemaps nutzen. Das Erstellen der Sitemap ging einfach. Manuell kann ich diese ja ganz einfach an Bing übermitteln, in dem ich das im Browser aufrufe:

    PHP-Code:
    http://www.bing.com/webmaster/ping.aspx?siteMap=http://www.domain.com/sitemap.xml 
    Das soll aber automatisch passieren, sobald ich die Sitemap geschrieben habe ... so wie bei Wordpress ... und ich möchte eine Fehler- bzw. Erfolgsmeldung zurück haben.

    Mein Lösungsansatz:

    PHP-Code:
        function pingBingSitemaps$url_xml )
        {
           
    $status 0;
           
    $bing 'http://www.bing.com/webmaster';
           if( 
    $fp=@fsockopen($bing80) )
           {
              
    $req =  'GET /ping.aspx?siteMap=' .
                      
    urlencode$url_xml ) . " HTTP/1.1\r\n" .
                      
    "Host: $bing\r\n" .
                      
    "User-Agent: Mozilla/5.0 (compatible; " .
                      
    PHP_OS ") PHP/" PHP_VERSION "\r\n" .
                      
    "Connection: Close\r\n\r\n";
              
    fwrite$fp$req );
              while( !
    feof($fp) )
              {
                 if( @
    preg_match('~^HTTP/\d\.\d (\d+)~i'fgets($fp128), $m) )
                 {
                    
    $status intval$m[1] );
                    break;
                 }
              }
              
    fclose$fp );
           }
           return( 
    $status );
        }




            if( 
    200 === ($status=pingBingSitemaps($url_xml)) )
            {
               
    $status_ping_bing "<b>Bing Sitemap Ping:</b> erfolgreich - Status code: $status.<br>\n";
            }
            else
            {
               
    $status_ping_bing "<b>Bing Sitemap Ping:</b> fehlgeschlafen - Status code: $status.<br>\n";
            } 
    wobei $url_xml die URL zu meiner Seitemap ist.

    Code 200 ist ja der, den man bei Erfolg erhält?! Richtig?!

    Leider funktioniert das so nicht und ich weiss nicht warum?! Ich bekomme immer die Meldung, dass das Pingen fehlgeschlagen ist mit dem Rückgabewert 0.

    Wenn ich das so mit den Ping Daten von Google nutze, um die Sitemap an Google zu senden ... dann klappt es ohne Fehlermeldung.

    Habt ihr eine Idee?

    Gruß

    Michael

  • #2
    Vom groben überfliegen her:

    Guck dir unter PHP: fsockopen - Manual nochmal an, was hier an Parametern erwartet wird und guck dir dann das nochmal bei deinem Script an

    EDIT:
    Um es dir leichter zu machen - guck dir speziell den ersten Parameter an.
    Zuletzt geändert von Quetschi; 28.10.2009, 16:27.
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Danke für deinen Tipp.

      Da war ich wohl etwas zu sparsam.

      Den Code der Funktion habe ich jetzt mal ein wenig geändert. Dieser sieht jetzt so aus:

      PHP-Code:
          function pingBingSitemaps$url_xml )
          {
             
      $status 0;
             
      $bing 'http://www.bing.com/webmaster';


             
      $fp = @fsockopen($bing80$errno$errstr30);
          

             if (!
      $fp
             { 
              echo 
      "$errstr ($errno)<br />\n"
             } 
             else
             {
                
      $req =  'GET /ping.aspx?siteMap=' .
                        
      urlencode$url_xml ) . " HTTP/1.1\r\n" .
                        
      "Host: $bing\r\n" .
                        
      "User-Agent: Mozilla/5.0 (compatible; " .
                        
      PHP_OS ") PHP/" PHP_VERSION "\r\n" .
                        
      "Connection: Close\r\n\r\n";
                
      fwrite$fp$req );
                while( !
      feof($fp) )
                {
                   if( @
      preg_match('~^HTTP/\d\.\d (\d+)~i'fgets($fp128), $m) )
                   {
                      
      $status intval$m[1] );
                      break;
                   }
                }
                
      fclose$fp );
             }
             return( 
      $status );
          } 
      Beim Ausführen bekomme ich nun diese Fehlermeldung:

      Unable to find the socket transport "http" - did you forget to enable it when you configured PHP? (1091372144)

      Was heisst das?

      Kommentar


      • #4
        meiner Meinung nach eignet sich CURL für sowas besser...

        EDIT: zu deinem Problem, da steht eigtl schon beantwortet im 2ten Post!

        Kommentar


        • #5
          wenn ich [FONT=monospace]als URL für bing nur das nehme
          [/FONT]
          PHP-Code:
          $bing 'www.bing.com/webmaster'
          dann ist die Fehlermeldung weg und ich bekomme nur:

          (0)

          als Ausgabe.
          [COLOR=#000000][COLOR=#CC0000][/COLOR][/COLOR]

          Kommentar


          • #6
            Zitat von Jarez Beitrag anzeigen
            Da war ich wohl etwas zu sparsam.
            Nicht unbedingt - laut Manual ist nur der erste Parameter erforderlich - aber guck dir den nochmal genau an!!

            Und ein bisschen Basic-Verständnis vom http-Protokoll wäre auch ned verkehrt
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              da gehört webmaster auch nicht hin ;-)

              Kommentar


              • #8
                Mist ... stimmt ... da soll ja nur der Host rein. *andenkopffass*

                Habe den Code jetzt mal so geändert:

                PHP-Code:
                    function pingBingSitemaps$url_xml )
                    {
                       
                $status 0;

                       
                $fp = @fsockopen("www.bing.com"80);
                    

                       if (!
                $fp
                       { 
                        echo 
                "$errstr ($errno)<br />\n"
                       } 
                       else
                       {
                          
                $req =  'GET /webmaster/ping.aspx?siteMap=' .
                                  
                urlencode$url_xml ) . " HTTP/1.1\r\n" .
                                  
                "Host: $bing\r\n" .
                                  
                "User-Agent: Mozilla/5.0 (compatible; " .
                                  
                PHP_OS ") PHP/" PHP_VERSION "\r\n" .
                                  
                "Connection: Close\r\n\r\n";
                          
                fwrite$fp$req );
                          while( !
                feof($fp) )
                          {
                             if( @
                preg_match('~^HTTP/\d\.\d (\d+)~i'fgets($fp128), $m) )
                             {
                                
                $status intval$m[1] );
                                break;
                             }
                          }
                          
                fclose$fp );
                       }
                       return( 
                $status );
                    }

                        if( 
                200 === ($status=pingBingSitemaps($url_xml)) )
                        {
                           
                $status_ping_bing "<b>Bing Sitemaps Ping:</b> erfolgreich - Status code: $status.<br>\n";
                        }
                        else
                        {
                           
                $status_ping_bing "<b>Bing Sitemaps Ping:</b> fehlgeschlafen - Status code: $status.<br>\n";
                        } 
                Eine Fehlermeldung bekomme ich jetzt immer noch:

                Bing Sitemaps Ping: fehlgeschlafen - Status code: 400.

                Aber das eigentliche Grundübel ist ja schon mal weg.

                Manchmal steht man echt auf dem Schlauch. Ich sollte ne Pause machen.
                Zuletzt geändert von Jarez; 28.10.2009, 16:55. Grund: GET Zeile geändert ...

                Kommentar


                • #9
                  schau noch mal auf GET ;-)

                  Kommentar


                  • #10
                    Zitat von Jarez Beitrag anzeigen
                    Bing Sitemaps Ping: fehlgeschlafen - Status code: 400.
                    Gute Nacht!
                    Zitat von Jarez Beitrag anzeigen
                    Manchmal steht man echt auf dem Schlauch. Ich sollte ne Pause machen.
                    Siehe oben!


                    Mach noch beim GET ein / vor webmaster.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Ich sag es ja ... eine Pause ist notwendig ...

                      Da macht man echt die schlimmsten und dümmsten Fehler ...

                      Habe den Code noch mal geändert und nun funktioniert es auch.

                      Für alle die das auch mal brauchen:

                      PHP-Code:
                          function pingBingSitemaps$url_xml )
                          {
                             
                      $status 0;

                              
                             
                      $fp = @fsockopen("www.bing.com"80);
                          

                             if (!
                      $fp
                             { 
                              echo 
                      "$errstr ($errno)<br />\n"
                             } 
                             else
                             {
                                
                      $req =  'GET /webmaster/ping.aspx?siteMap=' .
                                        
                      urlencode$url_xml ) . " HTTP/1.1\r\n" .
                                        
                      "Host: www.bing.com\r\n" .
                                        
                      "User-Agent: Mozilla/5.0 (compatible; " .
                                        
                      PHP_OS ") PHP/" PHP_VERSION "\r\n" .
                                        
                      "Connection: Close\r\n\r\n";
                                
                      fwrite$fp$req );
                                while( !
                      feof($fp) )
                                {
                                   if( @
                      preg_match('~^HTTP/\d\.\d (\d+)~i'fgets($fp128), $m) )
                                   {
                                      
                      $status intval$m[1] );
                                      break;
                                   }
                                }
                                
                      fclose$fp );
                             }
                             return( 
                      $status );
                          } 
                      Danke für Eure Hilfe !!!!

                      Ich hätte da sonst noch morgen dran gesessen.

                      Kommentar


                      • #12
                        Zitat von Jarez Beitrag anzeigen
                        Für alle die das auch mal brauchen
                        Nein, siehe Post#4 http://www.php-resource.de/forum/php...tml#post628021
                        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                        Schön - etwas Geschichte kann ja nicht schaden.
                        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                        Kommentar


                        • #13
                          Mit CURL habe ich noch nie was gemacht.

                          Gibt es dafür einen fertigen Code Schnipsel oder einen Lösungsansatz?

                          Kommentar


                          • #14
                            PHP: curl_exec - Manual
                            das Beispiel...

                            bei setOpt muss man nur darauf dann achten: "CURLOPT_RETURNTRANSFER"

                            Gruß
                            Gunah

                            Kommentar


                            • #15
                              Das werde ich mir einmal ganz in Ruhe anschauen.

                              Vielen Dank nochmals. ;o)

                              Kommentar

                              Lädt...
                              X