Skip to content
marfen edited this page Feb 12, 2021 · 20 revisions

Tumblr

Allgemein

Tumblr ist eine Platform für Blogs mit der Möglichkeit verschiedene Dateiformate zu posten.

Um die API von Tumblr zu verwenden muss auf der Tumblr Homepage unter https://www.tumblr.com/oauth/apps eine Anwendung registriert werden um den consumer_key und das consumer_secret zu erhalten welche für die Anmeldung und Authorisierung benötigt werden. Zusätzlich muss eine Callback-Url angegeben werden zu der der User nach erfolgter Anmeldung umgeleitet wird, hierfür wurde https://example.com verwendet. Um Anfragen an die API zu stellen bietet Tumblr verschiedene SDKs, unter anderem auch eine für Java namens Jumblr.

Um den Consumer Key und das Consumer Secret in der Bibliothek verfügbar machen zu können wurde dafür jeweils eine statische Variable eingeführt.

    private static String consumerKey;
    private static string consumerSecret

diese müssen vor Verwendung der Klasse folgendermaßen gesetzt werden und sind anschließend für alle erzeugten Objekte verfügbar:

    Tumblr.setConsumerKey(consumerKey);
    Tumblr.setConsumerSecret(consumerSecret);

Anmelden

Tumblr verwendet zur Anmeldung den OAuth-1 Standard. Für die Umsetzung des OAuth1 Authorization Flow wird die Bibliothek Scribejava verwendet.

Da zum login bei Tumblr über OAuth1 eine Interaktion durch den Nutzer nötig ist wurde hierfür eine Methode implementiert welche den Nutzer über Konsolen Ein- und Ausgabe durch den Login-Vorgang leitet.

    public void login()throws InterruptedException, ExecutionException, IOException {...}

Zunächst wird der/die Nutzer/in gebeten den User-/Blognamen unter welchem gepostet werden soll anzugeben, dieser wird für alle folgenden Anfragen benötigt.

Im nächsten Schritt erhält man anhand des Consumer-Key und -Secret einen unauthorisierten Request Token aus dem nun eine Authorization-URL zur Authorisierung generiert und in der Konsole ausgegeben wird. Unter der erhaltenen URL muss der User sich nun mit seinen Daten anmelden und die Anwendung authorisieren. Der User wird nun zur angegebenen Callback URL weitergeleitet. An die Callback URL angehängt befindet sich der oAuth-verifier der nun kopiert und in der Konsole wieder eingefügt werden muss. Der Verifier und RequestToken werden anschließend gegen den endgültigen Access Token getauscht. Dieser besteht wiederum aus zwei Token, dem AccessToken und dem AccessTokenSecret, welche zeitlich unbegrenzt gültig sind, bis ein neues Paar erstellt wird, und für spätere Anfragen in der aktuellen Tumblr Instanz gespeichert werden.

Sollte dieser Vorgang über die Konsole nicht gewünscht/benötigt sein wurden ausserdem Methoden implementiert welche nur die einzelnen Schritte davon abbilden.

    public void setBlogname(String blogname){...}

zum setzen des Blogname.

    public String  getAuthorizationURL() throws InterruptedException, ExecutionException, IOException {...}

Generiert anhand des ConsumerKey und ConsumerSecret einen RequestToken und darauf basierend die Authorization-URL welche anschließend für die manuelle Nutzerinteraktion verwendet werden kann.

Ist der Login Vorgang abgeschlossen und der verifier aus der Callback URL bekannt kann folgende Methode aufgerufen werden um den RequestToken und Verifier gegen den Accesstoken zu tauschen.

    public void getAccessTokenAndSecret(String verifier) throws InterruptedException, ExecutionException, IOException{...}

Posten

Unterstützte Datenformate

  • PNG (Steganographie möglich)
  • MP3 (Steganographie möglich)

Zum Posten wird das von Tumblr zur Verfügung gestellte Jumblr SDK verwendet. Unter Verwendung von Jumblr können ganz einfach Posts erstellt und bei Tumblr geuploaded werden. Beim Aufruf dieser Methoden wird zunächst überprüft ob ein Token vorhanden ist, ist dies nicht der Fall wird zuerst die oben beschriebene login() Methode aufgerufen.

    //setup before Posting 
    Tumblr.setConsumerKey(consumerKey);
    Tumblr.setConsumerSecret(consumerSecret);
    SocialMedia tumblr = new Tumblr();
    tumblr.setBlogname(blogname);

    //File als byte[] einlesen
    File file = new File("path/to/file.png");
    byte[] mediaByte = ByteArrayUtils.read(file);

    //Posten
    tumblr.postPhoto(mediaByte, "keyword"); //PNG
    tumblr.postAudio(mediaByte, "keyword"); //MP3

Suchen

Das Abonnieren eines Keywords mit automatischer Suche und anschließendem Download der Beiträge kann leider mit Tumblr nicht sinnvoll umgesetzt werden. Die Tumblr API unterstützt nur die Rückgabe der letzten 20 Vorkommnisse eines Keyword, darunter zählen jedoch auch reine Textbeiträge sowie Kommentare und die Antworten auf solche was dazu führt dass die Suche in sehr kleinen Intervallen stattfinden müsste um den sicheren Erhalt aller Ergebnisse gewährleisten zu können. In durchgeführten Tests war hier teilweise ein Zeitraum von 30 Sekunden schon zu viel und es gingen Beiträge "verloren". Kombiniert man dies mit dem von Tumblr gesetzten RateLimits von 3000 Aufrufen pro Tag und ConsumerKey ergibt sich ein maximales Intervall von ca. 28 Sekunden für die gesamte Anwendung. Da davon auszugehen ist dass eine solche Anwendung immer mindestens 2 Personen verwenden um miteinander zu "kommunizieren" ergibt sich ein maximales Intervall von 60 Sekunden und vergrößert sich mit jedem weitern Nutzer zunehmend wodurch ein sicherer Erhalt aller Beiträge nicht gewährleistet werden kann und die Funktion für die Anwendung damit praktisch nutzlos macht.

Download

Tumblr versucht, aus nachvollziehbaren Gründen, den Download von Dateien so schwer wie möglich zu machen.

Da Tumblr die Bilddateien erst dynamisch lädt wenn diese benötigt werden ist ein automatisiertes Herunterladen der Bilder aus den HTML Dokumenten nicht möglich und müssen somit per Hand runtergeladen werden.

Gleiches gilt für Audiodateien wobei es hier sogar noch umständlicher ist diese auch nur manuell herunterzuladen. Dazu hier eine Anleitung wie es dennoch möglich ist https://www.wikihow.com/Download-Audio-from-Tumblr . Die Anleitung ist jedoch mit Vorsicht zu genießen da Tumblr im Dateinamen teilweise von ihren Anwälten darauf hinweisen lässt dass diese bitte nicht heruntergeladen werden soll da dies dazu führen könnte dass Tumblr seine Dienste garnicht mehr oder nur in begrenztem Umfang zur Verfügung stellen kann. Leider konnte ich einen solchen Fall zum anfertigen eines Beispiel Screenshots nicht mehr reproduzieren.

Home

Docs

Deployment

Usage Guide

Steganography

SocialMedia

Erweiterung

Beispielanwendung

Clone this wiki locally