Rechtsradikale und Nazi-Accounts auf Twitter blocken leicht gemacht

Wer sich eine Weile auf Twitter umtut, wird irgendwann bemerken, dass es eine ganze Menge Accounts gibt, die dem einzigen Zweck zu dienen scheinen, rechtsradikale Hetzparolen und Sifftwitter-Shitstorms zu verbreiten. Die Frage ist, wie man mit denen umgeht. Eine Möglichkeit wäre (was auch oft vorgeschlagen wird), dagegen zu halten und zu schreiben, wie man selbst die Welt sieht. Ich halte das für einen sehr optimistischen Ansatz, denn diese Leute sind teilweise so tief in ihren rechtsradikalen Wahnwelten unterwegs, dass Kritik sie nicht erreicht und sie einen bestenfalls einfach kommentarlos blocken. Kann aber auch sein, dass man tagelang mit Shitstorms zu kämpfen hat.

Die weniger optimistische, wenn auch irgendwo resignierte Weise des Umgangs wäre, diese Accounts zu blocken – nicht damit man sie nicht mehr sieht im Sinne von wegschauen, sondern schlicht um deren Reichweite zu reduzieren. Man muss sich dabei nichts vormachen – in ihren Filterblasen werden diese Leute genau so weiter hetzen wie vorher. Aber man kann als Einzelner kaum die Welt retten.

Nun machen sich einige Twitterer bereits die Arbeit, nahezu Tag und Nacht durch den ganzen ekelhaften brauchen Sumpf zu waten und Accounts zu sperren, bzw diese öffentlich zu machen. Als Beispiel sei hier @Tigerelch genannt, der mehrmals am Tag mit dem Hashtag #wegdamit immer so 5-8 Accounts zum Blocken anbietet. Diese Tweets sehen beispielsweise so aus. [ Update: Man muss, um die unten gezeigten Mimiken benutzen zu können, natürlich @Tigerelch folgen. ]

Jetzt kann man das natürlich in Twitter direkt und manuell machen, aber a) verpasst man dann möglicherweise einen großen Teil und muss dann mühsam nachkarten, und b) habe ich irgendwas mit Computern zu tun und bin ein fauler Hund. Also automatisieren. Ich habe das nun auf drei Wegen gemacht, die ich wechselweise im Probebetrieb am Laufen habe. Wer nun rein aus dem Windows-Umfeld kommt, kann sich wieder hinlegen – das funktioniert so alles nur auf Linux oder Unix (wobei ein Raspberry Pi mit Raspbian dafür schon reichen würde). Alle drei Varianten setzen twidge als Twitter-Kommandozeilenclient voraus.

Weg Nr. 1: Per E-Mail

[ Update: Das war der erste Gehversuch einer Automatisierung. Tatsächlich ist es eher eine Halbautomatisierung, denn es ist eine manuelle Aktion nötig. Immerhin aber nur eine und nicht deren 6 oder 8. Die Lösung ist überholt zugunsten von Nr. 2. ]

Dieser Web setzt einen eigenen Unix-Mailserver voraus, auf dem es auch Procmail gibt. Procmail wird so konfiguriert, dass er an Hand einiger Regeln bestimmte ankommende Mails erkennt und automatisiert verarbeitet. Der Regelsatz könnte einfacher nicht sein:

# pipe all mail from myself concerning Twitter blocks into twitblock.sh

:0 : twitblock.lock
* ^From:.*meine@email-adresse.de
* ^Subject:.*Tweet.*von.*digitaler.*Gutmensch
| twitblock.sh

Die erste Regel (die mit einem Stern beginnt) prüft, dass die Mail von mir selbst kommt – hier muss man seine eigene Adresse einsetzen. Die zweite Regel untersucht das Subject der Mail – das wird vom Mailclient (in meinem Fall K-9) automatisch eingesetzt.

twitblock.sh ist nun ein Shellskript, dass die Mail auf der Standardeingabe entgegen nimmt und auswertet:

#!/bin/sh

TEMP=$(mktemp $HOME/tmp/XXXXXX)
LOG="$HOME/tmp/twitblock.log"

date >> $LOG

grep ^https://t=2Eco/ | \
sed 's/=2E/./' | \
while read URL ; do
  USER=$(wget -q -O - $URL | sed -n 's/.*content="Die neuesten Tweets von .* (\(@[^)]*\)).*/\1/p')
  echo twidge block "$USER" >> $LOG
  twidge block "$USER" >> $LOG 2>&1
  if [ $? -gt 0 ] ; then
    sleep 2
    twidge block "$USER" >> $LOG 2>&1
  fi
  if [ $? -gt 0 ] ; then
    sleep 2
    twidge block "$USER" >> $LOG 2>&1
  fi
