Das so genannte »Recht auf Vergessen«

Wer den Hintergrund nicht versteht, lese bitte erstmal bei Heise Online weiter und folge im Zweifelsfall den dort gesetzten Links!

Das folgende, recht einfache Python3-Skript erzeugt eine Liste aller URLs, die in den ersten 500 Suchergebnissen bei google (punkt) com gefunden werden, hingegen nicht in den ersten 500 Suchergebnissen bei google (punkt) de erscheinen:

#!/usr/bin/env python3

RESULTS = 500

import sys
import urllib.parse
import urllib.request
import html.parser


class LinkExtractor(html.parser.HTMLParser):
    def __init__(self, htmldoc):
        super().__init__()
        self.links = []
        self.feed(htmldoc)

    def handle_starttag(self, tag, attrs):
        if tag == 'a':
            for attr, content in attrs:
                if attr == 'href':
                    self.links.append(content)


class BaseSearchResult(object):
    def __init__(self, search_term):
        super().__init__()
        self.result_links = []
        for uri in self.perform_search(search_term):
            if self.filter_link(uri) and uri not in self.result_links:
                self.result_links.append(uri)
        self.result_links = self.postprocess_links(self.result_links)
        self.result_links.sort()

    def filter_link(self, uri):
        return True
    
    def perform_search(self, search_term):
        raise NotImplemented()

    def postprocess_links(self, linklist):
        return linklist
    
    def get_links_from_uri(self, uri):
        req = urllib.request.Request(uri)
        req.add_header('User-agent', 'Mozilla/5.0')
        httpdocument = urllib.request.urlopen(req)
        link_extractor = LinkExtractor(httpdocument.read().decode('utf-8'))
        return link_extractor.links


class GoogleCommon(BaseSearchResult):
    def common_search_part(self, domain, search_term):
        params = urllib.parse.urlencode({'q': search_term, 'num': RESULTS})
        uri = 'http://{}/search?{}'.format(domain, params)
        return self.get_links_from_uri(uri)
    
    def postprocess_links(self, linklist):
        newlist = []
        for link in linklist:
            parse_res = urllib.parse.urlparse(link)
            params = urllib.parse.parse_qs(parse_res.query)
            # That funny // is a dirty hack to get only full URIs.
            # Skripting google is really a pain in the ass.
            if 'q' in params and '//' in params['q'][0]:
                newlist.append(params['q'][0])
        return newlist
    

class GoogleDe(GoogleCommon):
    def perform_search(self, search_term):
        return self.common_search_part('www.google.de', search_term)

    def filter_link(self, uri):
        return ('google.de' not in uri and
                'google.com' not in uri and
                'googleusercontent' not in uri and
                not uri.startswith('/search'))


class GoogleCom(GoogleCommon):
    def perform_search(self, search_term):
        return self.common_search_part('www.google.com', search_term)

    def filter_link(self, uri):
        return ('google.com' not in uri and
                'googleusercontent' not in uri and
                not uri.startswith('/search'))


def not_found_in_google_de(term, engines=(GoogleCom, )):
    not_found = []
    google_de = GoogleDe(term)
    for engine in engines:
        other_engine = engine(term)
        for uri in other_engine.result_links:
            if uri not in google_de.result_links and uri not in not_found:
                not_found.append(uri)
    not_found.sort()
    return not_found


def main():
    search = '+'.join([urllib.parse.quote(i.lower()) for i in sys.argv[1:]])
    for i in not_found_in_google_de(search):
        print(i)


if __name__ == '__main__':
    main()

