Twitter Development – Suche von Tweets

twitter-tZwar hat Twitter die Suchfunktion inzwischen stark ausgebaut, das Webinterface bietet aber immer noch recht wenig Komfort. Dieses Feld wurde jedoch in der Zwischenzeit von vielen Drittanbietern wie z.B. AskTwitr oder Monitter bestellt und ist mit Realtimesuchen, Suchen in der Region und verschiedenen Mitteilungsdiensten vollends versorgt. Ein ziemlich vollständige Liste der vorhandenen Suchanbieter ist hier zu finden. Selbst Google und Bing sind hier ebenfalls gut unterwegs und die entsprechenden Bots führen häufige Aktualisierungen der zentralen Indizes durch.
Selbstverständlich gilt dies auch für die API, welche diverse Methoden zur Suche und Speicherung von Suchaufträgen bietet. Nachfolgendes Beispiel listet diverse Möglichkeiten zur individuellen Suche und Weiterverarbeitung.
Let’s go:

package org.netways.api.twitter;
import java.util.List;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.SavedSearch;
import twitter4j.Twitter;
import twitter4j.TwitterException;
public class TwitterFunctions {
Twitter twitter;
public TwitterFunctions(String user, String password) {
twitter = new Twitter(user, password);
}
public SavedSearch saveSearch(String query) throws TwitterException {
SavedSearch search = twitter.createSavedSearch(query);
return search;
}
public List getSavedSearches() throws TwitterException {
List searches = twitter.getSavedSearches();
return searches;
}
public SavedSearch getSavedSearch(int id) throws TwitterException {
SavedSearch search = twitter.showSavedSearch(id);
return search;
}
public QueryResult getTweets(String searchString) throws TwitterException {
Query query = new Query(searchString);
QueryResult qs = twitter.search(query);
return qs;
}
public QueryResult getLocalTweets(String searchString,
double latitude,
double longtitude,
double radius) throws TwitterException {
Query query = new Query(searchString);
query.setGeoCode(latitude, longtitude, radius, Query.KILOMETERS);
QueryResult qs = twitter.search(query);
return qs;
}
}

Der Aufruf wird nun schon ein bisschen komplexer, da wir die diversen Ergebnisse kombinieren. Natürlich kein Hexenwerk.

package org.netways.api.twitter;
import java.util.Iterator;
import java.util.List;
import twitter4j.QueryResult;
import twitter4j.SavedSearch;
import twitter4j.Tweet;
public class TwitterApi {
/**
* @param args
*/
public static void main(String[] args) {
try {
TwitterFunctions tf = new TwitterFunctions("netways", "password");
List tweets;
Tweet tweet;
QueryResult qs;
Iterator it;
//create search
SavedSearch search = tf.saveSearch("nagios");
int searchId = search.getId();
//load search through api
search = null;
search = tf.getSavedSearch(searchId);
System.out.println("Saved Search: " + search.getId()
+ " with query " +  search.getQuery());
//search for netways
qs = tf.getTweets(search.getQuery());
tweets = qs.getTweets();
it = tweets.iterator();
while(it.hasNext()) {
tweet = it.next();
System.out.println("User " + tweet.getFromUser());
System.out.println("Text " + tweet.getText() + "\n");
}
//search for local netways tweets in nuremberg
qs = tf.getLocalTweets(search.getQuery(), 49.4477778, 11.0683333, 50);
tweets = qs.getTweets();
it = tweets.iterator();
while(it.hasNext()) {
tweet = it.next();
System.out.println("Tweets near Nurmberg");
System.out.println("User " + tweet.getFromUser());
System.out.println("Text " + tweet.getText() + "\n");
}
} catch (Exception e) {
System.err.println(e.toString());
}
}
}

Und hier der Output:

Saved Search: 931824 with query nagios
User freddrake
Text @vinodkk I don't know of any Nagios plugin libraries for Python.
Nagios plugins are simple enough not to need much.
User zhodd
Text Playing with the Netapp checks in Nagios
User darowh
Text Just installed Nagios, that was pretty easy - http://bit.ly/1VSy5v
....
Tweets near Nurmberg
User kandaras
Text Ich spiel hier grade mit nagios rum und das ist ja ein niedliches tool, hübsch.
Tweets near Nurmberg
User netways
Text New blog post: Nagios Benachrichtigungen per iPhone Push http://bit.ly/CJ2J9
....

Wer noch mehr Tweets aus Nürnberg rund um das Thema Nagios sucht, sollte vor allem auch unserem NETWAYS Twitter Account folgen.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.

Twitter Development – Friends und Followers II

