Globenaut

Jeder hat das Recht auf Meinungsfreiheit und freie Meinungsäußerung; dieses Recht schließt die Freiheit ein, Meinungen ungehindert anzuhängen sowie über Medien jeder Art und ohne Rücksicht auf Grenzen Informationen und Gedankengut zu suchen, zu empfangen und zu verbreiten.
Die Allgemeine Erklärung der Menschenrechte
Resolution 217 A (III) vom 10.12.1948/Artikel 19
Zensoren sind Verbrecher!
BPjM: Trusted Censorship
Christliche Werte — Neine Danke!

Skripttipp #11: Kurz-URLs vor dem Besuch auflösen

von Globenaut am 6.9.09
1link.in
2su.de
3.ly
4url.cc
9mp.com
a.gd
a.nf
a2n.eu
adjix.com
alturl.com
arm.in
b65.us
bit.ly
bloat.me
budurl.com
buk.me
burnurl.com
canurl.com
chilp.it
chod.sk
cli.gs
clop.decenturl.com
clop.in
doiop.com
dwarfurl.com
easyuri.com
easyurl.net
faingai.notlong.com
fhurl.com
fly2.ws
fon.gs
foxyurl.com
fwd4.me
fwdurl.net
g4.ms
g8l.us
get-shorty.com
gonext.org
good.ly
gurl.es
hex.io
idek.net
ilix.in
is.gd
ix.it
j2j.de
jdem.cz
jijr.com
kisa.ch
kl.am
kore.us
kots.nu
krz.ch
kurl.us
LNK.by
lin.cr
linxfix.de
liteurl.net
litturl.com
lnk.in
lnkurl.com
lurl.no
merky.de
memurl.com
micurl.com
migre.me
miklos.dk
min2.me
minilien.com
minurl.fr
minurl.org
moourl.com
muhlink.com
myurl.in
myurl.us
nanoref.com
ndurl.com
ne1.net
nutshellurl.com
ow.ly
Puke.It
pendek.in
pic.gd
plexp.com
plurl.me
pnt.me
poprl.com
pt2.me
qr.cx
qurl.com
qurlyq.com
r.im
rde.me
redir.ec
redirx.com
rnk.me
rubyurl.com
safe.mn
sai.ly
sfu.ca
shorl.com
short.ie
short.to
shorterlink.com
shortlinks.co.uk
shortn.me
shredurl.com
shrinklink.co.uk
shrinkr.com
shrt.st
shrtn.com
shrtnd.com
shurl.net
simurl.com
smallr.com
smallr.net
smarturl.eu
smfu.in
sn.vc
snipr.com
song.ly
srnk.net
starturl.com
su.pr
surl.co.uk
tighturl.com
tini.us
tiny.cc
tiny123.com
tinylink.com
tinyurl.com
to.vg
tobtr.com
tr.im
traceurl.com
tw6.us
twip.us
twirl.at
twitpwr.com
twitthis.com
twurl.nl
u.mavrev.com
u.nu
uiop.me
unfaker.it
ur.ly
ur1.ca
url.co.uk
url.ie
url.lotpatrol.com
url9.com
urlborg.com
urlbrief.com
urlcover.com
urlcut.com
urlcutter.com
urlhawk.com
urlsmash.com
urltea.com
urlvi.be
urlzen.com
virl.com
vl.am
vtc.es
w3t.org
wapurl.co.uk
wlink.us
www.6url.com
www.canurl.com
www.digbig.com
www.ezurl.eu
www.piurl.com
www.shortenurl.com
www.timesurl.at
www.urlpire.com
www.x.se
x.vu
xrl.us
zi.ma
zz.gd

Egal ob man Kurz-URLs mag oder nicht, ob man sie für sinnvoll hält oder nicht, immer häufiger begegnet man ihnen. Man kann ihre Benutzung prinzipiell verweigern, dann kann man aber Dienste wie Twitter.com nur eingeschränkt benutzen. Auch Verfügbarkeit und Sicherheit sind diskussionswürdige Punkte, aber all dies soll jetzt hier nicht das Thema sein!