done

Im Wesentlichen liest hier der grep direkt von der Standardeingabe und sucht die Zeilen mit dem Twitter-URL-Verkürzer https://t.co/blafasel. Die MIME-Sonderzeichen (=2E ist ein Punkt) wandelt der erste sed um, und dann wird ein Link nach dem anderen mittels wget geholt und der eigentliche Benutzername gesucht. Letzteres macht der zweite sed mit dem regulären Ausdruck. Dann noch etwas Logging und der eigentliche Block mittels twidge. Leider bietet der twidge keine Option fürs Melden — wer also melden will, muss das nach wie vor von Hand tun.

Die Fehlerbehandlung am Ende ist dem Umstand geschuldet, dass curl, das von twidge intern benutzt wird, gelegentlich auf die Nase fällt mit Fehlermeldungen wie:

twidge: user error (Failure performing the request. [reason=CurlRecvError])

Egal, einfach nochmal versuchen, das stört nicht.

So, und jetzt brauche ich im Androiden-Twitter nur noch einen Tweet mir selber per Mail schicken. Rechts neben dem Tweet den kleinen Pfeil antippen, „Tweet teilen via“, Mailprogramm auswählen, und fertig. Nach wenigen Sekunden sind die aufgelisteten Accounts blockiert.

Etwas Vorsicht ist geboten: Da die Mailschnittstelle prinzipiell öffentlich ist, ist sie gegen Missbrauch nicht besonders gut geschützt. Beispielsweise könnten gewisse Kreise darauf kommen, die Schnittstelle zu nutzen, um einem Blocks unterzuschieben.  Wenn einem dass suspekt ist, kann man ggf. eine völlig obskure Mailadresse benutzen, die nirgendwo öffentlich bekannt ist, beispielsweise cbf08addffd99938d84afa28cdf1931d@mailserver.de. Das ist auch nicht 100% dicht, aber schon viel besser.

Weg Nr. 2: Zeitgesteuert per Skript

Eleganter ist natürlich die vollständige Automatisierung per Skript, das zeitgesteuert (z.B. einmal die Stunde) aufgerufen wird und die Timeline durchforstet nach passenden Tweets. Gegenüber der Maillösung hat das den Vorteil, dass es ohne jeden Benutzereingriff funktioniert und vergleichen mit der Mailschnittstelle nicht ohne weiteres zu hacken ist.

Dazu habe ich in meiner crontab folgenden Eintrag:

3 * * * * /usr/bin/twidge lsrecent -asu -e $HOME/bin/twidge-exec.sh

Twidge ist nämlich in der Lage, mittels lsrecent immer nur die letzten 20 Einträge zu holen, mit dem Schalter -a beliebig viele und mit -su nur die seit dem letzten Aufruf. -e schließlich übergibt einem externen Programm vier Optionen auf der Kommandozeile, unter anderem die Tweet-ID und den Benutzernamen des Twitterers. Und die werten wir in dem Skript twidge-exec.sh aus:

#!/bin/sh

# twidge command line options
# 1. update ID -> fetch with wget 
# 2. username 
# 3. suggested message-ID for mails
# 4. update text itself (complete?)

LOG="$HOME/tmp/twitblock.log"
mkdir -p ~/tmp/twidge-exec
cd ~/tmp/twidge-exec

# prüfen ob von Tigerelch, wenn nicht: beenden. 
if [ "$2" = "Tigerelch" ] ; then
  echo >> $LOG
  date >> $LOG
  # holen mit wget 
  echo "getting https://twitter.com/Tigerelch/status/$1" >> $LOG
  wget -q "https://twitter.com/Tigerelch/status/$1"

  # prüfen ob #wegdamit, wenn nicht, beenden. 
  egrep -q " content=.*#wegdamit" "$1" || exit 0

  # ok, seems legit. pick user names. 
  # then, iterate and report / block them
  sed -n 's#.*data-expanded-url="https://twitter.com/\(.*\)" class=.*#\1#p'< "$1" | \
  sed 's/".*$//' | \
  while read USER ; do
    echo twidge block "@$USER" >> $LOG
    twidge block "@$USER" >> $LOG 2>&1
    # repeat if unsuccessful
    if [ $? -gt 0 ] ; then
      sleep 2
      twidge block "@$USER" >> $LOG 2>&1
    fi
    # repeat if unsuccessful
    if [ $? -gt 0 ] ; then
      sleep 2
      twidge block "@$USER" >> $LOG 2>&1
    fi
  done

  # clean up 
  rm -f "$1"

fi

exit 0

