From 13e2af25d400721302a4a1b119acc3227b9aa476 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 22 Nov 2010 17:35:31 -0500 Subject: [PATCH] INT-1552 doc polishing --- docs/src/reference/docbook/twitter.xml | 141 +++++++++++++------------ 1 file changed, 72 insertions(+), 69 deletions(-) diff --git a/docs/src/reference/docbook/twitter.xml b/docs/src/reference/docbook/twitter.xml index 60198e8b2f..55dfd9bd42 100644 --- a/docs/src/reference/docbook/twitter.xml +++ b/docs/src/reference/docbook/twitter.xml @@ -5,7 +5,8 @@ Twitter Adapter Spring Integration provides support for interacting with Twitter. With the Twitter adapters you can both - receive and send Twitter messages. + receive and send Twitter messages. You can also perform a Twitter search based on a schedule and publish + the search results within Messages.
@@ -24,7 +25,8 @@ - Spring Integration provides a convenient namespace configuration to define Twitter artifacts. + Spring Integration provides a convenient namespace configuration to define Twitter artifacts. You can enable it by adding +the following within your XML header. @@ -36,13 +38,13 @@ xsi:schemaLocation="http://www.springframework.org/schema/integration/twitter The Twitter API allows for both authenticated and anonymous operations. For authenticated operations Twitter uses OAuth - - an authentication protocol that allows users to approve application to act on their behalf without - sharing their password. More information can be found at http://oauth.net/ or + - an authentication protocol that allows users to approve an application to act on their behalf without + sharing their password. More information can be found at http://oauth.net/ or in this article http://hueniverse.com/oauth/ from Hueniverse. Please also see OAuth FAQ for more information about OAuth and Twitter. - In order to use OAuth authentication/authorization with Twitter you must create new Application on the Twitter Developers site. + In order to use OAuth authentication/authorization with Twitter you must create a new Application on the Twitter Developers site. Follow the directions below to create a new application and obtain consumer keys and an access token: @@ -51,14 +53,14 @@ xsi:schemaLocation="http://www.springframework.org/schema/integration/twitter Go to http://dev.twitter.com/ - Click on Register an app link and fill out all required fields on the form provided; + Click on the Register an app link and fill out all required fields on the form provided; set Application Type to Client and depending on the nature of your application select Default Access Type as Read & Write or Read-only and Submit the form. If everything is successful you'll be presented with the Consumer Key - and Consumer Secret. Copy both values in the safe place. + and Consumer Secret. Copy both values in a safe place. - On the same page you should see My Access Token button on the side bar (right). + On the same page you should see a My Access Token button on the side bar (right). Click on it and you'll be presented with two more values: Access Token and Access Token Secret. Copy these values in a safe place as well. @@ -71,29 +73,29 @@ xsi:schemaLocation="http://www.springframework.org/schema/integration/twitter Spring Integration uses the same familiar template pattern to interact with Twitter. Since current Twitter support - is based on Twitter4J API we provide Twiter4JTemplate. - For anonymous operation (e.g., search) you don't have to define Twitter4JTemplate explicitly, since the default - instance of it will be created and injected into the endpoint. However, for authenticated operation - (e.g., update status, send direct message etc.) you must configure Twitter4JTemplate as a bean and - inject it explicitly into the endpoint. Below is a sample configuration of Twitter4JTemplate: - + is based on the Twitter4J API we provide a simple Twiter4JTemplate. + For anonymous operations (e.g., search), you don't have to define Twitter4JTemplate explicitly, since a default + instance will be created and injected into the endpoint. However, for authenticated operation + (update status, send direct message, etc.), you must configure Twitter4JTemplate as a bean and + inject it explicitly into the endpoint, because the authentication configuration is required. + Below is a sample configuration of Twitter4JTemplate: - + ]]> - The values above are not real + The values above are not real. - As you can see from the configuration above all we need to do is to provide - OAuth attributes as constructor arguments filling them with values you have obtained in the previous step. - The order of constructor arguments is: 1) consumerKey; 2) consumerSecret; - 3) accessToken; 4) accessTokenSecret; + As you can see from the configuration above, all we need to do is to provide + OAuth attributes as constructor arguments. The values would be those you obtained in the previous step. + The order of constructor arguments is: 1) consumerKey, 2) consumerSecret, + 3) accessToken, and 4) accessTokenSecret. - However a more practical way to manage OAuth connection attributes would be via Spring's placeholder support by simply + A more practical way to manage OAuth connection attributes would be via Spring's property placeholder support by simply creating a property file (e.g., oauth.properties): -and configuring a property-placeholder pointing to he above property file: + Then, you can configure a property-placeholder to point to the above property file: @@ -119,45 +121,47 @@ and configuring a property-placeholder pointing to he above propert Twitter Inbound Adapters Twitter inbound adapters allow you to receive Twitter Messages. There are several types of - twitter messages - tweets + twitter messages, or tweets - The current release of Spring Integration provides support for receiving tweets as Public Messages, - Direct Messages, Mention Messages as well as perform Searches + The current release of Spring Integration provides support for receiving tweets as Timeline Updates, + Direct Messages, Mention Messages as well as Search Results. - Every Inbound Twitter Channel Adapter is a Polling consumer which means you have to provide a poller - configuration. However, one important thing you must understand with regard to Twitter since its inner-workings are slightly - different then any other poling consumer. Twitter defines a concept of Rate Limiting. You can read more about - it here: Rate Limiting. In a nutshell Rate Limiting - is the way Twitter manages how often an application can poll for updates. Luckily for you you don't have to worry about it - since we are handling it internally polling for Messages (Tweets) from the Twitter account at the rate allowed by Twitter. + Every Inbound Twitter Channel Adapter is a Polling Consumer which means you have to provide a poller + configuration. However, there is one important thing you must understand about Twitter since its inner-workings are slightly + different than other polling consumers. Twitter defines a concept of Rate Limiting. You can read more about + it here: Rate Limiting. In a nutshell, Rate Limiting + is the way Twitter manages how often an application can poll for updates. You should consider this when setting your + poller intervals, but we are also doing a few things to limit excessively aggressive polling within our adapters. - Another issue that we need to worry about is handling of duplicates. The same adapter (e.g., Search or Timeline Update) + Another issue that we need to worry about is handling duplicate Tweets. The same adapter (e.g., Search or Timeline Update) while polling on Twitter may receive the same values more than once. For example if you keep searching on Twitter with the same search criteria you'll end up with the same set of tweets unless some other new tweet that matches your search criteria was posted in between your searches. In that situation you'll get all the tweets you had before plus the new one. But what you really - want is only the new tweet. Spring Integration provides an elegant mechanism for handling these situations. - The latest Tweet timestamp will be stored in the instance of the org.springframework.integration.store.MetadataStore which is a - strategy interface designed for storing various types of metadata (e.g., last retrieved tweet) to help components such as Twitter - to deal with duplicates. By default, Spring Integration will look for a bean of type org.springframework.integration.store.MetadataStore - in the ApplicationContext. If one found then it will be used, otherwise it will create a new instance of SimpleMetadataStore - which is a simple in-memory implementation that will only persist meta-data within the life-cycle of the application context - which means upon restart you may end up with duplicate entries. If you need to persist meta-data between Application Context - restarts, you may use PropertiesPersistingMetadataStore (property file based persister) or provide your - own implementation of the MetedataStore interface (e.g., JdbcMetadatStore) and configure it - as bean in the Application Context. + want is only the new tweet(s). Spring Integration provides an elegant mechanism for handling these situations. + The latest Tweet timestamp will be stored in an instance of the org.springframework.integration.store.MetadataStore which is a + strategy interface designed for storing various types of metadata (e.g., last retrieved tweet in this case). That strategy helps components such as + these Twitter adapters avoid duplicates. By default, Spring Integration will look for a bean of type + org.springframework.integration.store.MetadataStore in the ApplicationContext. + If one is found then it will be used, otherwise it will create a new instance of SimpleMetadataStore + which is a simple in-memory implementation that will only persist metadata within the lifecycle of the currently running application context. + That means upon restart you may end up with duplicate entries. If you need to persist metadata between Application Context + restarts, you may use the PropertiesPersistingMetadataStore (which is backed by a properties file, and a persister + strategy), or you may create your own custom implementation of the MetadataStore interface (e.g., JdbcMetadatStore) + and configure it as bean within the Application Context. ]]> -The Poller that is configured as part of the any Inbound Twitter Adapter (see below) will simply poll from this MetadataStore +The Poller that is configured as part of any Inbound Twitter Adapter (see below) will simply poll from this MetadataStore to determine the latest tweet +received.
Inbound Message Channel Adapter - This adapter allows you to receive updates from everyone you follow. + This adapter allows you to receive updates from everyone you follow. It's essentially the "Timeline Update" adapter. - + ]]>
@@ -165,9 +169,9 @@ The Poller that is configured as part of the any Inbound Twitter Adapter (see be
Direct Inbound Message Channel Adapter - This adapter allows you to receive Twitter Messages that were sent directly to you + This adapter allows you to receive Direct Messages that were sent to you from other Twitter users. - + ]]>
@@ -175,10 +179,10 @@ The Poller that is configured as part of the any Inbound Twitter Adapter (see be
Mentions Inbound Message Channel Adapter - This adapter allows you to receive Twitter Messages that Mention you via @user + This adapter allows you to receive Twitter Messages that Mention you via @user syntax. - + ]]>
@@ -186,11 +190,11 @@ The Poller that is configured as part of the any Inbound Twitter Adapter (see be As you can see the configuration of all of these adapters is very similar to other inbound adapters with one exception. - Some may need to be injected with the twitter-template. Once configured the Twitter Messages would be - encapsulated into a Spring Integration Message and sent to a channel specified via channel attribute. + Some may need to be injected with the twitter-template. Once received each Twitter Message would be + encapsulated in a Spring Integration Message and sent to the channel specified by the channel attribute. Currently the Payload type of any Message is org.springframework.integration.twitter.core.Tweet which is very similar to the object with the same name in Spring Social. As we migrate to Spring Social we'll be depending on their API and some of the artifacts that are currently in use will be obsolete, however we've already made sure that the impact of such migration is minimal by aligning our API with the current state (at the time of writing) - of Spring Social + of Spring Social. To get the text from the org.springframework.integration.twitter.core.Tweet - simply invoke getText() method. + simply invoke the getText() method.
Twitter Outbound Adapter - Twitter outbound channels adapters allow you to send Twitter Messages - tweets + Twitter outbound channel adapters allow you to send Twitter Messages, or tweets. - Current release of Spring Integration supports sending Status Update Messages and Direct Messages. - Twitter outbound channels adapters as any other outbound adapter will take the Message payload and send it as - Twitter message. Currently the only supported payload type is String, so consider adding a transformer - if the payload of the incoming message is not a String. + The current release of Spring Integration supports sending Status Update Messages and Direct Messages. + Twitter outbound channel adapters will take the Message payload and send it as a Twitter message. Currently the only supported payload type is + String, so consider adding a transformer if the payload of the incoming message is not a String.
Twitter Outbound Update Channel Adapter - This adapter allows you to send regular status updates by simply sending a Message to a channel - identified via channel attribute. + This adapter allows you to send regular status updates by simply sending a Message to the channel + identified by the channel attribute. ]]> - The only extra configuration that is required for this adapter is twitter-template + The only extra configuration that is required for this adapter is the twitter-template reference.
Twitter Outbound Direct Message Channel Adapter - This adapter allows you to send Direct Twitter Messages (i.e., @user) by simply sending a Message to a channel - identified via channel attribute. + This adapter allows you to send Direct Twitter Messages (i.e., @user) by simply sending a Message to the channel + identified by the channel attribute. ]]> - The only extra configuration that is required for this adapter is twitter-template + The only extra configuration that is required for this adapter is the twitter-template reference.
Twitter does not allow you to post duplicate Messages. This is a common problem during testing when - the same code works the first time but doesn't work the second time,so make sure to change the content of the Message. - One thing that works good for testing is to append a timestamp to the end of the message. + the same code works the first time but does not work the second time. So, make sure to change the content of the Message + each time. Another thing that works well for testing is to append a timestamp to the end of each message.