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を選択します
スクリーンショット 2015-08-22 22.13.56.png
    • 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的话,您可以从这里进行设置。

スクリーンショット 2015-08-22 22.39.24.png

创建连接状态视图

    • 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()’ を実行

スクリーンショット 2015-08-22 23.25.31.png
    Terminalから実行
$ cd <project root>
$ ./gradlew bootRun

总结

    • Spring boot tutorialのAccessing Twitter Dataを写経していきました

 

    applicationのpropertyの設定や実行方法など、tutorialだけだとイマイチわかりにくいところも触れてみましたので、良かったら参考にしてみてください。
广告
将在 10 秒后关闭
bannerAds