Günther: archive.org, Wayback, API Schnittstelle einbauen, weiterverarbeiten

Ich würde gerne Informationen von archive.org über meine Webseite mittels einer API abrufen und dann auf meiner Seite weiterverarbeiten. Aber ich durchschaue das Beispiel auf der Seite

https://archive.org/help/wayback_api.php

nicht.

Hier steht, wenn man die Informationen möchte funktioniert das mit

http://archive.org/wayback/available?url=example.com

wo bei example.com, für eine beliebige Webseite besteht. Rufe ich diese im Browserfenster auf: bekomme ich folgenden Inhalt:

{

    "archived_snapshots": {

        "closest": {

            "available": true,

            "url": "http://web.archive.org/web/20130919044612/http://example.com/",

            "timestamp": "20130919044612",

            "status": "200"

        }

    }

}

Die würde ich gerne weiterverarbeiten. Aber Wie.

Im Aufblick würde ich sie einlesen mittels file_get_contents und dann versuchen die einzelnen Variablen rauszufiltern. Ist das der richtige Weg, oder gibt es dafür eine elegante, einfachere Möglichkeit.

  1. Hallo

    Hier steht, wenn man die Informationen möchte funktioniert das mit

    http://archive.org/wayback/available?url=example.com

    wo bei example.com, für eine beliebige Webseite besteht. Rufe ich diese im Browserfenster auf: bekomme ich folgenden Inhalt:

    {
    
        "archived_snapshots": {
    
            "closest": {
    
                "available": true,
    
                "url": "http://web.archive.org/web/20130919044612/http://example.com/",
    
                "timestamp": "20130919044612",
    
                "status": "200"
    
            }
    
        }
    
    }
    

    Du bekommst die Information zurück, dass es (mindestens) ein Abbild der Seite gibt. Die Details beziehen sich auf das jüngste Abbild (closest) und beinhalten die Informationen, unter welcher URL es abrufbar ist und von wann es ist (19.09.2013 04:46:12 Uhr).

    Die würde ich gerne weiterverarbeiten. Aber Wie.

    Die API liefert diese Informationen als JSON. PHP hat JSON-Funktionen (seit PHP 5.2 im Standardlieferumfang), um die Infos auseinanderzukabustern.

    Tschö, Auge

    --
    Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
    Terry Pratchett, „Gevatter Tod“
    1. Hallo,

      Die API liefert diese Informationen als JSON. PHP hat JSON-Funktionen (seit PHP 5.2 im Standardlieferumfang), um die Infos auseinanderzukabustern.

      und clientseitig mit Javscript, http-Request (AJAX) und JSON.parse.

      Gruß Jürgen

  2. Hallo Günther,

    {
    
        "archived_snapshots": {
    
            "closest": {
    
                "available": true,
    
                "url": "http://web.archive.org/web/20130919044612/http://example.com/",
    
                "timestamp": "20130919044612",
    
                "status": "200"
    
            }
    
        }
    
    }
    

    Die würde ich gerne weiterverarbeiten. Aber Wie.

    Im Aufblick würde ich sie einlesen mittels file_get_contents und dann versuchen die einzelnen Variablen rauszufiltern. Ist das der richtige Weg, oder gibt es dafür eine elegante, einfachere Möglichkeit.

    das sieht nach JSON aus. PHP hat dafür auch JSON-Funktionen.

    Gruß, Dennis

    1. Danke das ist es (fast).

      Wenn ich die Abfrage stelle bekomme ich folgende Antwort:

      Array ( [archived_snapshots] => Array ( [closest] => Array ( [available] => 1 [url] => http://web.archive.org/web/20150608070228/http://example.com [timestamp] => 20150608070228 [status] => 200 ) ) )

      die pake ich dann ich die Variable $json. Decodiere sie, als Array in $wayback

      und versuche dann den Wert timestamp auszugeben, der ja da ist, aber hier happert es.

      
      $json= @file_get_contents('http://archive.org/wayback/available?url=example.com');
      
      $wayback=json_decode($json, true);
      
      print_r ($wayback);
      
      echo $wayback['timestamp'];
      
      1. Hallo Günther,

        Array ( [archived_snapshots] => Array ( [closest] => Array ( [available] => 1 [url] => http://web.archive.org/web/20150608070228/http://example.com [timestamp] => 20150608070228 [status] => 200 ) ) )

        die pake ich dann ich die Variable $json. Decodiere sie, als Array in $wayback

        und versuche dann den Wert timestamp auszugeben, der ja da ist, aber hier happert es.

        
        $json= @file_get_contents('http://archive.org/wayback/available?url=example.com');
        
        $wayback=json_decode($json, true);
        
        print_r ($wayback);
        
        echo $wayback['timestamp'];
        

        Du hast da ein verschachteltes Array vorliegen, d.h. auf der "obersten Ebene" gibt es keinen Eintrag timestamp. Wenn Du das error_reporting einschaltest sollte Dir das auch gemeldet werden. Ansonsten hilft bei print_r oder var_dump auch immer ein Blick in den Quelltext des Browsers. Oder lass dir ein <pre> vor dem Aufruf von print_r oder var_dump ausgeben. Dann sollte es etwas klarer zu sehen sein.

        Gruß Dennis

        Gruß, Dennis

      2. Moin!

        $json= @file_get_contents('http://archive.org/wayback/available?url=example.com');
        

        Bitte nicht.

        curl gibt Dir mehr Optionen (z.B. die Wartezeit zu begrenzen) und die Möglichkeit, auf Fehler zu reagieren.

        Ich bastle gerade an sowas:

        <?php
        $start=microtime(TRUE);
        error_reporting(E_ALL);
        define('SERVER_URL', 'https://localhost/Tests/key_value.cache.php?q=');
        define('CHECK_SLL_ZERTIFIKAT', false);
        define('CHECK_SLL_HOST', false);
        define('CONTENT_TYPE', 'text/plain');
        
        
        if (empty($_GET['q']) ) {
           header('HTTP 400 Bad Request', true, 400);
           header('Content-Type: ' . CONTENT_TYPE);
           $d['ERROR_MSG']='Parameter q fehlt.';
           echo json_encode($d);
           exit;
        }
        
        $curl = curl_init();
        curl_setopt_array( $curl, array (
            CURLOPT_CERTINFO => 1,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_CONNECTTIMEOUT => 10,
            CURLOPT_URL => SERVER_URL . urlencode($_GET['q']),
            CURLOPT_SSL_VERIFYPEER => CHECK_SLL_ZERTIFIKAT,
            CURLOPT_SSL_VERIFYHOST => CHECK_SLL_HOST
        ));
        $r = curl_exec($curl);
        
        header('Content-Type: text/plain');
        
        if ( ! empty($r) ) {
            $r = json_decode($r, TRUE);
            print_r($r);
            echo "\n", "Benötigte Zeit: ", microtime(TRUE) - $start, " Sekunden";
        } else {
          echo curl_error($curl);
        }
        curl_close($curl);
        

        Jörg Reinholz

        1. Tach!

          $json= @file_get_contents('http://archive.org/wayback/available?url=example.com');
          

          Bitte nicht.

          curl gibt Dir mehr Optionen (z.B. die Wartezeit zu begrenzen) und die Möglichkeit, auf Fehler zu reagieren.

          Das kann PHP auch ohne curl - und noch dazu einfacher. Man kann einen Stream-Context mitgeben, siehe PHP-Handbuch zu file_get_contents() Example #4. Dann muss man sich etwas durch die Dokumentation hangeln, über Supported Protocols and Wrappers kommt man zu den HTTP context options.

          dedlfix.

          1. Moin!

            und noch dazu einfacher.

            Naja. Worte wie "einfacher" sind stets Meinungssache. Für mich gilt das hier nicht.

            Jörg Reinholz

  3. Moin!

    wo bei example.com, für eine beliebige Webseite besteht. Rufe ich diese im Browserfenster auf: bekomme ich folgenden Inhalt:

    {
        "archived_snapshots": {
            "closest": {
                "available": true,
                "url": "http://web.archive.org/web/20130919044612/http://example.com/",
                "timestamp": "20130919044612",
                "status": "200"
            }
        }
    }
    

    Die würde ich gerne weiterverarbeiten. Aber Wie.

    $var=json_decode($string, TRUE);

    dürfte in dem Fall das Äquivalent zu Folgendem geben:

    $var=array();
    $var['archived_snapshots']=array();
    $var['archived_snapshots']['closest']=array();
    $var['archived_snapshots']['closest']['available']=TRUE;
    $var['archived_snapshots']['closest']['url']="http://web.archive.org/web/20130919044612/http://example.com/";
    $var['archived_snapshots']['closest']['timestamp']="20130919044612";
    $var['archived_snapshots']['closest']['status']="200";
    

    … was Du mit mit print_r() oder var_debug() auch nachsehen kannst.

    Jörg Reinholz