2012年1月5日木曜日

twitter4jを使用してツイートするサンプルをHeroku上で動かす

RailsでHeroku上にTwitterサービスを作り始める場合「1時間でツイッターサービスを作ろう!」の記事が参考になる。
Railsもいいけど最近Androidでも活躍しているtwitter4jを使ってみたかったのでtwitter4jを使用して
ツイートをポストするWebアプリをHeroku上にデプロイしてみた。
twitter4jの作者である@yusukeさんのサンプルソースを流用するのでだいたい30分くらいで出来る。

事前準備

  • Gitインストール
  • Maven 3インストール
  • Herokuのアカウント作成
  • herokuコマンドインストール

Herokuアプリケーションの作成

$ heroku create --stack cedar
Creating blazing-mist-9962... done, stack is cedar
http://blazing-mist-9962.herokuapp.com/ | git@heroku.com:blazing-mist-9962.git

Twitterサービスの登録


https://dev.twitter.com/apps/newにアクセスして今回作成するサービスの情報を入力し登録する。
Callback URLはHerokuアプリケーションの作成時に表示されたURL + callback

Name(アプリケーション名):u1aryzの備忘録とか(任意)
Description(アプリケーションの説明):Herokuからtwitter4jを使用してツイートをポストするサンプル。(任意)
WebSite(ウェブサイトURL):http://u1aryz.blogspot.com/(任意)
Callback URL(コールバックURL):http://blazing-mist-9962.herokuapp.com/callback

登録し終わったらSettingsからApplication TypeをRead and Writeに変更。
Consumer keyとConsumer secretは後で使用するのでメモ。


twitter4jのサンプルソースをダウンロード


GitHubで公開されているtwitter4jのサンプルソースをダウンロードする。
yusuke / sign-in-with-twitter


Heroku(Jetty)用に修正&追加


pom.xml(修正)
<packaging>war</packaging>
↓変更
<packaging>jar</packaging>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.4</version>
  <scope>provided</scope>
</dependency>
↓変更
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
</dependency>

pom.xml(追記)
dependenciesの子ノードに下記を追加
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>7.4.5.v20110725</version>
</dependency>
<dependency>
  <groupId>taglibs</groupId>
  <artifactId>standard</artifactId>
  <version>1.1.2</version>
</dependency>
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jsp-2.1-glassfish</artifactId>
  <version>2.1.v20100127</version>
</dependency>

build,pluginsの子ノードに下記を追加
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>appassembler-maven-plugin</artifactId>
  <version>1.1.1</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>assemble</goal>
      </goals>
      <configuration>
        <assembleDirectory>target</assembleDirectory>
        <programs>
          <program>
            <mainClass>twitter4j.examples.signin.StartServer</mainClass>
            <name>webapp</name>
          </program>
        </programs>
      </configuration>
    </execution>
  </executions>
</plugin>

StartServer.java(新規)
package twitter4j.examples.signin;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

public class StartServer {

    public static void main(String[] args) throws Exception {

        Server server = new Server(Integer.valueOf(System.getenv("PORT")));
        WebAppContext context = new WebAppContext("src/main/webapp", "/");
        context.setDescriptor("WEB-INF/web.xml");
        server.setHandler(context);

        server.start();
        server.join();
    }

}


twitter4j.properties(修正)
twitter4j.oauth.consumerKeyとtwitter4j.oauth.consumerSecretにそれぞれ上記で登録した内容を入れる。
入力したらファイル自体をプロジェクト直下に移動する。

Procfile(新規)
下記内容でプロジェクト直下に作成する。
web: sh target/bin/webapp

Herokuにデプロイ


デプロイといってもソースをプッシュするだけ。
$ cd プロジェクトディレクトリ
$ git init
$ git add .
$ git commit -m "Generate twitter app."
$ git remote add heroku git@heroku.com:blazing-mist-9962.git
$ git push heroku master

ツイートしてみる

$ heroku open

ログイン後、コールバックURLが呼ばれ下記のようなページが表示される。

公式Twitterで確認出来る通り、ツイート出来ていることがわかる。

0 件のコメント:

コメントを投稿