Teil von  SELFPHP   Teil von  Code Snippets / PHP / HTTP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
PHP5 Klasse für Alexa Web Information Service





Beispielaufgabe

Die nachfolgende PHP5 Klasse für Alexa Web Information Service liefert Informationen zu einer bestimmten URL.

Alexa ist ein Dienst, der Daten über Webseitenzugriffe durch Web-Benutzer sammelt und aufbereitet. Auf der Seite von Alexa kann dann zu jeder URL eine Abfrage gemacht werden, um detaillierte Informationen zu einer URL zu erhalten. Vergleichbar mit dem Google PageRank liefert der Alexa Rank die 100.000 meistbesuchten Domains.



Beschreibung

Die Klasse ist so konzipiert, dass die geholten Informationen in einem Array oder als XML aufbereitet und zur Verfügung gestellt werden. Weiterhin besteht die Möglichkeit für jeden Abruf einer Domain beim Alexa Webservice eine XML-Datei zu speichern, die dann mit Datum und Domainnamen gespeichert wird. Diese Datei kann durch die Klasse im nachhinein wieder eingelesen und verwertet werden.

Wie Sie sehen, können Sie mit wenigen Zeilen Programmcode für eine Domain beim Alexa Webservice alle Informationen einholen und als XML-Datei speichern.
Weitere Informationen zum Alexa Webservice finden Sie unter:
http://docs.amazonwebservices.com/AlexaWebInfoService/2005-07-11/

Bitte achten Sie darauf, dass für den Alexa Webservice eine Registrierung notwendig ist. Im Verlauf der Registrierung erhalten Sie dann den öffentlichen und privaten Schlüssel, der für den Webservice von Alexa notwendig ist und den Sie in der Klasse ebenfalls eintragen müssen.
http://aws.amazon.com/awis/


Die Klasse wurde unter der BSD License gestellt und kann somit für private und kommerzielle Zwecke genutzt werden.



<?php

/**
 * Alexa_Api_Service (The SELFPHP Alexa_Api_Service PHP5 Class)
 * 
 * PHP5 Class for Alexa Web Information Service
 * Required: PHP 5 >= 5.1.2
 *
 * @package Alexa_Api_Service
 * @author Damir Enseleit
 * @copyright 2009, SELFPHP OHG
 * @license BSD License
 * @version 1.0.0
 * @link http://www.selfphp.de
 * 
 */

class Alexa_Api_Service {
    
    
/**
     * @var string Access Key ID
     */
    
private $accessKeyID    =    "";
    
    
/**
     * @var string Secret Access Key
     */
    
private $secretAccessKey    =    "";
    
    
/**
     * @var string Site URL
     */
    
private $siteUrl    =    "";
    
    
/**
     * @var string Last Error Message
     */
    
private $lastErrorMessage    =    "";
    
    
/**
     * @var string Setzt den Aktion-Parameter.
     * 
     * @link http://docs.amazonwebservices.com/AlexaWebInfoService/2005-07-11/
     */
    
private $action    =    "";
    
    
/**
     * @var string Setzt die Response Group
     * 
     * @link http://docs.amazonwebservices.com/AlexaWebInfoService/2005-07-11/
     */
    
private $responseGroup    =    "";
    
    
/**
     * @var string URL für den Alexa Webservice.
     */
    
private $serviceUrl    =    "http://awis.amazonaws.com?";
    
    
/**
     * @var string Speichert Signatur (Erstellt mit HMAC).
     */
    
private $storeHmac    =    "";
    
    
/**
     * @var string Speichert die Zeit
     */
    
private $storeTimestamp    =    "";
    
    
/**
     * @var string Speichert die abzufragende URL
     */
    
private $storeServiceUrl    =    "";
    
    
/**
     * @var string Speichert den XML-Output vom Webservice
     */
    
private $storeServiceXmlData    =    "";
    
    
/**
     * @var string Speichert den XML-Output vom Webservice
     * Folgende Parameter nicht ändern: 'aws:StatusCode', 'Code' oder 'Message' !!!
     * 
     * Der $tagsService arbeitet sehr gut mit ContactInfo z.B.
     * $tagsService mit TrafficData ist nicht möglich e.g.
     */
    
private $tagsService = array('aws:StatusCode','Code','Message');
    
    
private $storeServiceArrayData    =    array();
        
    
    
/**
     * Constructor 
     * 
     * @param    string    $accessKey    Access Key ID
     * 
     * @param    string    $secretKey    Secret Access Key
     * 
     * @param    array    $responseArray    Ein Array mit den Response Tags
     * 
     */
    
function __construct$accessKey NULL$secretKey NULL$responseArray NULL) {
        
        
$this->accessKeyID $accessKey;
        
$this->secretAccessKey $secretKey;
        
        
$this->setResponseArray$responseArray );
        
        
// Konvertiert alle Tags in Lower Case
        
