archive.org, Wayback, API Schnittstelle einbauen, weiterverarbeiten
Günther
- https
- php
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.
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
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
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
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'];
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
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.
<?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
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.
Moin!
und noch dazu einfacher.
Naja. Worte wie "einfacher" sind stets Meinungssache. Für mich gilt das hier nicht.
Jörg Reinholz
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