Wikipedia-Content abfragen

Wikipedia hat einen simplen aber effektiven Schutz, um sich vor Content-Diebstahl zu schützen: eine Abfrage ohne "User-Agent" erhält nur einen praktisch nichts-sagenden Fehler:

Failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

Anders ausgedrückt: wer mit dem Browser auf Wikipedia surft hat kein Problem, wer aber einen Grabber nutzt um Wikipedia-Content abzufragen kriegt keine Ergebnisse.

Nun ist es aber gerade kein Content-Diebstahl wenn man Wikipedia-Texte auf seiner Homepage zitiert, egal ob in Auszügen oder als Ganzes -- solange die Herkunft bzw. der Autor genannt wird. (Diesen Umstand wissen die meisten Wikipedia-Autoren aber selbst auch nicht.)

Um Wikipedia-Content trotzdem abzufragen nutze ich diese Python-Funktion:

# -*- coding: UTF-8 -*-

import urllib2

def get_wiki_page(keyword):

    headers = { 
        'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
        'Accept-Encoding': 'deflate',
        'Accept-Charset': 'utf-8',
        'Referer': 'http://de.wikipedia.org/wiki/Hauptseite',
    }

    url = 'http://de.wikipedia.org/wiki/%s' % keyword

    try:
        request = urllib2.Request(url, None, headers)
        response = urllib2.urlopen(request)
        content = response.read()
        response.close()

        return content

    except urllib2.HTTPError:
        print "HTTPError: %s" % url

print get_wiki_page("Urheberrecht")

In PHP würde diese Funktion etwa so aussehen. Hier mit Hilfe der Curl-Funktionen.

<?php
function get_wiki_page($keyword)
{
    $url = 'http://de.wikipedia.org/wiki/'.$keyword;

    $ch = curl_init();

    $options = array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => True,
        CURLOPT_HEADER => False,
        CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3',
        CURLOPT_ENCODING => 'deflate',
        CURLOPT_REFERER => 'http://de.wikipedia.org/wiki/Hauptseite',
    );

    curl_setopt_array($ch, $options);

    $response = curl_exec($ch);

    curl_close($ch);
    return $response;
}

echo get_wiki_page("Urheberrecht");
?>