Auf jeden Fall sollte man wissen wie man ggf. zu jeder Kurz-URL die Langform erhält ohne den Link anzuklicken. Zwar bieten viele Kurz-URL-Dienstleister („URL shortener“) inzwischen auch eine Vorschaufunktion an, aber für diese gibt es keinen einheitlichen Standard, jeder kocht hier sein eigenes Süppchen. Drei Beispiele (ohne Wertung des Dienstleisters):

  1. Bit.ly: + an die Kurz-URL angehängen, http://bit.ly/4LjZ1http://bit.ly/4LjZ1+
  2. TinyURL.com: „preview“ einfügen, http://TinyURL.com/c8yyqrhttp://preview.TinyURL.com/c8yyqr
  3. Merky.de: - vor der Kurzform einfügen, http://merky.de/prfzffhttp://merky.de/-prfzff

Benötigt wird also eine dienstleisterunabhängige Methode, um die Ziel-URL zu erfahren. Die schnellse Möglichkeit liefert, wie meist, ein Bash-Skript. Die relevanten Dienste beruhen auf der standardisierten Serverrückmeldung 301, die besagt, daß eine Seite umgezogen ist und jetzt unter einer anderen URL erreichbar ist. Im Terminal kann man einfach durch Abruf der Kopfzeilen („header“) Informationen zu einer URL anfordern:

#:~>curl -Is 'http://bit.ly/4LjZ1'
HTTP/1.1 301 Moved
Server: nginx/0.7.42
Date: Mon, 10 Aug 2009 19:55:09 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Location: http://kinderpornos.info/
MIME-Version: 1.0
Content-Length: 287

#:~>

Uns interessiert hier nur die Zeile „Location“, dort findet sich das Weiterleitungsziel. Mit grep und cut läßt sich nun ein kleines Bashskript erstellen, welches das eigentliche Ziel ausliest:

#!/usr/bin/env bash
#
if [ "$1" != '' ]; then
     curl -Is $1 | grep Location | cut -d ' ' -f2
else
     echo -e "\e[31mKeine URL an das Skript übergeben!\e[0m
fi

Alternativ ließe sich auch wget (wget -S --spider -d) anstelle von cURL verwenden, welches aber, im Gegensatz zu cURL, unter MacOS X nicht zur Standardinstallation gehört. Anstelle eines eigenständigen Skriptes kann man natürlich den if Bereich als function formuliert in eine Funktionenbibliothek oder direkt in die .bashrc schreiben.

Für MacOS X Anwender die der Kommandozeile nichts abgewinnen können, läßt sich mit den erwähnten Bashkommandos und etwas AppleSkript ein kleines Programm in der Menüzeile von MacOS X unterbringen, welches browser- und dienstleisterunabhängig die Langform jeder Kurz-URL anzeigt. Der Vorteil beruht darauf, daß man man den Dienstleister nicht (näher) kennen muß und immer dieselbe Befehlsfolge aufrufen kann:

  1. Link auf beliebige Art in die Zwischenablage kopieren (Text aktivieren, kopieren; Kontextmenü über dem Link, Verweis in die Zwischenablage).
  2. Menüeintrag «Kurz-URL auflösen» im Skriptmenü aufrufen.
  3. Aufgelöste URL ansehen, ggf. ändern, wegklicken oder im Standard-Browser aufrufen.

SkriptEditor öffnen und folgendes Skirpt erstellen und ausführbar unter "~/Library/Scripts" ablegen:

set Abbruch to false
set Ergebnis to ""
set Zeit to 30
set KurzURL to the clipboard
try
 set Verweis to (do shell script "curl -Is " & KurzURL & ¬
  "| grep Location | cut -d ' ' -f2")
 set Ergebnis to display dialog ¬
  "Die Ziel-URL von " & KurzURL & " lautet:" default answer Verweis ¬
  buttons {"abbrechen", "OK, ansehen..."} ¬
  with title "Kurz-URL auflösen" default button 2 cancel button 1 ¬
  giving up after Zeit
on error number -128
 set Abbruch to true
end try

if Abbruch then
else if button returned of Ergebnis is "OK, ansehen..." then
 open location text returned of Ergebnis
else if gave up of Ergebnis then
 display dialog "Mehr als " & Zeit & ¬
  " Sekunde keine Antwort." with title "Zeitüberschreitung"
end if

