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と対話するコンポーネントを作成することです。これが、このシリーズの次の記事の焦点となります。