SpringBoot/Maven＋Twitter4jの環境を作るメモ。

あんまり頻繁にやらないのでメモ。



# ■前提

- Twitter のアプリケーション登録は済んでいる
  - Appsで `Create an app` 済み。
  - 各種トークン（`api-key` や `access-token`）生成済み。
- SpringBoot を使う環境は整っている
  - JDKのインストール
  - STSの導入

なお、SpringBootの環境構築に関してはこっちの記事を参考にどうぞ。
[SpringBootに入門するための助走本 - Qiita](https://qiita.com/sugaryo/items/5695bfcc21365f429767)

# ■使用するもの

- [SpringToolSuite4](https://spring.io/tools)
- SpringBoot/MAVEN
- [twitter4j](http://twitter4j.org/ja/index.html) と自分のツイッターアカウント。


# ■メモ

## SpringBootプロジェクトを作成

依存関係はお好きに。
ぼくは普段、この辺を入れてます。

- Web
- PostgreSQL
- JDBC
- JPA
- Lombock

[SpringInitializr](https://start.spring.io/) で生成するだけなので、詳しくは省略。

## pomに追記

[twitter4j 公式ページ](http://twitter4j.org/ja/index.html) を参考にして、`pom.xml` に dependency を追加。

```xml:pom.xml

      <dependency>
           <groupId>org.twitter4j</groupId>
           <artifactId>twitter4j-core</artifactId>
           <version>[4.0,)</version>
      </dependency>
```

これで `MavenDependencies` に `twitter4j-core-4.0.7` （現時点）が落ちてきました。

## TwitterAPI認証情報の確認（※ 仕様変更あり）

[開発者ページ](https://developer.twitter.com) に飛んで、[Apps](https://developer.twitter.com/en/apps) から作成済みのアプリ一覧を表示。

![WS000109.JPG](https://qiita-image-store.s3.amazonaws.com/0/170347/34ee0cd1-b242-bdc0-59b8-fcf9031f1dd6.jpeg)

![WS000975.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170347/615c6ce4-018a-1454-70a1-4fd930116878.jpeg)


使用するアプリの `Details` から詳細情報を表示。

~~`KeyAndTokens` タブを表示して、以下の情報を確認します。~~

- Api-key
- Api-secret-key
- ~~Access-token~~
- ~~Access-token-secret~~

**※だったんだけど、先日（2020-01-29）見に行ったら、アクセストークンのセキュリティが強化されてました。**

現在は、アクセストークンとアクセストークンシークレットは、**トークン生成時にしか表示できない仕様に変更**されています。
なので、アプリケーション詳細を表示して確認、ではなく、**確認したくなったらトークンを再生成する必要がある**、が正しいです。

## プロジェクトにtwitter4j.propertiesを追加

`application.properties` が置いてある `src/main/resources` の所に `twitter4j.properties` を新規作成して、上記で確認した `APIキー` と生成した `アクセストークン` をそれぞれ設定します。

```ini:twitter4j.properties
debug=true
oauth.consumerKey={api-key}
oauth.consumerSecret={api-secret-key}
oauth.accessToken={access-token}
oauth.accessTokenSecret={access-token-secret}
```

## 動作確認

取り敢えず適当なコードを書いて動作確認。

```java
import javax.annotation.PostConstruct;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.User;

@RestController
@RequestMapping("api/twt")
public class WebApiController {

	private static final Logger log = LoggerFactory.getLogger(WebApiController.class);

	private Twitter twitter;

	@PostConstruct
	private void ctor() {
		this.twitter = new TwitterFactory().getInstance();
	}

	@RequestMapping("user")
	public User user() throws Exception {
		User user = twitter.verifyCredentials();

		String userName = user.getName();
		String displayName = user.getScreenName();
		int fav = user.getFavouritesCount();

		log.info("名前：   {}", userName);
		log.info("表示：   {}", displayName);
		log.info("すき：   {}", fav);

		return user;
	}
}
```

ユーザ情報を取得して適当に返してみます。

`http://localhost:8080/api/twt/user` にアクセスして動作確認。

![WS000107.JPG](https://qiita-image-store.s3.amazonaws.com/0/170347/58becb7e-442f-7bef-64a9-408a4b0c7479.jpeg)

無事に動いたのでおっけーです。



# ■参考情報

昨年から、Twitter開発アカウントの申請、と言う手順が必要になっています。
既存アプリの管理だけなら行けるけど、新規アプリ作成やなんかには申請が必要なようで。

> Please apply for a Twitter developer account
> 
> You may continue managing your existing apps but if you would like to create new apps or use Twitter premium APIs, please apply for a developer account.
> As a developer platform, our first responsibility is to our users: to provide a place that supports the health of conversation on Twitter. To continue to prevent misuse of our platform, we have introduced a few new requirements for developers.

なんかこんな感じのメッセージが出ます。

この辺の記事が参考になりますが、とにかく新しくアプリが作りたければ申請する必要があるようです。

[新しくなった Twitter Developer ポータルに登録してみる - Qiita](https://qiita.com/tdkn/items/521686c240b0c5bc6207)