Das Skript setzt voraus, daß eine korrekte URL in der Zwischenablge liegt, andernfalls gibt es ungefährliche, aber unerwartete Fehlermeldungen. Die Abfrage funktioniert für alle Dienste die nach dem geschilderten Prinzip arbeiten, solange der Abruf für jeden frei zugänglich ist und sie überhaupt (noch) arbeiten. Ist ein Dienst abgeschaltet, sind die Kurz-URL für alle wertlos, da kein Zugriff mehr auf die Datenbank besteht.

Labels: , , , , , , , , , ,

#  0 Kommentare

Skripttipp #5: Download der Galeriebilder von www.imagefap.com

von Globenaut am 13.6.09

Heute Mal ein Tipp für Bildersammler. Wer keine Lust hat, die Bilder von http://www.imagefap.com/ einzeln herunterzuladen oder keine umfangreiche Software verwenden will kann dies, ggf. auch zeitgesteuert und unbeaufsichtigt, mit einem kleinen Bashskript erledigen (lassen). Das Skript erzeugt einen Ordner mit der Gallerienummer als Name und lädt alle Bilder in diesen Ordner herunter.

#!/usr/bin/env bash
# Skript       Imagefap-Download
# Beschreibung Lädt die Bilder einer Galerie von http://WWW.Imagefap.com herunter.
# Parameter    $1: URL der Gallerie (z. B.: http://www.imagefap.com/gallery/123456) 