twitter-tDer vergangene Blogpost verdeutlichte die Beziehung von Benutzer untereinander und die Möglickeit entsprechende Follower via API zu ermitteln. Zur Vervollständigung des Serienteils fehlt noch die Ermittlung der Benutzer, denen man selber folgt. Besonders wichtig ist hierbei das Verständnis für den Aufbau der API. Alle Objekte innerhalb des Twitter-Universums haben eindeutige IDs. Benutzer und Tweets können somit logisch verknüpft werden.
Ein Beispiel:
Benutzer A (ID 342354) antwortet Benutzer B (ID 434545) mit dem Tweet “Ich bin der selben Meinung” (ID 16676) auf den Tweet “Sehr ihr das auch so” (ID 45463). Mit diesen vier künstlichen Schlüsselelementen lässt sich jegliche Beziehung zwischen den Benutzer und deren Nachrichten erstellen. Dies ermöglicht verschiedenen Clients wie z. B. Nambu Replies einem ursprünglichen Tweets zuzuordnen. Twitter ist also weit mehr als eine ordnungslose Abfolge von Nachrichten. Mit Hilfe dieser IDs lassen sich auch komplexe Kommunikationsszenarien nachstellen.
Aber zurück zu den Friends bzw. Following. Die Methodensignatur ist identisch zur Ermittlung der Follower:

package org.netways.api.twitter;
import java.util.List;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.User;
public class TwitterFunctions {
Twitter twitter;
public TwitterFunctions(String user, String password) {
twitter = new Twitter(user, password);
}
public List getFollowing() throws TwitterException {
List following = twitter.getFriends();
return following;
}
}

Hier der Aufruf:

package org.netways.api.twitter;
import java.util.Iterator;
import java.util.List;
import twitter4j.User;
public class TwitterApi {
/**
* @param args
*/
public static void main(String[] args) {
try {
TwitterFunctions tf = new TwitterFunctions("netways", "password");
List users = tf.getFollowing();
Iterator it = users.iterator();
while(it.hasNext()) {
System.out.println(it.next().getScreenName());
}
} catch (Exception e) {
System.err.println(e.toString());
}
}
}

Output der Konsole:

goern
ratgeber24
stayfriendsde
derjoern
ffiene
RicRaftis
sherz
mfekry
stereofix
beginlinux
AdventureHarry
Ubuntuu
........

Der nächste Blogpost widmet sich dem Thema Twitter Timelines.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.

Twitter Development – Verbindung aufbauen

twitter-tTwitter ist ein sehr populärer Micro-Blogging Dienst, der seinen Erfolg großteils den vielen rund um ihn entstandenen Tools und Programmen zu verdanken hat. Vor allem, weil die Nutzung von Twitter durch die bereitgestellten API Funktionen besoners leicht ist.
Diese kleine Serie widmet sich der Verwendung der Java-API Twitter4J von Yusuke Yamamoto. Twitter4J schien mir die vollständigste und aktivste Java API für Twitter zu sein, aber der grundsätzliche Ansatz ist wohl API-übergreifend.
Die verwendete Funktionsweise zur Autorisierung der Benutzer ist ergänzend einen tiefergehenden Blick wert und basiert auf OAuth, welches die Freigabe von Informationen ohne Austauch von Benutzer und Passwort ermöglicht. Einen ausführlichen Beginners Guide gibt es bei Hueniverse.
Im ersten Beispiel bauen wir mal die Verbindung zu Twitter auf, was so einfach ist, dass sich die Definition einer eigenen Klasse eigentlich nicht lohnt, aber es soll auf Basis dieser Klassen in der Serie weiter gehen.

package org.netways.api.twitter;
import twitter4j.RateLimitStatus;
import twitter4j.Twitter;
import twitter4j.TwitterException;
public class TwitterFunctions {
	Twitter twitter;
	public TwitterFunctions(String user, String password) {
		twitter = new Twitter(user, password);
	}
	public int getHourlyLimit() throws TwitterException {
		RateLimitStatus rls = twitter.rateLimitStatus();
		return rls.getHourlyLimit();
	}
	public int getRemainingHits() throws TwitterException {
		RateLimitStatus rls = twitter.rateLimitStatus();
		return rls.getRemainingHits();
	}
}

Anschließend lassen wir uns unter Verwendung der Klasse RateLimitStatus gleich noch zurückgeben, ob wir noch ein paar Versuche frei haben, die Twitter-Services in Anspruch zu nehmen. Nachdem das aktuelle Limit vor kurzem von 100 auf 150 Calls erhöht wurde, haben wir also noch ein wenig Luft für weitere Übungen.

package org.netways.api.twitter;
public class TwitterApi {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			TwitterFunctions tf = new TwitterFunctions("netways", "password");
			System.out.println("Hourly Limit: "+tf.getHourlyLimit());
			System.out.println("Free Limit: "+tf.getRemainingHits());
		} catch (Exception e) {
			System.err.println(e.toString());
		}
	}
}

