Mit Drafts Erinnerungen in Evernote erstellen

Mit Drafts Erinnerungen in Evernote erstellen

Anfang des Sommers führte Evernote die Erinnerungsfunktion für Notizen ein. Ein große Unterstützung für Menschen wie mich, die Evernote nicht nur als Ablagesystem benutzen, sondern auch für Aufgaben. Mein große Hoffnung vor ein paar Monaten war, dass in kurzer Zeit viele Anwendungen von Drittanbietern auf den Markt kommen würden, welche die Reminder-Funktion von Evernote implementieren. Bisher wartete ich darauf vergeblich. Selbst eine Kleinigkeit wie das Erstellen einer neuen Notiz mit dem Fälligkeitsdatum „heute“ fehlt – so was kann man nur über Evernote selber bewerkstelligen. Selbst Drafts, eine meiner absoluten Lieblingsapps zu Erfassungen von Ideen, Einkaufskram und allem anderen bietet zwar eine Unterstützung für Evernote, nicht aber für Reminder.

Otto-Normal-User würde vermutlich bei so was einfach kapitulieren oder weiter hoffen. Irgendwann packt mich jedoch meine Ehre als Entwickler. „Geht nicht“ kann ich einfach nicht auf sich beruhen lassen. Grübeln, suchen, Ansätze entwickeln, bis dann eine fertige Lösung entstanden. Und die wiederum kann auch Otto-Normal-User verwenden.

Die Grundidee bei folgendem ist, in ein Notizbuch namens „Aufgaben“ Notizen mit der Fälligkeit „heute“ oder „morgen“ über Drafts anzulegen. Dazu sind ein paar Vorbereitungen notwendig.

Mit Pythonista lassen sich unter iOS Python-Skripte schreiben und ausführen. Was erstmal wirkt wie eine Spielerei, ist in Wirklichkeit ein mächtiges Werkzeug. Trotz der Einschränkungen von iOS (Stichwort Sandboxing) lassen sich zusätzliche Python-Module installieren. Unter anderem ein Modul, mit dem man mit seinem Evernote-Account kommunizieren kann.

Wie man den Evernote SDK in Pythonista einbinden kann, beschreibt der Entwickler von Pythonista, Ole Zorn, in einem Forums-Beitrag. Den Installier selber findet man hier. Gegenüber dem Originalskript habe ich allerdings eine kleine Veränderung vorgenommen und alle Vorkommnisse von „evernote-1.23.2“ ersetzt durch „ervernote-1.25.0“. Das ist deshalb wichtig, da nur in der neueren Version des Evernote SDK auch Reminder unterstützt werden.

Der besondere Clou liegt darin, unterschiedliche iOS-Applikation mittels URL Schemes zu verbinden. Mittlerweile gibt es viele Apps, die dieses Vorgehen unterstützen. Unter anderem Drafts und Pythonista.

Um mittels Python-Script auf Evernote-Notizen zugreifen zu können, muss sich das Script authentifizieren. Das lässt sich über ein so genanntes „Evernote Developer-Token“ bewerkstelligen. Ein Evernote Developer-Token für sein eigenes Konto kann man hier bekommen. An dieser Stelle beschreibt Evernote noch mal genau die Zusammenhänge. Direkt mit dem Developer-Token zu arbeiten im Script ist sicherlich nicht der eleganteste, für eigene Zwecke jedoch völlig ausreichend und vor allem unkompliziert.

Hat man sich das Token besorgt und den Evernote-SDK in Pythonista installiert, fehlen nur noch wenige Schritte. Zunächst einmal werden in Drafts zwei neue Aktionen angelegt, eine für „Aufgabe heute“ und die andere für „Aufgabe morgen“. Beide sind URL Actions.

Aufgabe heute:
pythonista://reminder?action=run&argv={{[[title]]}}&argv=heute

Aufgabe morgen:
pythonista://reminder?action=run&argv={{[[title]]}}&argv=morgen

Dabei ist „reminder“ das noch anzulegenden Skript, die Aktion weisst Pythonista an, dieses aufzurufen und als Parameter werden die ersten Zeile des Textes von Drafts und „heute“ bzw. „morgen“ übergeben.