Galerie_Nr=${1##*/}
Pfad=${2:-$HOME'/Downloads/'}$Galerie_Nr
URL_Inhalt=${1%/*}'.php?gid='$Galerie_Nr'&view=2'
Inhalt='Galerie.html'

cURL_Schalter='-A Anonymous'

mkdir $Pfad
cd $Pfad
curl $cURL_Schalter $URL_Inhalt -o $Inhalt
if [ -e $Inhalt ]; then
 for Bild in $(cat $Inhalt | grep -Eio "/thumb/([^']).*'")
 do
  Bild=$(basename ${Bild%%\'})
  curl $cURL_Schalter 'http://77.247.179.161/full/getimg.php?img='$Bild -o $Bild
 done
 srm -srf $Inhalt
fi

MacOS X Anwender können das Skript so verwenden, Linuxer müssen die Zeile „Pfad“ anpassen und ihren Download-Ordner angeben.

#:~>Imagefap-Download http://www.imagefap.com/gallery/123456

Labels: , , , , ,

#  0 Kommentare

Skripttipp #4: E-Mail bei Mailinator automatisch abholen

von Globenaut am 11.4.09

Wer den Mailinator und seine Verwandten benutzt, hat unter Umständen das Problem, daß er einerseits nicht weiß wann die erwartete e-Mail eintrifft, andererseits aber Mailinator selbige nach ein paar Stunden löscht. Dies läßt sich durch ein kleines Bashskript beheben, welches die e-Mails abholt.

Was macht das Skript genau?

  1. Für jeden Skriptaufruf wird ein eigener Ordner angelegt, wobei sich der Ordnername aus e-Mailadresse, Datum und Uhrzeit zusammensetzt: Test@Mailinator.com_2009.04.11-1351.
  2. Die Liste mit den eingegangenen Mails wird heruntergeladen. Wenn es nicht erfolgreich war endet die Ausführung.
  3. Jetzt wird jede e-Mail einzeln heruntergeladen und in einer eigenen Datei abgelegt, wobei als Dateiname der Betreff der jeweiligen e-Mail genommen wird.
  4. Abschließend wird die Datei mit der Liste der Eingangsmails sicher gelöscht. Im Ordner verbleiben verbleiben nur die Dateien mit den e-Mails. Ist keine e-Mail eingetroffen, bleibt ein leerer Ordner zurück, um eine einfache Kontrolle der Skriptausführung zu haben.
#!/usr/bin/env bash
# Skript       Mailinatorabfrage
# Beschreibung Holt e-Mail von Mailinator.com ab.
# Parameter    $1: Die e-Mailadresse die abgefragt werden soll; optional.
#              $2: Der Pfad wo die Mail(s) gespeichert werden sollen; optional.

Mailadresse=${1:-'Test@mailinator.com'}
Pfad=${2:-$HOME'/Downloads/'}${Mailadresse}_$(date "+%Y.%m.%d-%H%M")
Domain='http://'${Mailadresse#*@}
URL_Fach=$Domain'/maildir.jsp?email='${Mailadresse%@*}'&x=0&y=0'
Inhalt='maildir.html'
mkdir $Pfad
cd $Pfad
curl -A "Anonymous" $URL_Fach -o $Inhalt
if [ -e $Inhalt ]; then
    for Zeile in $(cat $Inhalt | grep -Eio '/showmail.jsp([^>])*')
    do
        Betreff=$(grep -Eio "${Zeile#*&}.*</a>" < $Inhalt)
        Betreff=${Betreff#*>}
        Betreff=${Betreff%<*}
        curl -A 'Anonymous' ${Domain}${Zeile%>*} -o "$Betreff"'.html'
    done
    srm -srf $Inhalt
fi

Das Skript hat zwei optionale Parameter

  1. $1: Die e-Mailadresse die abgefragt werden soll; wird keine angegeben wird 'Test@mailinator.com' genommen.
  2. $2: Der Pfad wo die Mail(s) gespeichert werden sollen; wird kein Pfad angegeben, erfolgt die Speicherung in einem Ordner im Download-Ordner des jeweiligen Anwenders (Letzteres gilt für MacOS X, Linuxer müssen den Pfad ggf. anpassen).

Die regelmäßige Ausführung des Skriptes ist unter Linux ein cron-Job, unter MacOS X wird eine separate plist-Datei benötigt. Der Aufbau ist relativ einfach, zur Erstellung werden folgende Angaben benötigt:

  1. Die abzufragende e-Mailadresse, bspw. Test@Mailinator.com
  2. Ein sinnvoller Name des Jobs, bspw. Mailinator.Test
  3. Name des Skriptes und sein Ablageort, bspw. /Users/Loginname/bin/Mailinatorabfrage
  4. Der zeitliche Abstand in dem das Skript ausgeführt werden soll in Sekunden, bspw. 3600 (= stündlich)

Ausgehend von diesen Annahmen kann mit jedem beliebigen Texteditor die plist erstellt werden:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>KeepAlive</key>
 <false/>
 <key>Label</key>
 <string>Mailinator.Test</string>
 <key>ProgramArguments</key>
 <array>
  <string>/Users/Loginname/bin/Mailinatorabfrage</string>
  <string>Test@mailinator.com</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
 <key>StartInterval</key>
 <integer>3600</integer>
</dict>
</plist>

Die Datei jetzt noch als reinen Text unter dem Namen »Mailinator.Test.plist« in »~/Librqary/LaunchAgents« speichern.

Die Angaben unter <array> sind übrigens nichts anderes als ein Skriptaufruf im Terminal mit Parameter:

#:~/bin>Mailinatorabfrage Test@mailinator.com

Ab dem nächsten Neustart wird dann jede Stunde dieses Skript ausgeführt. Eleganter steuert man es aber über die Kommandozeile. Jeweils eines der nachfolgenden (selbsterklärenden ?) Kommandos im Terminalfenster aufrufen:

#:~/Library/LaunchAgents>launchctl load Mailinator.Test.plist
#:~>launchctl start Mailinator.Test
#:~>launchctl list Mailinator.Test
#:~>launchctl stop Mailinator.Test
#:~/Library/LaunchAgents>launchctl unload Mailinator.Test.plist
#:~>launchctl help

Wie auch bei anderen Dingen, sollte man Fairness walten lassen und die automatishe Abfrage nicht unnötig und immerwährend laufen lassen. Der Zeitraum in dem Mails eintreffen können ist ja meist auf wenige Stunden beschränkt. Es ist aber gut geeingnet längere Arbeitspausen oder die Nacht abzudecken.

Wer seine eingehenden Mails nur so Abfragen und speichern will kann das Skript natürlich auch direkt im Terminal aufrufen oder in ein kleines AppleSkript einbetten und per Menü im Finder aufrufen:

tell application "Finder"
 activate
 do shell script "Mailinatorabfrage 'Test@mailinator.com'"
end tell

Labels: , , , , , , ,

#  1 Kommentare

Piratenblogger
Glauben ist die mutwillige Nichtbenutzung des Verstandes!
Bundestagswahl 2009: Weg mit dem Gesindel von SPD und C*U!
© 2005-2009, GlobenautDieses Blog wird unterstützt von Blogger.