Das Skript prüft zunächst, ob ein Tweet überhaupt von dem bewussten User kommt und tut ansonsten nichts. Wenn ja, prüft es noch, ob es sich um einen #wegdamit-Tweet handelt. Wenn ja, extrahiert es direkt aus dem rohen HTML die Links auf die zu blockenden Benutzeraccounts und blockt diese dann mittels twidge wie oben.

Diese Erkennung funktioniert nicht zu 100%, da @Tigerelch manche nicht-Blocker-Tweets auch mit #wegdamit kennzeichnet, aber bislang habe ich keine false positives gesehen.

Ja und dann tropft das Ding Stunde um Stunde dahin und blockt fleißig, was herein kommt.

Weg Nr. 3: per direktem Kommandozeilenaufruf

Nur um der Chronistenpflicht zu genügen und weil es so einfach ist, wollte ich noch einen direkten Aufruf per Kommandozeile auf meinem Linux-Desktop (Skript twidge-block.sh). Das Skript macht es sich einfach und extrahiert aus dem Aufruf

~$ twidge-block.sh https://twitter.com/Tigerelch/status/951052219662692352

den Namen des Twitterers und die Tweet-ID, und ruft dann das in o.g. Nr. 2 gezeigte Skript auf.

#!/bin/sh

# https://twitter.com/Tigerelch/status/951052219662692352

UPDATEID=$(basename "$1")
USER=$(basename $(dirname $(dirname "$1")))

$HOME/bin/twidge-exec.sh $UPDATEID $USER 1 tata

Den Link zum Tweet bekommt man in der Weboberfläche durch Klick auf den kleinen Pfeil rechts, dann „Link zum Tweet kopieren“. Auf der Kommandozeile einfügen, fertig.

 

Abschließend noch die Überlegung, dass das schickste natürlich eine Art zentraler Datenbank mit allen zu sperrenden Accounts wäre. Im Prinzip täte es auch eine per Webserver abrufbare Textdatei (ja OK, ich bin da old-school). Alternativ könnte man die Export-Import-Schnittstelle von Twitter selbst nutzen, die wohl schon geahnt haben, dass das mal ganz nützlich sein könnte. Die muss man mit einer CSV-Datei füttern. Ideas welcome!

Advertisements

Einige Fragen an die „Deutsche Reichsdruckerei“ des Erhard Lorenz

Nachdem die Augsburger Allgemeine heute einen kleinen Beitrag über Erhard Lorenz‘ „Deutsche Reichsdruckerei“ gebracht hat, dachte ich mir, den Herrn Lorenz könnte man mal ein bißchen trollen. Ich habe ihm folgende E-Mail geschickt und harre gespannt der Antwort.

Sehr verehrter Herr Lorenz,

Bei der Lektüre Ihrer Heimatseiten bin ich auf einige Ungereimtheiten gestoßen, die ich auf meine Unwissenheit zurückzuführen bereit wäre. Vielleicht können Sie ein wenig Licht ins Dunkel bringen.

Auf der Seite „Völkerrechtliche Legitimation“ beziehen Sie sich auf die Militärregierung. Daraus würde ich schließen, dass Sie nach wie vor davon ausgehen, dass Deutschland von den Alliierten besetzt ist, denn sonst gäbe es ja keine Militärregierung. Wenn das so ist, kommt auch die Haager Landkriegsordnung zur Anwendung, damit auch Artikel 16 derselben, der den Versand der Kriegsgefangenenpost regelt. Da steht: „Briefe, Postanweisungen, Geldsendungen und Postpakete, die für die Kriegsgefangenen bestimmt sind oder von ihnen abgesandt werden, sind sowohl im Lande der Aufgabe, als auch im Bestimmungsland und in den Zwischenländern von allen Postgebühren befreit.“ Warum lehnen Sie dann Kriegsgefangenenpost ab, und wo kommen bei Ihnen die 2, 4 oder 6 Cent her?

Als Gerichtsstand legen Sie in den AGB Ziffer 10 den „Sitz der Deutschen Reichsdruckerei“ fest, mithin also das Amtsgericht Neuss. Wenn aber die Bundesrepublik Deutschland nicht existiert, welche Legitimation hat dann Ihrer Meinung nach das Amtsgericht Neuss?

In Ihren AGB Ziffer 9 beziehen Sie sich auf das Datenschutzgesetz? Welches Datenschutzgesetz meinen Sie? Soweit ich weiß, gab es im Deutschen Reich kein Datenschutzgesetz, und das der Bundesrepublik Deutschland dürfte nach Ihrer Definition ja gar keine Geltung besitzen. Wenn Sie das Bundesdatenschutzgesetz (BDSG) meinen, haben Sie mit Ihrem Rechenzentrumsprovider 3W-SERVICE Internet Solutions einen Auftrag zur Datenverarbeitung (ADV) gemäß §11 BDSG abgeschlossen? Wo kann ich diese einsehen? Wie gestalten Sie den Übergang auf die ab Mai 2018 geltende und umzusetzende EU-Datenschutzverordnung?