Der nächsten Blog-Post widmet sich den vorhandenen Userattributen und und Möglichkeiten zur Weiterverarbeitung.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.

Twitter Development Serie

twitter-tVorstellen muß man Twitter wohl nicht mehr, denn in der Zwischenzeit hat das Twitter-Fieber die Gruppe der reinen Computer Nerds schon längst verlassen ist und ist inzwischen in aller Munde. Neben den vielen Einsatzmöglichkeiten des Microblogging-Dienstes ist sicher auch die sehr einfache und vollständige API ein Grund für den großen Erfolg von Twitter. Noch dazu das diese auch noch hervorragend dokumentiert ist.
Entspechende Module, mit denen man die Twitter API in den unterschiedlichen Programmiersprachen einfach nutzen kann, gibt es inzwischen schon fast wie Sand am Meer. Die populärsten davon sind im Developmentbereich bei Twitter sauber aufgelistet und sortiert.
In meiner Serie will ich mich nun speziell der Java API für Twitter widmen und unseren Lesern einige Grundfunktionen dieses Dienstes vorstellen. Auf jeden Fall werde ich versuchen sowohl auf technischen Background und API Einsatz, als auch den angedachten Verwendungszweck der diversen Funktionen einzugehen. Vorerst sind folgende Themen geplant:

  • Verbindung mit Twitter aufbauen
  • Benutzerinformationen
  • Friends und Followers
  • Private und Public Timelines
  • Nachrichten Empfangen und Versenden
  • Replies und Mentions
  • Suche von Tweets
  • Zusammenfassung

Solltet ihr das ein oder andere Feature vermissen, so freue ich mich über Feedback. Morgen gehts los.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.

Eclipse 3.4.1 Ganymede

Eclipse 3.4.1 IconFür einen Softwareentwickler ist die Entwicklungsumgebung eines der wichtigsten Werkzeuge. In der Version 3.2 Europa gab es in der Vergangenheit unter Ubuntu einige Probleme. Beispielsweise stürzte die Entwicklungsumgebung alle 15 Minuten ab, auch eine Speicherzuweisung von 512 MB oder die Verwendung der neuesten Java Version halfen da nicht. Aber auch die Editoren haben ab und zu eine Denkpause eingelegt, d.h. man konnte zum Beispiel 20 Zeichen tippen und genau beobachten wie die einzelnen Zeichen in Zeitlupe erschienen.
Glücklicher Weise erschien am 17.06.08 Eclipse 3.4.0 Ganymede und mittlerweile wird schon Version 3.4.1 zum Download angeboten. Diese Eclipseversion läuft äußerst stabil und der Startvorgang ist deutlich schneller als die Vorgängerversion. Die Softwareupdatefunktion wurde zwar überarbeitet, aber dennoch klappen manche Installationen nicht beim 1. Mal. Aber man kann auf die klassische Softwareupdate zurück greifen. Unter “Preferences -> General -> Capabilities -> Classic Update” kann man diese Option freischalten und wie gewohnt benutzen.
Entwickler, die mit Hibernate und JBoss arbeiten, mussten 2 Monate warten bis die erste Version des JBoss Tools erschien. Diese Alphaversion läuft sehr stabil, auch wenn die Entwickler des Plugins vor Schäden am Rechner gewarnt haben, traten weder Fehler auf noch wurde der Rechner beschädigt.
Am 3.11.2008 erschien die Beta1 Version dies Plugins. Diese Beta1 Version ist ein wenig enttäuschend, denn schon die Installation ist frustrierend und klappte auch erst nach mehreren Anläufen. Möglicherweise liegt es auch an der neuen und überarbeiteten Softwareupdate von Eclipse. Die Beta1 Version läuft wesentlich schlechter als die Alphaversion, vom Gebrauch dieser Version ist abzuraten, denn einige Runtimevariablen wurden nicht erkannt oder ignoriert. Dadurch lassen sich die Fehler in der Fehlerkonsole nicht beseitigen. Auch die Darstellungen der Icons sind nicht korrekt, einige Editoren beispielsweise der JSP-Editor kann den gesamten Quellcode nicht farbig hervorheben. Der Quellcode wird stattdessen als simplen Text in Schwarz-weiß dargestellt und die Funktion zur Autoverfollständigung funktionierte auch nicht richtig.
Wer vernünftig arbeiten möchte, sollte unbedingt Eclipse 3.4.1 verwenden. Mit dem JBoss Tools in der Alpha Version ist man bestens bedient, empfehlenswert ist auch das Web Tools Platform Plugin. Dieses Plugin erweitert die Webeditoren um eine weitere Ansicht und ist ein Muss bei der Webentwicklung.