<?php
ini_set("session.use_trans_sid", "0");
session_start();
/*-------------------------------------------------------------------------------------------------
ItemPage >= 1 - Es werden alle Seiten gecrawlt, die sich ohne eine Formulareingabe aufrufen lassen.
ItemPage >= 2 bis 10 - Es werden bei Suchanfragen 1 bis 10 Ergebnisseiten gecrawlt.
Dieser Wert sollte mit bedacht gewaelht werden, um keinen Clone zu erzeugen.
--------------------------------------------------------------------------------------------------
*/
if ($_GET["ItemPage"] >= 1){$robots = "noindex,nofollow";}
else {$robots = "index,follow";}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ein Demo mit cURL, Cache und Zugriffskontrolle</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="demo.css">
<meta name="robots" content="<?php echo $robots; ?>">
</head>
<body>
<h1 style="text-align: center">Ein Demo mit cURL, Cache und Zugriffskontrolle</h1>
<div align="center"><center>
<?php
//------ Rubrik und Thema vorwaehlen, damit Seite nicht leer ladet! -------------------------------
$dierubrik = "Books"; //-- Eine Rubrik eintragen, z.B. Books oder Tools
$meinthema = "Internet"; //-- Ein Suchwort, Thema, Titel oder Autor eintragen
if (file_exists("edittext.php")) {include ("edittext.php");
}
else {echo "Die gesuchte Datei ist nicht vorhanden";
}
/*-------------------------------------------------------------------------------------------------
Abfrage ob bei Bentuzung des Formulars oder eines Seitenlinks ein Sessions-Cookie angenommen wurde.
Falls nicht, so wird weiter unten ein Hinweis ausgegeben.
--------------------------------------------------------------------------------------------------
*/
if ($_GET["Keywords"]){
if(!isset($_SESSION["Kennung"]) or $_SESSION["Kennung"] != $einKennwort){$kommentar = "on";
}}
//------ Funktion um unnoetige HTML-Tags aus 'Beschaffenheit' zu entfernen. -----------------------
function noTags($htmltags) {
$eingg = array("<b>","</b>","<i>","</i>");
$ausgg = array("","","","");
$htmltags = str_replace($eingg,$ausgg,$htmltags);
return $htmltags;
}
//------ Der Briefkasten vom Formular mit Umwandlung der Umlaute ----------------------------------
if ($_GET["Keywords"] and $_SESSION["Kennung"] == $einKennwort and $_SESSION["scounter"] < $sessiwert) {
$SearchIndex = $_GET["SearchIndex"];
$Keywords = $_GET["Keywords"];
$ItemPage = $_GET["ItemPage"];
$eingang = array("Ä","ä","Ö","ö","Ü","ü","ß");
$ausgang = array("Ae","ae","Oe","oe","Ue","ue","ss");
$umlaute = str_replace($eingang,$ausgang,$Keywords);
$umlaute = preg_replace("/[^a-zA-Z0-9-]/", " ", $umlaute);
$umlaute = trim($umlaute);
$fuerform = $umlaute;
$umlaute = preg_replace("/[ ]/", "+", $umlaute);
$SearchIndex = preg_replace("/[^a-zA-Z]/", "no", $SearchIndex);
$ItemPage = preg_replace("/[^0-9]/", "1", $ItemPage);
}
else {$SearchIndex = $dierubrik;
$umlaute = $meinthema;
$ItemPage = 1;
$fuerform = " ";
}
$laengevon = strlen($umlaute);
if ($laengevon > $suchbegrl) {$umlaute = substr($umlaute, 0, $suchbegrl);
}
if ($laengevon > 2) {$inOrdnung = "on";
}
else {$inOrdnung = "off";
}
//------ Das Kennwort fuer die Session darf erst unterhalb des Briefkastens uebergeben werden! ----
if (!isset($_SESSION["Kennung"])) {$_SESSION["Kennung"] = $einKennwort;
$_SESSION["scounter"] = 0;
}
if ($_SESSION["scounter"] < $sessiwert) {$sessicontrol = "on";}
else {$sessicontrol = "off";}
$_SESSION["scounter"]++;
/*-------------------------------------------------------------------------------------------------
Zusaetzliche Zugriffskontrolle um automatisierte Suchanfragen einzuschraenken. Zuerst werden die
bisherigen Eintraege aus der Kontrolldatei eingelesen und ein neuer Eintrag wird hinzugefuegt.
Sollte der Hinweis - Fehler beim Schreiben in Visitcontrol! - ausgegeben werden, sind fuer den
Ordner ablage CMOD-Rechte zu vergeben.
--------------------------------------------------------------------------------------------------
*/
date_default_timezone_set("Europe/Berlin");
$ip_von = $_SERVER["REMOTE_ADDR"];
$controldatei = "ablage/visitscontrol.txt";
$speichertime = time();
$controlzeit = $speichertime -3600;
if (file_exists($controldatei)){
@$fuercontrol = fopen($controldatei,"r") or die ("Fehler beim Oeffnen von Visitcontrol!");
while(!feof($fuercontrol)) {
$eintraege = fgets($fuercontrol, 100);
$eintraege = preg_replace("/[^a-zA-Z0-9_.:&=-]/", "+", $eintraege);
parse_str($eintraege);
if ($proStunde > $controlzeit){
$gesamt_stunde[] = $ipad;
$alterstring .= trim("proStunde=".$proStunde."&ipad=".$ipad)."\n";
unset($proStunde);
unset($ipad);
}
}
fclose($fuercontrol);
}
$neuerstring = trim("proStunde=".$speichertime."&ipad=".$ip_von)."\n";
@file_put_contents($controldatei,$alterstring.$neuerstring) or die ("Fehler beim Schreiben in Visitcontrol!");
@$zaehlips = array_count_values($gesamt_stunde);
$gstunden = count($gesamt_stunde);
/*-------------------------------------------------------------------------------------------------
Erst wenn mehr Zugriffe als vorgewaehlt in einem kurzen Zeitraum erfolgten, wird dieser Teil der
Zugriffskontrolle aktiv und gegebenenfalls fuer eine einzelne IP der Zugriff voruebergehend gesperrt.
Die Voreinstellung von 50 kann erhoeht oder verringert werden, wobei beide Werte gleich sein sollten.
--------------------------------------------------------------------------------------------------
*/
if ($gstunden >= $stdencount){
foreach ($zaehlips as $checkips => $sperrwert) {
if ($sperrwert >= $stdencount) {$ipArray[] = trim($checkips);}
}
}
$Anzahl = count($ipArray);
if ($Anzahl >= 1) {
if (in_array($ip_von, $ipArray)) {$varcontrol = "off";
}
else {$varcontrol = "on";
}} else {$varcontrol = "on";}
//------ Hier erhalten die Kategorien ihren deutschen Namen. --------------------------------------
$deutsche = array("Books" => "Bücher",
"Music" => "Musik",
"DVD" => "DVDs",
"Toys" => "Spielwaren & Modellbau",
"OutdoorLiving" => "Hobby & Freizeit",
"Software" => "Software",
"Tools" => "Werkzeug",
"SoftwareVideoGames" => "Video & PC Spiele",
"HomeGarden" => "Haus & Garten",
"Kitchen" => "Haushalt",
"Photo" => "Fotografie",
"Electronics" => "Elektronik");
$DErubrik = $deutsche[$SearchIndex];
//------ Die Titelzeile ---------------------------------------------------------------------------
echo "\t<p style=\"text-align: center\">".$titelei1.$umlaute.$titelei2."</p>\n\n";
if ($kommentar == "on"){echo $kommcook;}
/*-------------------------------------------------------------------------------------------------
Eine Funktion fuer ein Formular und das obere Suchformular. Falls nur ein Formular erwuenscht, so
einfach eine der beiden Ausgaben "echo formularFELD" loeschen. Moeglichst vorher eine
Sicherungskopie vom Script anlegen.
--------------------------------------------------------------------------------------------------
*/
function formularFELD($Suchoption,$SearchIndex,$DErubrik,$fuerform){
$MyForm = "\t<form name=\"".$Suchoption."\" action=\"".basename($_SERVER["PHP_SELF"])."\" method=\"get\" accept-charset=\"iso-8859-1\">\n".
"\t<select name=\"SearchIndex\">\n".
"\t<option value=\"".$SearchIndex."\">".$DErubrik."</option>\n".
"\t<option value=\"Books\">Bücher</option>\n".
"\t<option value=\"DVD\">DVD</option>\n".
"\t<option value=\"Music\">Musik</option>\n".
"\t<option value=\"Toys\">Spielwaren</option>\n".
"\t<option value=\"OutdoorLiving\">Hobby & Freizeit</option>\n".
"\t<option value=\"Software\">Software</option>\n".
"\t<option value=\"Tools\">Werkzeug</option>\n".
"\t<option value=\"SoftwareVideoGames\">Video & PC Spiele</option>\n".
"\t<option value=\"HomeGarden\">Haus & Garten</option>\n".
"\t<option value=\"Kitchen\">Haushalt</option>\n".
"\t<option value=\"Photo\">Fotografie</option>\n".
"\t<option value=\"Electronics\">Elektronik</option>\n".
"\t</select>\n\n\t Eingabe: \n\n".
"\t<input type=\"text\" name=\"Keywords\" value=\"".$fuerform."\" size=\"30\" maxlength=\"30\">\n".
"\t<input type=\"hidden\" name=\"ItemPage\" value=\"1\">\n".
"\t<input type=\"submit\" value=\"Suchen\">\n".
"\t</form>\n\n";
return $MyForm;
}
$Suchoption = "SuchoptionO";
echo formularFELD($Suchoption,$SearchIndex,$DErubrik,$fuerform);
echo "\t<hr style=\"margin-top: 20px; color: #fdfcfb; background-color: #fdfcfb\">\n";
/*-------------------------------------------------------------------------------------------------
Falls der eingebende Suchbegriff in Ordnung war, werden die restlichen Parameter gebildet und fuer
den Versand kodiert. Die Parameter werden dann entsprechend des Byte-Wertes ihrer Schluessel geordnet.
--------------------------------------------------------------------------------------------------
*/
if ($inOrdnung == "on" and $varcontrol == "on" and $sessicontrol == "on"){
$aktuelle = urlencode(gmdate("Y-m-d\TH:i:s\Z"));
$jahreszahl = explode("-", $aktuelle);
if ($jahreszahl[0] >0) {$aktuellezeit = $aktuelle;}
else {$datum = getdate(); // Fehlerkorrektur bei fehlender Jahreszahl siehe Beschreibung!
$jahr = $datum["year"];
$aktuellezeit = urlencode($jahr."-".gmdate("m-d\TH:i:s\Z"));
}
$SearchIndex = urlencode($SearchIndex);
$umlaute = urlencode($umlaute);
$alleparameter = "AWSAccessKeyId" ."=". $access_key_id ."&".
"AssociateTag" ."=". $associate_id ."&".
"ItemPage" ."=". $ItemPage ."&".
"Keywords" ."=". $umlaute ."&".
"Operation" ."=". "ItemSearch" ."&".
"ResponseGroup" ."=". "Medium" ."&".
"SearchIndex" ."=". $SearchIndex ."&".
"Service" ."=". "AWSECommerceService" ."&".
"Timestamp" ."=". $aktuellezeit ."&".
"Version" ."=". "2011-08-01";
$stringsigna = "GET\n"."ecs.amazonaws.de"."\n"."/onca/xml"."\n".$alleparameter;
$signature = base64_encode(hash_hmac("sha256", $stringsigna, $secret_access_key, True));
$signature_2 = urlencode($signature);
$datenneu = "http://ecs.amazonaws.de/onca/xml?".$alleparameter."&Signature=".$signature_2;
//------ Eine Funktion, um die XML per cURL anzufordern. -----------------------
function proRES($antwort){
$einAgent = $_SERVER["HTTP_USER_AGENT"];
if (isset($einAgent) and !empty($einAgent)) {
$einAgent = "Mozilla/5.0 (compatible; Shop/PHP; +http://www.Ihre-Domain.de/shop.php)";
$myhoney = curl_init($antwort);
curl_setopt($myhoney, CURLOPT_HEADER, false);
curl_setopt($myhoney, CURLOPT_USERAGENT, $einAgent);
curl_setopt($myhoney, CURLOPT_RETURNTRANSFER, true);
$eingang = curl_exec($myhoney);
$infogen = curl_getinfo($myhoney, CURLINFO_HTTP_CODE);
curl_close($myhoney);
if ($infogen === 200 or $infogen === 301){$antwort = $eingang;
}
else {$antwort = $infogen;}
return $antwort;
}
else {$antwort = false;}
return $antwort;
}
/*--------------------------------------------------------------------------------------------------
Es wird ueberprueft, ob eine Cache-Datei vorhanden ist und ob diese Cache-Datei nicht leer und nicht
aelter als eine Stunde ist.
--------------------------------------------------------------------------------------------------
*/
$cachedatei = "ablage/".$dierubrik."-".$meinthema.".xml";
$cachezeit = time()-3600;
if ($SearchIndex == $dierubrik and $umlaute == $meinthema and $ItemPage == 1){
if (file_exists($cachedatei) and filesize($cachedatei) > 1024){
if (filemtime($cachedatei) < $cachezeit){
$datast = proRES($datenneu);
if (strlen($datast) > 3) {
@file_put_contents($cachedatei, $datast) or die ("F 1 - ".$lfehler);
$daten = $datast;}
else {exit ("HTTP Statuscode: ".$datast."\n");}
}
else {$daten = @file_get_contents($cachedatei) or die ("F 2 - ".$lfehler);
}
}
else { $datast = proRES($datenneu);
if (strlen($datast) > 3) {
@file_put_contents($cachedatei, $datast) or die ("F 3 - ".$lfehler);
$daten = $datast;}
else {exit ("HTTP Statuscode: ".$datast."\n");}
}
}
else {$datast = proRES($datenneu);
if (strlen($datast) > 3) {$daten = $datast;}
else {exit ("HTTP Statuscode: ".$datast."\n");}
}
//------ Die XML-Datei wird als String geladen. ---------------------------------------------------
$response = simplexml_load_string($daten);
//-- Ab hier beginnt die Ausgabe. -----------------------------------------------------------------
if ($response->Items->Item) {
echo "\n\t<table border=\"0\" width=\"".$tableweite."\" cellspacing=\"0\" cellpadding=\"0\">\n";
foreach ($response->Items->Item as $movie) {
/*-------------------------------------------------------------------------------------------------
Die erste Zeile darf nur aktiviert werden, wenn Sie, aus welchen Gruenden auch immer, ein Angbot
nicht einblenden moechten. Es lassen sich auch mehrere Angebote sperren. Auch ist es im Falle einer
eventuellen Sperrung unbedingt erforderlich, die schliessende Klammer weiter unten zu aktivieren!
--------------------------------------------------------------------------------------------------
*/
// if ($movie->ASIN != XXX0000XXX){
echo "\t<tr><td style=\"text-align: center; padding-right: 10px; padding-top: 12px; padding-bottom: 15px; ".
"border-bottom: 1px solid #ffffff\">\n";
//------ Das Produktfoto mit Link zur Detailseite. -------------------------------------------------
if ($movie->MediumImage->URL){
echo "\t<a href=\"".$movie->DetailPageURL."\" target=\"_blank\">".
"<img src=\"".$movie->MediumImage->URL."\" border=\"0\" alt=\"Cover\"></a></td>\n";
}
else { echo "\tLeider kein Bild <br> vorhanden.\n";
}
echo "\t<td style=\"text-align: center; padding-left: 10px; padding-top: 12px; padding-bottom: 15px; ".
"border-bottom: 1px solid #ffffff\">\n";
//------ Die Titel von den Produkten mit Link zur Detailseite. ------------------------------------
echo "\t<a href=\"".$movie->DetailPageURL."\" target=\"_blank\" class=\"braungold\">".
htmlspecialchars(utf8_decode($movie->ItemAttributes->Title))."</a><br>\n";
//------ Autoren, Mitautoren und Uebersetzer ------------------------------------------------------
if ($movie->ItemAttributes->Author[0]){
echo "\tAutor: ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Author[0]));
} else {echo "\t";
}
if ($movie->ItemAttributes->Author[1]){
echo " - ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Author[1]));
}
if ($movie->ItemAttributes->Author[2]){
echo " - ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Author[2]));
}
//------ Verlag, Produzent, Art der Bindung, Datum ------------------------------------------------
if ($SearchIndex == "Books") {$Anbieter = $Anbieter1;}
else {$Anbieter = $Anbieter2;}
if ($movie->ItemAttributes->Publisher){
echo "<br>\n\t".$Anbieter.": ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Publisher));
} else {echo "<br>\n\t".$Anbieter.": keine Angaben";
}
if ($movie->ItemAttributes->Binding){
echo " - ".htmlspecialchars(utf8_decode($movie->ItemAttributes->Binding))."<br>\n";
} else {echo "<br>\n";
}
if ($movie->ItemAttributes->PublicationDate){
echo "\terschienen: ".htmlspecialchars(utf8_decode($movie->ItemAttributes->PublicationDate));
} else {echo "\terschienen: k.A.";}
//------ Bemerkungen zur Beschaffenheit - falls vorhanden! ---------------------------------------
if ($movie->ItemAttributes->Feature[0]){
echo "<br>\n\tBeschaffenheit: ".htmlspecialchars(utf8_decode(noTags($movie->ItemAttributes->Feature[0])));
} else {echo "<br>\n\tBeschaffenheit: keine Angaben";
}
if ($movie->ItemAttributes->Feature[1]){
echo ", ".htmlspecialchars(utf8_decode(noTags($movie->ItemAttributes->Feature[1])));
}
if ($movie->ItemAttributes->Feature[2]){
echo ", ".htmlspecialchars(utf8_decode(noTags($movie->ItemAttributes->Feature[2])));
}
//------ Listenpreis bei Amazon, Neupreis und Angebotspreise Marktplatz --------------------------
if ($movie->ItemAttributes->ListPrice->FormattedPrice){
echo "<br>\n\tListenpreis bei Amazon.de: ".
htmlspecialchars(utf8_decode($movie->ItemAttributes->ListPrice->FormattedPrice))."<br>\n";
} else { echo "<br>\n\tListenpreis bei Amazon.de: k.A.<br>\n";
}
if ($movie->OfferSummary->LowestNewPrice->FormattedPrice){
echo "\tPreis: ".htmlspecialchars($movie->OfferSummary->LowestNewPrice->FormattedPrice).
" <span class=\"graumittle\">(Marktplatz)</span>";
} else { echo "\tPreis: keine Angaben <span class=\"graumittle\">(Marktplatz)</span>";
}
if ($movie->OfferSummary->LowestUsedPrice->FormattedPrice){
echo " / gebraucht erhältlich ab: ".htmlspecialchars($movie->OfferSummary->LowestUsedPrice->FormattedPrice).
"<br>\n\t<br>\n";
} else { echo " / erhältlich ab: keine Angebote<br>\n\t<br>\n";
}
//------ Link zur Detailseite und Ende Zellen. ----------------------------------------------------
echo "\t<a href=\"".$movie->DetailPageURL."\" target=\"_blank\" class=\"braungold\">weitere Details</a><br>".
"\n\t</td></tr>\n\n";
// Schließende Klammer im Fall der Sperrung einer ASIN aktivieren! ->}
}
echo "\t<tr><td align=\"center\" style=\"padding-left: 10px; padding-right: 10px; padding-top: 10px; ".
"padding-bottom: 10px\" colspan=\"2\">\n\n";
//------- Auswertung Response ---------------------------------------------------------------------
$ItemPage = $response->Items->Request->ItemSearchRequest->ItemPage;
$SearchIndex = $response->Items->Request->ItemSearchRequest->SearchIndex;
$Keywords = $response->Items->Request->ItemSearchRequest->Keywords;
$MoreSearch = $response->Items->MoreSearchResultsUrl;
$TotalResults = $response->Items->TotalResults;
$TotalPages = $response->Items->TotalPages;
if (isset($SearchIndex)) {$SearchIndex = $SearchIndex;
} else {echo $SearchIndex = "Fehler SearchIndex?";
}
if (isset($Keywords)) {$Keywords = $Keywords;}
else {echo $Keywords = "Fehler Keywords?";
}
if (isset($TotalResults)) {$TotalResults = $TotalResults;
} else {echo $TotalResults = "Keine Resultate?";
}
if (isset($TotalPages)) {$TotalPages = $TotalPages;}
else {echo $TotalPages = "Keine Pages?";
}
if (isset($MoreSearch)) {$MoreSearch = $MoreSearch;
$MoreText = "» weitere Ergebnisse bei Amazon.de «\n";
}
else {echo $MoreSearch = "#";
$MoreText = "*";
}
echo "\tSeite ".htmlspecialchars($ItemPage)." - Rubrik ".$deutsche[(string)$SearchIndex].
" - Thema: ".htmlspecialchars($Keywords)."<br> Treffer insgesamt: ".htmlspecialchars($TotalResults).
" auf ".htmlspecialchars($TotalPages). " Seiten<br><br>\n\n";
/*--------------------------------------------------------------------------------------------------
Ausgabe des unteren Suchformulars. Falls nicht erwuenscht, einfach loeschen. htmlspecialchars
--------------------------------------------------------------------------------------------------
*/
$Suchoption = "SuchoptionU";
echo formularFELD($Suchoption,$SearchIndex,$DErubrik,$fuerform);
//------- Hier beginnt der Seitencounter. ---------------------------------------------------------
echo "\t</td></tr>\n\t<tr><td style=\"padding-top: 10px; padding-bottom: 10px\" colspan=\"2\">\n\n".
"\t<table border=\"0\" width=\"100%\"><tr><td width=\"33%\" align=\"left\" style=\"padding-left: 20px\">\n";
$Keywords = preg_replace("/[ ]/", "+", $Keywords);
if ($TotalPages > 1) {
if ($ItemPage > 1) {
echo "\t<a class=\"braungold\" href=\"".htmlspecialchars("?".
"SearchIndex"."=". $SearchIndex ."&".
"Keywords" ."=". $Keywords ."&".
"ItemPage" ."=".($ItemPage -1)).
"\">« zurück </a>\n";
} else {echo "\t<span class=\"zueinsam\">« zurück</span></td>\n";}
}
$scautor = "Script von www.seo-welten.de";
$lscautor = "href=\"http://www.seo-welten.de\"";
echo "\t<td width=\"33%\" align=\"center\"><a class=\"braunklein\" ".$lscautor." target=\"_blank\">".$scautor."</a></td>\n".
"\t<td width=\"34%\" align=\"right\" style=\"padding-right: 20px\">\n";
if ($TotalPages > 1) {
if ($ItemPage*1 < $TotalPages and $ItemPage*1 < 10) {
echo "\t<a class=\"braungold\" href=\"".htmlspecialchars("?".
"SearchIndex"."=". $SearchIndex ."&".
"Keywords" ."=". $Keywords ."&".
"ItemPage" ."=".($ItemPage +1)).
"\">nächste Seite »</a>\n";
} else {echo "\t<a class=\"braungold\" href=\"".htmlspecialchars($MoreSearch)."\">".$MoreText."</a>\n";}
}
echo "\t</td></tr></table>\n\n\t</td></tr></table>\n";
}
else {echo "<p style=\"text-align: center; color: #800000\">Fehler bei Item-Kontrolle</p>\n";}
/*-------------------------------------------------------------------------------------------------
Nachfolgend die Ausgabe der Hinweise bei fehlerhaften Eingaben, automatisierten oder allgemein zu
haeufigen Zugriffen von einer einzigen IP-Adresse, zum Beispiel durch spielende Kinder.
--------------------------------------------------------------------------------------------------
*/
}
elseif ($inOrdnung == "off") {echo $inOrdoff;}
elseif ($sessicontrol == "off") {echo $controff;}
elseif ($varcontrol == "off") {echo $varcoff1.$ip_von.$varcoff2;}
?>
</center></div>
</body>
</html>
|