for ( $x 0$x count$this->tagsService ); $x++ ){
            
$this->tagsService[$x] = strtolower$this->tagsService[$x] );
        }
    
    }
    
    
/**
     * Definiert die Request Parameter und Response Groups 
     * @link http://docs.amazonwebservices.com/AlexaWebInfoService/2005-07-11/
     * 
     * @param    string    $action    Setzt den Action Parameter
     * 
     * @param    string    $responseGroup    Setzt die Response Group
     * 
     */
    
public function setRequestMode$action$responseGroup) {
        
        if ( empty( 
$action ) || empty( $responseGroup ) ) {
            
$this->lastErrorMessage "Error-Message: Request Parameters or Response Groups is empty.";
            return 
false;
        }
        
        
$this->action $action;
        
$this->responseGroup $responseGroup;
        
        return 
true;
        
    }
    
    
private function setResponseArray$responseArray ) {
        
        if( 
count$responseArray ) > ) {
            for ( 
$x 0$x count$responseArray ); $x++ ) {
                
$this->tagsService[] = $responseArray[$x];
            }            
        }
        
    }
    
    
/**
     * Generiert die Signatur mit HMAC / SHA1  
     * 
     * @return    bool    true / false 
     */
    
private function generateHmac( ) {
        
        if ( empty( 
$this->action ) || empty( $this->secretAccessKey ) ) {
            
            
$this->lastErrorMessage 'Error-Message: Can\'t generate HMAC - Data or Key is empty.';
            return 
false;
            
        }
        
        
$data $this->action $this->storeTimestamp;
                
        
$this->storeHmac base64_encodehash_hmac'sha1'$data$this->secretAccessKeytrue ) );
        
        return 
true;
        
    }
    
    
/**
     * Zeit erstellen
     * Format: yyyy-MM-ddTHH:mm:ss.fffZ
     * Z.B. 2009-04-18T11:58:46.000Z 
     * 
     * @return    bool    true
     */
    
private function generateTimestamp() {
        
        
$this->storeTimestamp gmdate("Y-m-d\\TH:i:s.\\0\\0\\0\\Z"time());
        
        return 
true;
        
    }
    
    
/**
     * Baut die URL für die Abfrage auf
     * 
     * @return    bool    true
     */
    
private function generateurl() {
        
        
$url 'AWSAccessKeyId=' $this->accessKeyID
            
'&Action=' $this->action
            
'&ResponseGroup=' $this->responseGroup
            
'&Timestamp=' urlencode$this->storeTimestamp )
            . 
'&Signature=' urlencode$this->storeHmac )
            . 
'&Url=' urlencode$this->siteUrl );
            
        
$this->storeServiceUrl $this->serviceUrl $url;
        
        return 
true;
        
    }
    
    
/**
     * Beginnt die Abfrage und speichert das Ergenis als XML
     * 
     * @return    bool    true
     */
    
public function beginTransfer() {
        
        unset(
$this->storeServiceArrayData);
        
        
$this->generateTimestamp();
        
$this->generateHmac();
        
$this->generateurl();
        
        
$ch curl_init$this->storeServiceUrl );
        
curl_setopt$chCURLOPT_TIMEOUT);
        
curl_setopt$chCURLOPT_RETURNTRANSFER);
        
        
$result curl_exec$ch );
        
curl_close$ch );
        
        
$this->storeServiceXmlData $result;
        
        
$this->parseXml();
        
        return 
true;
        
    }
    
    
/**
     * Liefert den XML-Output vom Webservice
     * 
     * @return    string    XML-Output
     */
    
public function getXml() {
        return 
$this->storeServiceXmlData;
    }
    
    
/**
     * Liefert ein Array der abgefragten Daten
     * 
     * @return    string    XML-Output in einem Array
     */
    
public function getArray() {
        
        return 
$this->storeServiceArrayData;
        
    }
    
    
/**
     * Holt den XML-Output von einer gespeicherten Abfrage aus einer XML-Datei
     * 
     * @param    string    $path    Der Pfad zu der XML-Datei
     * 
     * @return    bool    true wenn Datei existiert, false falls nicht
     */
    
public function getStoredXmlData$path NULL ) {
        
        if ( 
file_exists$path ) ) {
            
            
$fp fopen $path'r' );
            
            
$this->storeServiceXmlData fread $fpfilesize $path ) );
            
            
fclose $fp );
            
            
$this->parseXml();
            
            return 
true;
            
        }
        
        return 
false;
        
    }
    
    
