Blog

Herumspielen mit Yo

Lammert Westerhoff

Aktualisiert Oktober 22, 2025
6 Minuten

Yo hat in letzter Zeit viel von sich reden gemacht. Vor allem, weil es viel investiert wurde, was einige Leute überrascht und schockiert hat, weil alles zu einfach erscheint. Mit Yo können Sie lediglich eine Yo-Benachrichtigung an andere Benutzer senden. Es hat jedoch großes Potenzial, groß zu werden und dabei so einfach zu bleiben.

Bildschirmfoto 2014-08-01 14.23.48

Nachdem ich vor ein paar Tagen gelesen habe, warum eine dumme App wie Yo das Potenzial einer Milliarden-Dollar-Plattform haben könnte, war es an der Zeit, ein wenig mit Yo und seiner API herumzuspielen.

Ich habe mir 3 sehr einfache Anwendungsfälle ausgedacht, die mit Yo leicht zu lösen sein sollten:

  • Erhalten Sie ein Yo, wenn es Zeit zum Mittagessen ist, wenn ich bei der Arbeit bin.
  • Erhalten Sie ein Yo, wenn ich vergessen habe, aus meiner Park-App auszuchecken
  • Erhalten Sie ein Yo, wenn ein neuer Blogbeitrag hier im Xebia Blog veröffentlicht wird

Zeit, ein paar Yo-Entwickler-Benutzernamen zu registrieren. Die Yo-API ist, genau wie Yo selbst, sehr einfach. Sie registrieren einen Benutzernamen, von dem Sie Benachrichtigungen erhalten möchten, unter yoapi.justyo.co. Danach erhalten Sie ein API-Token für diesen Benutzernamen. Sobald Sie dieses Token haben, können sich andere Personen mit der Yo-App bei diesem Benutzernamen anmelden. Dann können Sie ein Yo entweder an alle Abonnenten oder an einen einzelnen Abonnenten mit einer einfachen POST-Anfrage und dem Token senden. All dies wird unter Yo Developers API genauer erklärt. Beginnen wir mit unseren Mittagsbenachrichtigungen. Hierfür habe ich den Benutzernamen TIME2LUNCH erstellt. Ich möchte meine Benachrichtigungen um 12:00 Uhr erhalten, da dies die Zeit ist, zu der ich zum Mittagessen gehe. Alles, was ich also brauche, ist ein Dienst, der die POST-Anfrage jeden Tag um 12:00 Uhr sendet (im Moment ist es mir egal, ob ich auch am Wochenende eine Benachrichtigung erhalte, und ich kümmere mich nur um meine eigene Zeitzone, mitteleuropäische Zeit). Mit NodeJS ist es nur eine einzige Zeile Code, um eine solche Anfrage zu stellen:

[javascript]
require('request')
.post('https://api.justyo.co/yoall/',
{
form: {api_token: 'my_secret_api_token'}
}
);
[/javascript]

Jetzt brauchen wir einen Planer, der ihn jeden Tag um 12:00 Uhr ausführt. Glücklicherweise verfügt Heroku über einen Scheduler, der genau das tun kann:

Bildschirmfoto 2014-07-31 17.43.51

Nachdem wir also unsere Javascript-Datei mit einer einzigen Zeile Code implementiert und unseren geplanten Job erstellt haben, erhalten wir unser tägliches Yo von TIME2LUNCH. Nicht schlecht für einen ersten Versuch. Normalerweise erinnern mich meine Kollegen daran, wann es Zeit ist, zum Mittagessen zu gehen, also lassen Sie uns etwas tun, das tatsächlich etwas weniger nutzlos ist. Um mein Auto in der Nähe des Büros zu parken, nutze ich immer den Parkmobile-Service. Am Ende des Tages muss ich auschecken, um nicht zu viel zu bezahlen. Leider vergisst man das leicht. Parkmobile weiß das und kann SMS-Benachrichtigungen zu einer bestimmten Zeit oder nach einer bestimmten Anzahl von Parkstunden senden. Leider berechnen sie dafür € 0,25 pro SMS. Sie verschicken auch E-Mails, aber die kann man leichter übersehen. Es wäre schön, wenn Sie stattdessen ein Yo bekommen würden, natürlich kostenlos.

Wir müssen die Yo POST-Anfrage jedes Mal senden, wenn wir die Parkmobile-E-Mails erhalten. Es scheint, als könnten wir IFTTT (wenn dies, dann das) verwenden, um dies zu erreichen. Bei der Suche nach Kanälen und Rezepten auf IFTTT habe ich gesehen, dass Yo bereits als Kanal unterstützt wird. Ich dachte, ich würde schnell fertig werden. Leider ist es nur möglich, Yo als Auslöser zu verwenden (wenn Yo dann das) und nicht als Aktion (wenn dies dann Yo). Wir brauchen hier also eine andere Lösung. Ich konnte keine Möglichkeit finden, eine cURL-Anfrage direkt von IFTTT aus zu senden, aber beim Googeln nach einer Lösung fand ich ein Webhook-Projekt: IFTTT-Webhook. Der ifttt-webhook funktioniert, indem er als Wordpress-Seite fungiert, die als Aktion von IFTTT fungieren kann. Er ermöglicht es uns dann, eine POST-Anfrage an eine bestimmte URL zu senden. Allerdings nicht genau die POST-Anfragen, die von der Yo API akzeptiert werden. Aber wir haben bereits NodeJS-Code erstellt, um eine Yo-Anfrage zu senden. Ich bin sicher, dass wir etwas Code hinzufügen können, um eine Anfrage vom ifttt-webhook zu akzeptieren und sie dann an etwas weiterzuleiten, das Yo versteht.

