Blog

Analysieren von Twitter mit JBossESB

Joris De Winne

Aktualisiert Oktober 22, 2025
4 Minuten

Die meisten ESB-Beispiele gehen von einem HelloWorld-Anwendungsfall aus, bei dem Sie eine Nachricht an den ESB senden müssen und dieser sie auf der Konsole ausgibt. In diesem Beitrag möchte ich zeigen, dass Sie mit einem ESB viel mehr tun können, zum Beispiel Daten aus sozialen Medien wie Twitter lesen und analysieren.

Das folgende Beispiel zeigt, wie Sie JBossESB verwenden können, um jede Nachricht, die einen bestimmten Hashtag enthält, zu retweeten. Wenn Sie möchten, können Sie das Beispiel erweitern und alle Nachrichten in der Datenbank speichern oder die Benutzer verfolgen, die die meisten Nachrichten mit einem bestimmten Inhalt gepostet haben.

Voraussetzungen

Schritt 1) Erstellen Sie einen Scheduler mit JBossESB Wenn Sie alle Nachrichten, die einen bestimmten Hashtag enthalten, retweeten möchten, benötigen Sie eine Art Scheduler, der jede Sekunde, Minute oder Stunde abgefeuert wird. In der Datei jboss-esb.xml können Sie dies mit Hilfe eines 'schedule-provider' erreichen.

<providers> <schedule-provider name="schedule"> <cron-schedule scheduleid="cron-trigger" cronExpression="0 0 * ?" /> </schedule-provider> </providers> Dieser Cron-Auslöser kann in einem Schedule-Listener verwendet werden, um eine bestimmte Aktion oder eine Kette von Aktionen aufzurufen, die im nächsten Schritt erläutert wird. Der obige cron-Ausdruck wird jede Stunde abgefeuert.

Schritt 2) Erstellen Sie einen Listener, der eine ESB-konforme Nachricht erstellt Jedes Mal, wenn der obige Auslöser ausgelöst wird, sollte ein Listener ausgelöst werden, der das Ereignis abfangen und verarbeiten kann. In diesem Beispiel erstellt der Ereignisprozessor eine neue ESB-kompatible Nachricht und fügt den Hashtag hinzu, nach dem gesucht werden soll.

xml-konfiguration <listeners> <scheduled-listener name="cron-schedule-listener" scheduleidref="cron-trigger" event-processor="org.xebia.soa.esb.twitter.TwitterConfigurationReader" /> </listeners> Ereignisprozessor public Message composeMessage() throws SchedulingException { // TODO This should be read from a configuration file or database. Message message = MessageFactory.getInstance().getMessage(); message.getBody().add("Xebia"); return message; } In diesem Fall geben wir "Xebia" als Hashtag ein, nach dem gesucht werden soll. Wenn Sie möchten, können Sie beispielsweise eine Eigenschaftsdatei konfigurieren, die alle Hashtags enthält, nach denen gesucht wird.

Schritt 3) Erstellen Sie eine Aktion, die nach den Tweets sucht und sie bei Bedarf retweetet Der nächste Schritt besteht darin, einen Dienst zu erstellen, der eine Aktion enthält, die nach allen Tweets sucht, die die Zeichenfolge enthalten, die in Schritt 2 in den Nachrichtentext eingegeben wurde, und diese Nachrichten retweetet, wenn sie neu sind.

xml-konfiguration <services> <service category="ServiceSocialMedia" name="TwitterService" description="Fetching Twitter Messages"> <listeners> <scheduled-listener name="cron-schedule-listener" scheduleidref="cron-trigger" event-processor="org.xebia.soa.esb.twitter.TwitterConfigurationReader" /> </listeners> <actions> <action name="action" class="org.xebia.soa.esb.twitter.ConverterAction" /> </actions> </service> </services> Aktion Twitter twitter = new TwitterFactory(configurationBuilder.build()).getInstance(); // Query latest tweets of current user Query queryTweeted = new Query("from:" + USER_NAME); QueryResult tweeted = twitter.search(queryTweeted); // Execute search based on hashtag provided in message String qrySearch = "#" + message.getBody().get(); Query query = new Query(qrySearch); query.setSinceId(tweeted.getMaxId()); QueryResult result = twitter.search(query); // Add number of results to ESB message for further processing message.getBody().add("tweets", result.getTweets().size()); for (Tweet tweet : result.getTweets()) { // retweet it twitter.retweetStatus(tweet.getId()); } return message; Für den configurationBuilder müssen Sie das OAuth Access Token selbst erstellen, indem Sie Ihre Anwendung auf der Twitter-Website registrieren. Zunächst fragen wir die zuletzt getwitterte Nachricht des aktuellen Benutzers ab. Die ID dieses Tweets wird in der nächsten Abfrage verwendet, um nur die Tweets mit einer höheren ID abzurufen.Für jeden gefundenen Tweet retweeten wir diesen, indem wir die ursprüngliche ID übergeben. Beachten Sie, dass wir nur die ID und nicht die gesamte Nachricht übermitteln.

Schritt 4) Bereitstellen und viel Spaß Sie können maven verwenden, um daraus eine jar-Datei zu erstellen und diese auf dem JBoss AS bereitzustellen. Nach der Bereitstellung beginnt diese Anwendung, alle Tweets, die #Xebia enthalten, an Ihr eigenes Twitter-Konto zu retweeten.

Fazit Typische ESB-Anbieter unterstützen heutzutage Konnektoren für Webservices, Dateisysteme, JMS, ftp, ... Der nächste Schritt wäre die Erstellung von Konnektoren für soziale Medien wie Twitter, Facebook, ... Obwohl Sie mit JBoss ESB fast alles machen können, was Sie wollen, wäre eine große Verbesserung ein benutzerfreundlicheres Designer-Tool. Derzeit müssen Sie schnell auf hart kodierte xml-Dateien zurückgreifen, was schwierig sein kann. Es wäre schön, wenn man diesen ganzen Blogpost umschreiben könnte, indem man z.B. nur Drag & Drop Komponenten verwendet ;-) Mögliche Erweiterungen: Natürlich können Sie zusätzliche Aktionen hinzufügen, die den Inhalt der Nachrichten analysieren.

  • Nur positive Nachrichten tweeten
  • Ändern Sie Nachrichten, bevor Sie sie retweeten. Beispiel, fügen Sie immer #like hinzu
  • Tweets an andere soziale Medien weiterleiten
  • Organisieren Sie ein Spiel, bei dem Sie verfolgen, wer die meisten Tweets gesendet hat
  • Alle Tweets in E-Mails umwandeln
  • Alles, was Sie sonst noch gerne tun möchten...

Alle Codeschnipsel finden Sie in dieser Zip-Datei - Download Zip File Joris De Winne ist vor kurzem von Belgien in die Niederlande umgezogen und arbeitet jetzt für Xebia als IT-Architekt mit viel Erfahrung in den Bereichen Open Source und Agile/Scrum-Beratung.

Verfasst von

Joris De Winne

IT Architect @ Xebia

Contact

Let’s discuss how we can support your journey.