Spring SocialのTwitterの設定
連載の最初の部分では、リンクの初期作業について説明しています。この「第2部」では、Spring Social Twitterプロジェクトを使用してTwitter REST APIと対話するために必要なサポートの設定に焦点を当てます。最終的な目標は、これらの質問を1日に2回、それぞれが1つのトピックに焦点を絞った複数のアカウントでツイートできるようにすることです。
1 Spring Social Twitter
を使用する
Spring Social Twitterプロジェクトを使用するために必要な依存関係は簡単です。まず、私たちは
spring-social-twitter
自体を定義します。
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-twitter</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
それから、その依存関係のいくつかを最新のバージョンで上書きする必要があります。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
spring-core
と
spring-web
はどちらも
spring-social-twitter
によって依存関係として定義されていますが、それぞれ
古いバージョン
–
3.0.7.RELEASE
と
3.1.0.RELEASE
を持ちます。これらを私たち自身のpomでオーバーライドすることで、プロジェクトはこれらの古い継承バージョンの代わりに私たちが定義した最新バージョンを使っていることを保証します。
2 Twitterアプリケーションを作成する
このユースケース – 自分のアカウント上の他のユーザーに代わってではなく
個人用アカウント
でツイートするのは簡単です。それが簡単であるという事実は私達がアプリケーションがのためにツイートする必要があるならば必要なhttp://stackoverflow.com/questions/7968641/spring-social-twitter-oauth/7970911#7970911[Outhオーケストレーション]のほとんどを省くことを可能にします各Twitterアカウントに複数のユーザー。
それで、あなたのユースケースのために、私たちが手動で私たちがそうする必要があるすべてをセットアップすることができるので、私たちは直接
Twitterテンプレート__を作成します
。
最初に必要なのは
devアプリケーション
です – ログインした後、https://dev.twitter.com/build/apis[ここで作成]することができます。
アプリケーションを作成した後、
Consumer Key
と
Consumer Secret
が表示されます。これらはアプリケーションのページの[詳細]タブの[認証設定]の下にあります。
また、アプリケーションにアカウントのツイートを許可するには、
ReadおよびWrite
Access
をデフォルトの
Read
のみの特権を置き換えるように設定する必要があります。
** 3
TwitterTemplate
をプロビジョニングする
**
次に、
TwitterTemplate
には
Access Token
と
Access Token Secret
をプロビジョニングする必要があります。これらは、[詳細]タブの[アプリケーション]ページから作成することもできます。
[自分のアクセストークンを作成する]
。
その後、アクセストークンとシークレットの両方を
OAuth tool
タブの下から取得できます。
[アクセストークンの作成]アクションを使用して、[詳細]タブで常に新しいものを再生成できます。
これで必要なものがすべて揃いました – Consumer KeyとConsumer Secret、Access TokenとAccess Token Secretです。つまり、そのアプリケーション用に
TwitterTemplate
を作成できるということです。
new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
4アカウントごとに1つのテンプレート
-
単一のアカウント** に対して単一の
TwitterTemplate
を作成する方法を見てきたので、もう一度ユースケースを振り返ってみましょう。複数のアカウントについてツイートする必要があります。
これらは簡単なメカニズムで、要求に応じて簡単に作成できます。
@Component
public class TwitterTemplateCreator {
@Autowired
private Environment env;
public Twitter getTwitterTemplate(String accountName) {
String consumerKey = env.getProperty(accountName + ".consumerKey");
String consumerSecret = env.getProperty(accountName + ".consumerSecret");
String accessToken = env.getProperty(accountName + ".accessToken");
String accessTokenSecret = env.getProperty(accountName + ".accessTokenSecret");
Preconditions.checkNotNull(consumerKey);
Preconditions.checkNotNull(consumerSecret);
Preconditions.checkNotNull(accessToken);
Preconditions.checkNotNull(accessTokenSecret);
TwitterTemplate twitterTemplate =
new TwitterTemplate(consumerKey, consumerSecret, accessToken, accessTokenSecret);
return twitterTemplate;
}
}
当然ながら、4つのセキュリティアーティファクトは
プロパティファイル
の中に外部化されています。たとえば、https://twitter.com/SpringTip[SpringAtSOアカウント]の場合:
SpringAtSO.consumerKey=nqYezCjxkHabaX6cdte12g
SpringAtSO.consumerSecret=7REmgFW4SnVWpD4EV5Zy9wB2ZEMM9WKxTaZwrgX3i4A
SpringAtSO.accessToken=1197830142-t44T7vwgmOnue8EoAxI1cDyDAEBAvple80s1SQ3
SpringAtSO.accessTokenSecret=ZIpghEJgFGNGQZzDFBT5TgsyeqDKY2zQmYsounPafE
これにより、柔軟性と安全性をうまく組み合わせることができます – セキュリティ認証情報はコードベース(https://github.com/eugenp/stackexchange2twitter[is opensource])の一部ではありませんが、ファイルシステム上で独立して存在し、Springによって採用されますそしてSpring環境では簡単な設定で利用できます。
@Configuration
@PropertySource({ "file:///opt/stack/twitter.properties" })
public class TwitterConfig {
//
}
Properties in Spring
はこれまで議論されてきた主題なので、ここではこれ以上詳しく説明しません。
最後に、
テスト
はアカウントがSpring Environmentですぐに利用可能な必要なセキュリティ情報を持っていることを検証するでしょう。プロパティが存在しない場合、
getTwitterTemplate
ロジックは
NullPointerException
でテストに失敗するはずです。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TwitterConfig.class })
public class TwitterTemplateCreatorIntegrationTest {
@Autowired
private TwitterTemplateCreator twitterTemplateCreator;
// @Test
public void givenValidAccountSpringAtSO__whenRetrievingTwitterClient__thenNoException() {
twitterTemplateCreator.getTwitterTemplate(SimpleTwitterAccount.SpringAtSO.name());
}
}
5つぶやき
TwitterTemplate
が作成されたら、実際の
ツイート
のアクションを見てみましょう。このために、
TwitterTemplate
を受け入れ、その基礎となるAPIを使用してツイートを作成し、非常に単純なサービスを使用します。
@Service
public class TwitterService {
private Logger logger = LoggerFactory.getLogger(getClass());
public void tweet(Twitter twitter, String tweetText) {
try {
twitter.timelineOperations().updateStatus(tweetText);
} catch (RuntimeException ex) {
logger.error("Unable to tweet" + tweetText, ex);
}
}
}
6.
TwitterTemplate
をテストする
そして最後に、あるアカウント用に
TwitterTemplate
をプロビジョニングし、そのアカウントにツイートするプロセス全体を実行するための統合テストを書くことができます。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TwitterConfig.class })
public class TweetServiceLiveTest {
@Autowired
private TwitterService twitterService;
@Autowired
private TwitterTemplateCreator twitterCreator;
@Test
public void whenTweeting__thenNoExceptions() {
Twitter twitterTemplate = twitterCreator.getTwitterTemplate("SpringAtSO");
twitterService.tweet(twitterTemplate, "First Tweet");
}
}
7. 結論
現時点では、私たちが作成したTwitter APIはStackExchange APIとは完全に別のものであり、特定のユースケースとは無関係に使用してツイートすることができます。
Stack Exchangeアカウントからの質問をツイートするプロセスの次の論理的なステップは、これまでに紹介したTwitterとStackExchangeの両方のAPIと対話するコンポーネントを作成することです。これが、このシリーズの次の記事の焦点となります。