Wenn wir den Anweisungen auf der Github-Seite folgen und unseren Benutzernamen auf unseren Yo-Benutzernamen setzen und unser API-Token als Passwort verwenden, sendet der Webhook eine POST-Anfrage mit einem JSON-Body, der etwa so aussieht:

[javascript]
{ user: 'MYUSERNAME', pass: 'ab1234-1234-abcd-1234-abcd1234abcd', title: '' }
[/javascript]

Wir können das in NodeJS wie folgt handhaben:

[javascript]
var express = require('express');
var bodyParser = require('body-parser')
var app = express();
var request = require('request');
app.use(bodyParser.json());
app.post('/api/yo', function (req, res) {
var user = req.body.user;
var apiToken = req.body.pass;
request.post('https://api.justyo.co/yo/',
{
form: {
api_token: apiToken,
username: user
}
});
});
var port = Number(process.env.PORT || 5000);
app.listen(port, function() {
console.log('Listening on ' + port);
});
[/javascript]

Dies ist nur ein einfacher Express-Webserver, der auf POST-Aufrufe auf /api/yo wartet und dann die Felder user und pass aus dem Body verwendet, um eine POST-Anfrage an die Yo API zu senden.

Diese wird unter youser.herokuapp.com/ bereitgestellt, damit jeder sie als IFTTT to Yo-Aktion verwenden kann. Jetzt können wir unser IFTTT-Rezept erstellen. Die Erstellung dieses Schrittes ist einfach. Ich erhalte die E-Mails von Parkmobile in meinem Google Mail und ihre E-Mail-Adresse lautet norepy@parkmobile.com. Die Regel wird also jedes Mal ausgelöst, wenn ich eine E-Mail von ihnen erhalte. Dann aktiviere ich in diesem Schritt den Wordpress-Kanal mit dem Yo-Benutzernamen und dem Api-Token und gebe im Body die URL youser.herokuapp.com/api/yo an. Hier ist das Rezept:

Bildschirmfoto 2014-07-31 18.32.12

Der letzte Anwendungsfall, den ich hatte, war, jedes Mal ein Yo zu senden, wenn ein neuer Blogbeitrag in diesem Blog veröffentlicht wurde. Dazu habe ich den XEBIABLOG-Benutzernamen registriert (stellen Sie also sicher, dass Sie diesen in Ihrer Yo-App abonnieren, wenn Sie ebenfalls für jeden neuen Blogbeitrag ein Yo erhalten möchten). Da dieser Blog einen RSS-Feed hat, dachte ich mir, dass ich diesen ab und zu abfragen könnte, um nach neuen Beiträgen zu suchen. Außerdem haben wir bereits den Heroku Scheduler verwendet, also können wir auch diesen wieder nutzen. Ich habe eine kleine Knotenbibliothek namens feed-read gefunden, mit der das Lesen von RSS-Feeds ganz einfach ist. Hier ist also unsere kleine App, die jede Stunde läuft:

[javascript]
var feed = require("feed-read");
var request = require('request');
var ONE_HOUR = 60 * 60 * 1000;
feed("https://xebia.com/blog/feed/", function(err, articles) {
if (err) throw err;
var lastArticle = articles[0];
if ((new Date() - lastArticle.published) < ONE_HOUR) {
console.log('Sending Yo for ' + lastArticle.title);
request.post('https://api.justyo.co/yoall/',
{
form: {
api_token: 'my_secret_token'
}
});
}
});
[/javascript]

Wir haben jetzt unsere 3 kleinen Anwendungsfälle abgeschlossen. Nicht die nützlichsten, aber dennoch nett. Wenn wir auf sie zurückblicken, können wir uns einige Verbesserungen vorstellen. Für das TIME2LUNCH wäre es zum Beispiel möglich, einen kleinen Dienst einzurichten, bei dem sich die Leute registrieren und ihre Zeitzone angeben können, in der sie ihre Benachrichtigung erhalten möchten. Wir könnten eine kleine Datenbank erstellen, die Yo-Benutzernamen und die Zeitzone speichert. Aber im Moment ist es nicht möglich, zu überprüfen, ob USERX wirklich USERX ist. Yo unterstützt keine Authentifizierung durch Dritte, wie es Facebook und Twitter mit OAuth tun. Vielleicht ist das etwas, das sie in Zukunft hinzufügen werden, um die Plattform für benutzerspezifische Benachrichtigungen besser nutzbar zu machen.

Verfasst von

Lammert Westerhoff

Contact

Let’s discuss how we can support your journey.