Inhalt und Form von AGB legen in Deutschland die §§305-310 BGB fest. Beziehen Sie sich darauf oder auf eine ältere Fassung von vor 1918? Wo kann man die einsehen, und vor welchem Gericht findet diese Anwendung?

Auf der Seite zur Reichs-Fahrerlaubnis erwähnen Sie die StVZO, namentlich den §2. Den gibt es aber gar nicht (mehr); die §§ 1 bis 15l wurden mit Wirkung vom 18. August 1998 (BGBl. I S. 2214, 2294; VkBl.1998 S. 982) aufgehoben. Ansonsten gab es die StVZO unter dem Namen „Verordnung über die Zulassung von Personen und Fahrzeugen zum Straßenverkehr“ ohnehin erst seit 1937. Worauf beziehen Sie sich also? In welcher Fassung findet sich der von Ihnen in §2 zitierte Satz „Gilt nicht für die Bundesrepublik Deutschland“? Ohnehin – warum würde ein Land ein Gesetz erlassen, das dann explizit nicht für dieses Land gelten sollte?

Warum brauche ich einen BRD-Führerschein, wenn Sie mir doch eine Reichs-Fahrerlaubnis erteilen? Außerdem: Wenn Sie mir eine Reichs-Fahrerlaubnis erteilen, stellen Sie mir dann auch einen Reichs-Führerschein aus? Den finde ich auf Ihrer Heimatseite nicht.

Noch eine Frage zu Ihren Telefonnummern. Ihre Mobilfunknummer ist im Netz der Deutschen Telekom gemeldet. Die Deutsche Telekom befindet sich als ehemaliges Staatsunternehmen immer noch zu knapp 32% im direkten oder indirekten Besitz des Bundes. Haben Sie damit nicht einen konkludenten Vertrag mit der Bundesrepublik Deutschland abgeschlossen?

Abschließend zum Versand. Wo kann ich die Versandgebühren einsehen? Wenn Sie ins Gebiet des Deutschen Reiches versenden, dann ja sicherlich auch in die Provinz Ostpreußen nach Königsberg, das sich derzeit bedauerlicherweise unter dem Namen Kaliningrad unter russischer Verwaltung befindet. Was kostet ein Versand dorthin?

Sind Ihre Lieferungen übrigens frei von der bundesrepublikanischen Mehrwertsteuer?

Sie sehen, verehrter Herr Lorenz, ich habe es mir nicht leicht gemacht.

Hochachtungsvoll auf baldige Antwort hoffend,
N.N.

Ich bin gespannt, ob er sich angesichts der kognitiven Dissonanz zu einer Antwort durchringen wird.

[ Update 25.10.2016 14:54 ]

Es gibt Antwort:

bildschirmfoto-vom-2016-10-25-145303

Hmmm. Jetzt hat er keine meiner wichtigen Fragen beantwortet. Das finde ich schade, wenn auch nicht überraschend. Ich frage mich allerdings, wie er den Nebensatz „denn es ist nicht möglich etwas zu wiederlegen was nicht ist.“ meint. Gibt er damit nicht zu, dass das alles Kokolores ist?

Darauf musste ich folgendes antworten:

 

Lieber Herr Lorenz,

jetzt haben Sie meine Fragen leider nicht beantwortet. Das trägt nicht zur Auflösung der vermeintlichen Widersprüche und auch nicht zur Vertrauensbildung bei, völlig unabhängig von der Motivation, die Sie mir unterstellen. Wenn Sie mich dazu auffordern, das Thema richtig zu erforschen, dann tue ich das hiermit und wiederhole meine Fragen, um deren Beantwortung ich Sie höflich bitte. Wenn Sie das nicht möchten, ist auch das eine Art Antwort, und dann muss ich davon ausgehen, dass Sie Ihre Angaben auf der Heimatseite als widersprüchlich und unvollständig akzeptieren und stehen lassen möchten.

Bezogen auf meine Frage nach der Mehrwertsteuer nehme ich Ihren Satz „denn es ist nicht möglich etwas zu wiederlegen was nicht ist“ mal als Antwort in dem Sinne, dass Sie keine Umsatzsteuer auf Ihre Produkte und Dienstleistungen abführen.

Mit freundlichen und ganz und gar nicht staatenlosen Grüßen (denn ich kann mit meinen Ausweisen und Pässen unbehelligt nahezu überall hin reisen, ganz im Gegensatz zu Ihnen mit Ihren Papieren),
N.N.