Das dazugehörige Skript in Pythonista ist etwas komplizierter:

import sys
sys.path.append('evernote-sdk')
import time
import datetime
import webbrowser
import urllib
import console
console.clear()
print 'Sende zu Evernote...'
console.show_activity()
import evernote.edam.userstore.constants as UserStoreConstants
import evernote.edam.type.ttypes as Types
from evernote.api.client import EvernoteClient
dev_token = "HIERMUSSDEREIGENEDEVELOPERTOKENREIN"
client = EvernoteClient(token=dev_token, sandbox=False)
note_store = client.get_note_store()
message = sys.argv[1]
message = urllib.unquote(message)
note = Types.Note()
note.title = message
note.notebookGuid = 'GUIDNOTIZBUCH'
note.content = """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note></en-note>
"""
now = int(round(time.time() * 1000))
then = now + 3600000 # one hour after `now`
morgen = datetime.date.today() + datetime.timedelta(days=1)
morgenunix = int(time.mktime(morgen.timetuple()))* 1000
note.attributes = Types.NoteAttributes()
note.attributes.reminderOrder = now
if sys.argv[2]=='morgen':
note.attributes.reminderTime = morgenunix
else:
note.attributes.reminderTime = now
try:
createdNote = note_store.createNote(note)
except Exception, e:
print type(e)
print e
raise SystemExit
print 'Fertig!'
webbrowser.open('drafts://x-callback-url')

Neben dem bereits erwähnten Delevoper-Token, der an der entsprechenden Stelle im Skript eingesetzt werden muss, fehlt noch die ID (die sogenannten GUID) des Notizbuchs, in dem die Notiz erstellt werden soll. Die einfachste Methode, daran zu gelangen, ist sich im Webbrowser bei Evernote mit seinen Daten anzumelden und das Notizbuch in seinem Account aufzurufen. In der URL steht dann eine Folge von Ziffern und Buchstaben, unter anderem ein Abschnitt weiter links, der mit folgende beginnt: #b= und mit &st= endet. Der Teil dazwischen ist die GUID des Notizbuches, die im Skript eingetragen werden muss.

Noch eine Anmerkung zum Ende des Python-Skripts. Dort wird wieder zurück zu Drafts gesprungen.

Nach den Vorarbeiten sollte es jetzt gelingen, über Drafts neue Notizen in Evernote mit Fälligkeitsdatum anzulegen.

3 Replies to “Mit Drafts Erinnerungen in Evernote erstellen”

  1. Danke für die ausführliche Beschreibung! Werde ich mir mal naher ansehen, wobei ich schon mal zufrieden bin, dass iOS bei den Schnellnotizen einen Reminderbutton erhalten hat – Android-Leute konnten ja schon bisher über ein Widget direkt eine Erinnerungsnotiu einfügen.

    1. Insgesamt ist die neue iOS-App auf dem iPhone besser geworden. Auf dem iPad sieht es anders aus. Pädagogisch formuliert bleibt Evernote da unter seinen Möglichkeiten.

      Was man noch an „Spielereien“ mit Pythonista und Evernote basteln kann, habe ich gestern beschrieben -wird wohl auch nicht der letzte Artikel zu diesem Thema gewesen sein.

Kommentar verfassen

über Thomas Boley

Geboren wurde ich im Jahre des Herren 1971 in Wesel am Niederrhein – die Kommentare an dieser Stelle bezüglich des Bürgermeisters bitte verkneifen! Mein Verhältnis zu dieser Stadt würde wohl den Umfang dieser Seite sprengen. Nur soviel sei gesagt: Es ist durchaus durchwachsen, worin es sich aber nicht von meinem Verhältnis zu Bielefeld unterscheidet. Nach dem üblichen Werdegang (Kindergarten, Schule, Abitur, Zivildienst) und den üblichen jugendlichen Irrungen und Wirrungen verschlug es mich zum Studium nach Bielefeld verschlagen. 18 Jahre später ging es dann zurück an den Rhein, in die Domstadt Köln. mehr erfahren