Post von realloc | Einsortiert in Code
am 16. Oktober 2008 | 19 Kommentare
Wer sich fragt, wie man die Anzahl der Backlinks (inlinkData) und der indexierten Seiten (pageData) bei Yahoo mit einem Script holen kann, darf sich über die hier beschriebene Lösung freuen. Man muss sich glücklicherweise bei Yahoo schon lange nicht mehr damit plagen, die Seite zu holen, zu parsen und dann zu warten bis Yahoo mal wieder leichte Änderungen am Design macht, die das einmal funktionierende Script zusammenbrechen lassen. Mit der API von Yahoo und der SimpleXML-Extension von PHP wird das ganze zum Kinderspiel.
Zuerst muss man sich einen API-Key bei Yahoo besorgen. Dann muss das YOUR_API_KEY_HERE in der Anweisung define (‘YAHOO_KEY’, ‘YOUR_API_KEY_HERE’); durch diesen Schlüssel ersetzt werden. Und danach kann’s auch schon losgehen:
<?php
define ('YAHOO_KEY', 'YOUR_API_KEY_HERE');
function getPage
($url) {
if (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER
, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER
, true);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION
, true);
curl_setopt($ch, CURLOPT_USERAGENT
, $_SERVER['HTTP_USER_AGENT']);
$retval = curl_exec($ch);
curl_close ($ch);
return $retval;
}
return file_get_contents($url);
}
class YahooSearch
{
function get
() {
$xml = getPage
($this->url);
$data = simplexml_load_string ($xml);
return isset ($data['totalResultsAvailable']) ?
(int
) $data['totalResultsAvailable'] : 0;
}
}
class YahooSearchPage
extends YahooSearch
{
function __construct
($domain) {
$this->url =
"http://search.yahooapis.com/SiteExplorerService/V1/pageData?appid=" .
YAHOO_KEY
.
"&query=http://" .
$domain .
"&results=0";
}
}
class YahooSearchInlink
extends YahooSearch
{
function __construct
($domain) {
$this->url =
"http://search.yahooapis.com/SiteExplorerService/V1/inlinkData?appid=" .
YAHOO_KEY
.
"&query=http://" .
$domain .
"&results=0";
}
}
$y = new YahooSearchPage
('www.bowling-liga.de');
echo $y->get ();
$y = new YahooSearchInlink
('lloc.de');
echo $y->get ();
?>
In den letzten Zeilen sind dann die Namen der eigenen Domains zu einzuetzen.
Noch ein wichtiger Hinweis: Da auf die Ausgabe des Codes oft kein Verlass ist, weil der Editor zum Beispiel einfache Anführungszeichen und das kaufmännische Und eigenmächtig ändert, gibt es hier auch den Quelltext.
Have fun!
Möglicherweise interessiert Dich auch...
Hi,
bei mir kommt diese Fehlermeldung:
Fatal error: Call to undefined function: simplexml_load_string() in /srv/www/htdocs/………../yahoo.php on line 22
HILFE!!!
Das sollte mit PHP5 funktionieren … welche Version ist installiert?
Hallo Dennis,
Danke für das Script, funktioniert soweit sehr gut. Ich habe gelesen, dass der Service von Yahoo auf 5.000 Anfragen pro IP an einem Tag begrenzt ist. Ich habe knapp 600 Abfragen über ein Tool gemacht und ab der Nummer 101 gibt Yahoo keine Werte mehr aus. Weisst Du, ob es irgendwelche weiteren Beschränkungen gibt? Die 5.000 habe ich ja bei weitem noch nicht erreicht ….
Danke im Voraus!
Frank-Andre Thies
Der Yahoo-Service ist bei mir leider auch immer der erste, der nicht mehr antwortet. Schade …
Ich habe jetzt nach jeweils 25 Abfragen eine 30-Sekunden-Pause eingefügt und damit scheint die Sperre bei der Yahoo-API nicht mehr zu greifen!
Vielen Dank für den Code.
Hallo,
ich bekomme als Ausgabe immer eine 00.
Hat jemand eine Idee?
Grüße Frank
Ja, vielleicht … hast Du den genauen Endpunkt angegeben? Ich habe in letzter Zeit keine Probleme mehr, weil ich – als ich den API-Key angefordert habe – den kompletten Pfad eingegeben habe.
Also nicht nur http://www.entdeckt.org/, sondern http://www.entdeckt.org/linkcheck.php
Hallo Dennis,
ich vermute es liegt tatsächlich am API-Key.
Was muss ich den angeben:
Generic, No user authentication required
oder
Browser Based Authentication
und ggf. bei BBAuth Success URL.
Vielen Dank!
Funktioniert leider nicht…
Wenn ich die Abfragen manuell aufrufe, kommt folgender Fehler:
The following errors were detected:
invalid value: query
?
Ich hab’ nur Generic IDs erstellen lassen …
An sich sollten die Klassen einen URL zusammenbauen, der dem Beispiel der Yahoo! Search Web Services entspricht. Was übergibst Du an den Konstruktor? Ich hab in den Klassen für Yahoo schon das http:// mit drin, weil ich die Domains bei anderen APIs oft ohne angeben muss.
Also – wie in meinem Beispiel oben – muss man
$y = new YahooSearchInlink (‘www.ploetner.it’);
echo $y->get ();
notieren.
Zum Beispiel liefert folgende URL den Fehler invalid value: query
http://search.yahooapis.com/SiteExplorerService/V1/inlinkData?appid=MEINE_API&query=http://www.bowling-liga.de&results=0
Über den Link erhältst Du ein Ergebnis … schau dir mal die maskierten & an. Da liegt das Problem!
Jetzt klappt es. Ich glaube, da war in mehreren Stellen der Wurm drin.
Vielen Dank für Deine Hilfe und Geduld!
Bitte sehr! Viel Spass beim “yahoobacklinkchecken” …
Ich habe das 00 Problem gehabt und mir es im Debug Mode angeschaut.
Wenn der Code nicht in einer HTML Umgebung ist wird das Sonderzeichen & nicht ersetzt und deshalb kommt es zum Fehler.
Ich habe folgende Zeile noch ergänzt und für mein Anliegen reicht es.
$this->url = str_replace(“&”,”&”, $this->url);
Ja, wie schon oben passiert … anscheinend funktioniert es dann nach dem Kopieren des Codes von dieser Seite schon nicht mehr. Ich muss wohl mal über ein neues Plugin für die Codes nachdenken. Der Editor von WordPress tut scheinbar auch zu viel des Guten.