Blog der Heimetli Software AG

Den Alexa-Rank per Programm abfragen

Bei der Suche nach XML-APIs bin ich auf ein URL dieser Art gestossen:

http://data.alexa.com/data?cli=10&url=heimetli.ch

Das habe ich sofort probiert und bekam als Antwort:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Need more Alexa data?  Find our APIs here: https://aws.amazon.com/alexa/ -->
<ALEXA VER="0.9" URL="heimetli.ch/" HOME="0" AID="=" IDN="heimetli.ch/">
<SD>
<POPULARITY URL="heimetli.ch/" TEXT="1767062" SOURCE="panel"/>
<REACH RANK="1455360"/>
<RANK DELTA="-1023744"/>
</SD>
</ALEXA>

Die herausgehobene Zahl ist der Alexa-Rank meiner Site. Ich habe länger auf der angegebenen Site herumgesucht, aber keine genaueren Angaben zu diesem API gefunden.

Weil es bisher bei jedem Test zuverlässig funktioniert hat, schrieb ich ein Programm dazu, auch wenn ich mir nicht sicher bin dass diese Funktion zu einem offiziellen API gehört.

Ein Java-Programm zur Abfrage des Ranks

Wie im Beispiel gut zu erkennen ist, kann der Rank einfach abgefragt werden: ein HTTP GET mit dieser URL absetzen, auf das Element POPULARITY warten, und dort den Inhalt vom Attribut TEXT abfragen.

Weil die Aufgabe so einfach ist, kann sie elegant mit einem SAX-Parser erledigt werden. Der Parser kann praktischerweise gleich ein XML Dokument direkt von einem Webserver lesen, so dass wirklich nicht viel zu tun ist.

Aus dem folgenden Code habe ich die Kommentare gelöscht, um ihn kürzer zu machen. Den vollständigen Code mit Javadoc-Kommentaren können Sie herunterladen.

import javax.xml.parsers.* ;
import org.xml.sax.* ;
import org.xml.sax.helpers.* ;

public class AlexaRank extends DefaultHandler
{
   public void startElement( String namespaceURI, String localName, String qName, Attributes atts ) throws SAXException
   {
      if( "POPULARITY".equals(localName) )
      {
          System.out.println( atts.getValue("TEXT") ) ;
      }
   }

   public static void main( String[] args ) throws Exception
   {
      if( args.length == 1 )
      {
         SAXParserFactory spf = SAXParserFactory.newInstance() ;
         spf.setNamespaceAware( true ) ;
         SAXParser saxParser = spf.newSAXParser() ;
         saxParser.parse( "http://data.alexa.com/data?cli=10&url=" + args[0], new AlexaRank() ) ;
      }
   }
}

Die main-Methode übernimmt die Domain von der Kommandozeile und instanziert den Parser. Dann baut sie das URL zusammen und lässt den Parser damit arbeiten.

Um den Rank zu lesen, braucht es nur einen einzigen Callback des Parsers: startElement. Wenn die Methode aufgerufen wird, prüft sie den Namen des Elements. Ist es POPULARITY, dann gibt sie den Wert des Attributs TEXT aus.

Ein einfacheres Beispiel für eine nutzbare Anwendung des SAX-Parsers ist wohl nicht möglich ;-)

Hier können Sie den vollständigen Sourcecode von AlexaRank herunterladen.