Einige (mindestens zwölftausend) Leute werden leider in den nächsten Monaten auf die harte Art lernen müssen, was der Unterschied zwischen dem Verstecken eines Verweises auf einer außerordentlich beliebten Website und dem Entfernen von Inhalten aus dem Internet ist – denn vergleichbare Hilfsmittel wie dieses (übrigens leicht durch Hinzufügen weiterer Suchmaschinen ausbaufähige und von mir eher nebenbei gehackte) Skriptchen wird in Kürze jeder Qualitätsjornalist mit menschenverachtendem Boulevard-Hintergrund, jeder Personalchef und jedes andere Arschloch von Mitmensch haben und bei sich bietenden Anlässen eifrig benutzen – und sich dabei völlig im Klaren darüber sein, welche Bewandtnis es mit Inhalten hat, die im Rechtsraum der EU von der Google-Suchmaschine versteckt werden. Vielleicht sogar als bequemes Browser-Addon mit wesentlich verbesserter Aufbereitung des Vergleiches. Und natürlich werden auch politisch engagierte Menschen derartige Hilfsmittel benutzen, denn es ist davon auszugehen, dass es gerade die Gestalten aus der classe politique sind, denen es missfällt, dass ihre vergangenen Taten und Äußerungen mit Leichtigkeit aufgefunden werden können – zum Beispiel solche Gestalten wie Frau Dr. Annette Schavan, die jetzt gut von Außenministeriums Gnaden unter Angela Merkels Weisung als Botschafterin der Bundesrepublik Deutschland bei den größeren Lügnern im Vatikanstaat alimentiert ist. Ach, wenn diese Hölle, mit der die Herrschenden und ihre gottlosen Komplizen in der Kirche jahrhunderlang die Menschen eingeschüchtert haben, doch nur brennte!

Auch, wenn es den Gartenzwerg-Privatsphäre-Gläubigen mit ihrem stammtischdeutschen Stolz auf das »Fassadenverpixelungsrecht« bei Google Street View nicht gefällt: Die Zensur durch einfaches Unsichtbar-Machen auf bestimmten Web-Plattformen ist wirkungslos. Selbst, wenn etwas auf Google unsichtbar gemacht wird. Nein, sie ist nicht nur ein bisschen wirkungslos, sondern völlig wirkungslos. Egal, ob es sich um Zensursulas Stoppschilder oder um die europagerichtshöfige Idiotie einer Linkentfernung ohne die Entfernung der Inhalte handelt. Gar nicht so wirkungslos ist allerdings, dass jetzt eine Art Zensurrecht für beleidigte Leberwürste und für Zeitgenossen, die etwas an der Sichtbarkeit ihrer Vergangenheit ändern wollen, eingeführt wurde – denn dieses Zensurrecht, das ist gewiss, es wird in den kommenden Jahren bis zu chinesischen Verhältnissen ausgebaut werden. Zum Schaden aller Menschen, die das Internet nutzen wollen, um zu recherchieren und informierte Entscheidungen auf der Grundlage von Fakten zu treffen. Wahlentscheidungen zum Beispiel. Oder auch Kaufentscheidungen. Oder die zuweilen sehr wichtige Entscheidung, bei welchem Arzt sie mit welcher Methodik ihre Krankheiten behandeln lassen wollen – denn den ganzen Quacksalbern kann es gar nicht recht sein, dass es frei verfügbare Informationen zu ihren Machenschaften gibt.

Katzenbilder und lustige Videos sind nur ein sehr dürftiger Ersatz für das eigentliche Potenzial des Internet.

Ach ja, hier ist das Skriptchen zum freien Download, lizenziert unter den Bedingungen der Piratenlizenz. Share and enjoy, but don’t sue me! Meinen Rant zur Heisemeldung gibt es bei Schwerdtfegr (beta)

Dieser Beitrag wurde unter Technisches abgelegt und mit , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Antworten zu Das so genannte »Recht auf Vergessen«

  1. Bio sagt:

    Ich hab gerade mal versucht aus Deinem Script ne Windows Anwendung mit IronPython zu basteln. Leider ist das IronPython (noch) nicht mit Python 3 kompatibel. Ich bin mit Python überhaupt nicht vertraut um das nun komplett umzubasteln und um den aktuellen Stand von IronPython 3 zu benutzen bin ich im Moment einfach zu doof.
    Wird also nix damit, das würde vermutlich Wochen dauern mich da einzuarbeiten und das ist es mir nicht wert, auch nicht das in ner anderen Sprache zu proggen. Das sollen ruhig die Stalkerdeppen machen.

  2. Bio sagt:

    Axo. G00gel geht natürlich auch immer (noch) mit .com ohne redirect z.B. so:
    https://www.google.com/search?hl=en&q=Annette+Schavan+Plagiat
    Hier gibts das für die FF search box:
    https://addons.mozilla.org/de/firefox/addon/always-com-googlecom-in-englis/
    Und.
    DuckDuckGo geht auch ohne JavaScript, z.B. so 😉
    https://duckduckgo.com/html?q=Annette+Schavan+Plagiat

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert