Meilenstein 5 – Sensordaten als Twitternachricht bereitstellen
US5.1 – Erstellen einer TwitterApp
Aufgabe: Bevor man einen Tweet aus PHP (oder einer anderen Programmiersprache) absenden kann, muss man erst eine TwitterApp erzeugen.
Zum Erzeugen der TwitterApp wird zuerst ein gültiger TwitterAccount benötigt.
Nachdem nun die Seite https://apps.twitter.com/ geöffnet wurde, wird die Schaltfläche „Create Application“ betätigt.
Es wird nun eine neue Seite geladen, wo man die Metadaten zur App eingeben muss. Diese sind:
- Name,
- Beschreibung
- Webseite
und man muss den Datenschutzbestimmungen zustimmen.
Wenn diese Daten alle eingeben wurde, so kann mit der Schaltfläche „Create your Twitter application“ die Anwendung erzeugt werden.
Es wurde nun auch schon der „Consumer Key (API Key)“ sowie der „Consumer Secret“ erstellt. Für die Verwendung der Twitter API benötigen wir jedoch noch den „Access Token“ sowie den „Access Token Secret“ die erzeugen wir durch das Betätigen der Schaltfläche „Create my access token“
Es wird nun der „Access Token“ sowie der „Access Token Secret“ angezeigt.
Ich habe diese App wieder gelöscht daher sind diese Keys nicht mehr gültig 🙂
Damit haben wir nun die Daten für die Verwendung der Twitter API.
US5.1 – Sensordaten sollen nach dem erfolgreichen Speichern in der Datenbank als Twitternachricht gepusht werden.
Aufgabe: Nach dem erfolgreichen Speichern in der Datenbank soll eine Twitternachricht generiert und gepusht werden. Dabei ist darauf zu achten dass, das Zeitlimit für das Versenden von Nachrichten nicht überschritten wird.
Gemäß der Twitter Limits liegt das maximum an Direktnachrichten pro Tag bei 1000 Stck bei Tweets sind es 2400 Stck.
Was ist der Unterschied zwischen Direknachricht & Tweet?
Eine Direktnachricht ist nicht öffentlich und kann zwischen einer und mehreren Personen ausgetauscht werden. (siehe „Über Direktnachrichten“) Ein Tweet ist eine Statusmeldung, welche öffentlich gepusht wird, diese kann von jedem angemeldeten (und nicht geblockten) Benutzer gelesen werden. (siehe „Was ist ein Tweet?“)
PHP API für das Versenden von Tweets
Für dieses Projekt habe ich nach einer schlanken und einfachen Lösung gesucht einen Tweet zu pushen. Bei der Google Suche ist mir dabei die Bibliothek von J7mbo aufgefallen, in den nächsten Schritten werde ich erläutern wie ich diese in das Projekt eingebunden und verwendet habe. (Link https://github.com/J7mbo/twitter-api-php)
Einbinden der Bibliothek
Die Bibliothekt von J7mbo ist genau eine PHP Datei welche von GitHub geladen und in dem Projektverzeichnisses abgelegt wird.
Diese wird dann mit
require ('TwitterAPIExchange.php');
eingebunden.
Absenden eines Tweets
Ich habe mir die Datei „twitter.php“ erstellt und dort meine Funktionen für die API hinterlegt, somit habe ich alle Fachlichenanforderungen klar getrennt.
Zum Erstellen einer Twitter Nachricht verwende ich die Parameter welche mit der UserStorie 3.2 abgesendet werden.
function generateTwitterMessage($data){ $message = ""; foreach ($data as &$value) { $message .="Sensor = "; $message .= $value['sensor_desc']; $message .=" | Wert = "; $message .= $value['sensor_value']; $message .= "\r\n"; } $message .="gemessen am "; $message .= date("d.m.Y H:i", time());//$value['sensor_timestamp']); return $message; }
In diesem Code verwende ich den Unix Timestamp vom Server, da der NodeMCU noch nicht über eine RTC verfügt und somit nicht die aktuellen Zeitstempel liefert.
Hier nun die Funktion zum senden eines Tweets:
//Sendet einen Twitter Tweet mit dem Text aus der Variable $message. function sendTweet($message){ $settings = array( 'oauth_access_token' => "xyz", 'oauth_access_token_secret' => "xyz", 'consumer_key' => "xyz", 'consumer_secret' => "xyz" ); $url = 'https://api.twitter.com/1.1/statuses/update.json'; $requestMethod = 'POST'; $postfields = array( 'status' => $message ); $twitter = new TwitterAPIExchange($settings); echo $twitter->buildOauth($url, $requestMethod) ->setPostfields($postfields) ->performRequest(); }
Es ist darauf zu achten, dass die Nachricht sich zur vorherigen unterscheiden muss oder aber min. 12h dazwischen liegen. Ist dieses nicht so wird dieses durch die Fehlermeldung {„errors“:[{„code“:187,“message“:“Status is a duplicate.“}]} von der Twitter API quittiert.
Wurde eine Nachricht erfolgreich verschickt so sollte diese dann wie folgt aussehen:
Download
Das gesamte, fertige Projekt gibt es nun hier zum Download.