/**
     * Speichert den XML-Output in einer Datei
     * 
     * @param    string    $path    Der Pfad zu dem Verzeichnis ohne Slash am Ende
     * 
     * @return    string    Liefert den kompletten Pfad incl. Dateiname
     */
    
public function saveXml$path 'logs' ) {
        
        if( !
is_dir($path)){
            
mkdir ($path0755); 
        }
        
        
$url ereg_replace"\\.","-",$this->siteUrl );
        
        
$time gmdate("Y-m-d_H-i-s"time());
                
        
$file $path '/' $time '_' $url '.xml';
        
        
$fp fopen $file'w+' );
        
        
fwrite $fp$this->storeServiceXmlData );
        
        
fclose $fp );
        
        return 
$file;
        
    }
    
    
/**
     * Parst die abzurufende URL 
     * 
     * @param    string    $url    Die URL
     * 
     * @return    bool    true / false
     */
    
public function setUrl$url NULL ) {
        
        
$errno "";
        
$errstr "";
        
        
$url trim($url);
        
        if (!
preg_match("=://="$url)) {
            
$url "http://$url";
        }
        
        
$url parse_url($url);
        
        if (!isset(
$url["port"])) 
            
$url["port"] = 80;
            
        if (!isset(
$url["path"])) 
            
$url["path"] = "/";
            
        
$fp = @fsockopen($url["host"], $url["port"], $errno$errstr30);
        
        if(
$fp) {            
            
$this->siteUrl $url["host"];
            return 
true;
        }
        else {
            
$this->lastErrorMessage "Error-Message: $errstr (Error-Number: $errno)";
            return 
false;
        }
  
    }
    
    
    
private function tagStart $parser$tagName$attributes NULL ) {

        
$this->tag $tagName;

    }

    
private function tagEnd $parser$tagName ) {

        
$this->tag NULL;

    }

    
private function tagContent $parser$content )
    {

        
$content trim($content);
        
        if( 
in_arraystrtolower($this->tag), $this->tagsService ) )
            
$this->storeServiceArrayData[$this->tag] = $content;
            
    }
    
    
private function parseXml ()
    {

        
$parser xml_parser_create();

        
xml_set_object $parser$this );

        
xml_set_element_handler $parser'tagStart''tagEnd' );
        
xml_set_character_data_handler $parser'tagContent' );

        
xml_parse $parser$this->storeServiceXmlData );

    }
    
    
    
/**
     * 
     */
    
function __destruct() {
    
    }
}

?>



Anwendungsbeispiel

<?php

include_once ('Alexa_Api_Service.php');

// Access Key - Ersetzen durch eigenen Key
$accessKeyId 'AccessKey';

// Secret Access Key - Ersetzen durch eigenen Key
$secretAccessKey 'SecretAccessKey';

// Domain für Abfrage 
$site_url 'selfphp.de';

// Aktion setzen
$action 'UrlInfo';

// Response Group setzen
// RankByCountry wird nicht unterstützt
$responseGroup 'Rank,ContactInfo,LinksInCount';

// Response Array setzen
// Flags können aus der XML-Datei genommen werden
$responseArray = array('aws:PhoneNumber','aws:OwnerName','aws:Street','aws:City','aws:Country','aws:Rank');


$alexa = new Alexa_Api_Service$accessKeyId$secretAccessKey$responseArray );
$alexa -> setUrl$site_url );
$alexa -> setRequestMode $action$responseGroup );
$alexa -> beginTransfer();

// Ergebnis als XML
$getXml $alexa -> getXml();
echo 
$getXml;
echo 
'<br><br>';

// Ergebnis in einem Array
$getArray $alexa -> getArray();
print_r($getArray);
echo 
'<br><br>';

// Speichert das XML-Ergebnis in einer Datei. 
// Format ist: Date_Time_Domain.xml 
// Beispiel: 2009-04-18_16-56-13_selfphp-de.xml 
// saveXml('VerzeichnisPfad') 
// Der Pfad zum Verzeichnis ohne Slash am Ende. 
$the_xml_file_path $alexa -> saveXml('www-selfphp-de');
echo 
$the_xml_file_path;

?>



Anwendungsbeispiel

<?php

include_once ('Alexa_Api_Service.php');

$responseArray = array('aws:PhoneNumber','aws:OwnerName','aws:Street','aws:City','aws:Country','aws:Rank');

$alexa = new Alexa_Api_ServiceNULLNULL$responseArray );
$alexa -> getStoredXmlData"www-selfphp-de/2009-04-27_18-57-03_selfphp-de.xml" );

$xml $alexa -> getXml();

print_r$alexa -> getArray() );

?>






 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


DM Solutions
Microsoft Deutschland GmbH
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt