Spring Boot教程笔记 – 访问Twitter数据
由于春季社区会议即将到来,为了提高兴奋度并解决一些模糊的问题,我们最近回归基本。
为了记录下我在跟写Spring Boot Tutorial的Accessing Twitter Data时的笔记,决定用日语做笔记(对这样做有一种特殊的意义)。
在中国,人们经常说Twitter应用是Web应用的Hello world,但是我惊讶地发现,使用Spring Boot来调用Twitter API真的太简单了。
另外,在教程中我们使用了Java,但我打算尝试使用Groovy(虽然几乎是使用Java,并未使用Groovy特有的功能)。
教程的范围
从零开始创建项目,并在进行Twitter身份验证后,显示朋友列表。
有一个名为org.springframework.social.twitter.api.Twitter的类,通过它可以轻松调用Twitter API,因此可以获取好友列表,这意味着其他功能也可以轻松使用。
测试环境
-
- IntelliJ IDEA 14.1.3
-
- Groovy
- Gradle 2.3
在下面,我们将解释如何将以下教程的每个部分名称直接用作章节标题。
使用Gradle构建
- File > New > Project と選択して、下記の感じでGradleとGroovyを選択します

-
- Tutorialの How to complete this guide に従って、下記を行ってください
src配下のフォルダを作成
TwitterのAPIキー取得
build.gradleの作成
build.gradleは、今回groovyを使うということでtutorialと少しだけ変えました
group 'Tutorial'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.5.RELEASE")
}
}
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'groovy'
jar {
baseName = 'gs-accessing-twitter'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.11'
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.social:spring-social-twitter")
testCompile group: 'junit', name: 'junit', version: '4.11'
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
启用 Twitter
将从Twitter dev控制台获取到的AppID和Secret进行设置。在application.properties文件中进行设置,请尝试设置在application.yml文件中(无论哪种方式,结果都是一样的)。
spring.social:
twitter:
appId: <取ってきたapp ID>
appSecret: <取ってきたsecret>
据说,当应用程序的属性中具有这些设置(spring.social.twitter),并且 Spring Social Twitter 存在于项目的类路径中时,将触发 Spring Social 的 SocialConnect 和 TwitterConnectionFactory,以及 Spring Social 的连接框架的初始化。
如果你想切換開發和生產中的AppID,
可以參考以下方法。創建一個名為application-xxx.yml的文件,並在應用程序運行時的參數中添加 –spring.profiles.active=xxx,這樣就會讀取application-xxx.yml而不是application.yml。
如果使用IntelliJ的话,您可以从这里进行设置。

创建连接状态视图
-
- Spring social frameworkのConnectControllerは、/connect/{provider} (今回の場合、providerは “twitter”) へ来たGETリクエストに対し、connectionのstatusに応じて表示する画面を切り替える機能があります
-
- Connect状態の時
/connect/{provider}Connected
(今回の場合は/connect/twitterConnected)
Not connect状態の時
/connect/{provider}Connect
(今回の場合は/connect/twitterConnect)
もっと具体的に言うと、src/main/resources/template/connect/twitterConnected.html(twitterConnect.html)が、ConnectControllerによって使われるようになる、ということです
これらのhtmlはtutorialにありますので、そのままコピペします
那么怎么样才能创建连接并启动它呢?
-
- /connect/twitter へPOSTリクエストを送ることで、twitterの認証へredirectされます
- 認証が完了すると/connect/twitter (へのGETリクエスト) へredirectされますので、認証が取れていればtwitterConnected.htmlが表示されます
获取Twitter数据
-
- tutorialの中ではHelloControllerというクラスを作成してfriend一覧を表示するパスを作っています
- 下記メソッドにて、”/”へのアクセスに対してconnectionの有無で表示する画面を切り替えるということをしています
@RequestMapping(method=RequestMethod.GET)
public String helloTwitter(Model model) {
if (connectionRepository.findPrimaryConnection(Twitter.class) == null) {
return "redirect:/connect/twitter";
}
model.addAttribute(twitter.userOperations().getUserProfile());
CursoredList<TwitterProfile> friends = twitter.friendOperations().getFriends();
model.addAttribute("friends", friends);
return "hello";
}
-
- InjectionしたconnectionRepositoryへ問い合わせることでconnectionの有無が確認できるようです
twitterのconnectionが知りたいのであれば、Twitterのclassオブジェクトを渡すのですね
connectionが存在していれば、Twitterクラスオブジェクトをinjectionして、そこからAPI callができるようです
普通にgetFriends()と呼んでしまっていますね
使应用程序可执行
-
- ここはtwitterとは関係なので、そのまま従ってください
IntelliJから実行
Applicationクラスを右クリックして、Debug ‘Application main()’ を実行

- Terminalから実行
$ cd <project root>
$ ./gradlew bootRun
总结
-
- Spring boot tutorialのAccessing Twitter Dataを写経していきました
- applicationのpropertyの設定や実行方法など、tutorialだけだとイマイチわかりにくいところも触れてみましたので、良かったら参考にしてみてください。