August 6 2013 EDIT
I rewrite this entry in English.
Integrating PrimeFaces Terminal sample with Twitter4j.
http://kikutaro777.hatenablog.com/entry/2013/08/06/202431
仕事でしばらくC#(しかも2.0のまま…VS2005…VSS…ぬぅ…)に戻るのでネタがないです(-_-;
そんなわけで、昨日TwitterでPrimeFacesのTerminalを利用されている方がいらっしゃったので、自分も使ってみたくなって遊んでみました(^^;
Twitter4shを作ってみる
普通にコマンド作ってもなぁ…と思って、少し前に遊んでいたTwitter4jを思い出し、Terminalとコラボしてみました(^^;
名付けてTwitter4sh
なんちゃって…完全に遊びレベルです。すみません。
コマンドは
- user :ユーザ情報に関するコマンド
- tweet:ツイートするコマンド
の2つ
userコマンドは「-i」で詳細情報を指定できて
- user -i name :ユーザ名を表示
- user -i follow :フォロー数を表示
- user -i follower:フォロワー数を表示
みたいな(^^;テキトーです。
実行結果
起動すると
それぞれコマンド打つと
で、Twitterみると
それっぽく動く(^^)/
コード
すごくしょぼいです。JSFのビューは以下だけ。Terminal置いただけですね;
promptが各行の先頭にでるプロンプトのしるしです。
welcomeMessageは起動時に表示される文言ですね。
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
<p:terminal commandHandler="#{terminalBean.handleCommand}"
prompt="Twitter4sh"
welcomeMessage="Welcome to Twitter4sh!"/>
</h:form>
</h:body>
</html>
JSF管理対象は以下。ここはCDI管理対象で作るほうが今やベターですが手抜きしました;
package com.mycompany.primefacesterminal;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;
@ManagedBean
@ViewScoped
public class TerminalBean implements Serializable{
private Twitter twitter;
@PostConstruct
public void init(){
twitter = new TwitterFactory().getInstance();
}
public String handleCommand(String command, String[] params) {
try {
if(command == null){
return "コマンド入力してください";
}else switch(command){
case "user":
User user = twitter.verifyCredentials();
if(params.length == 2){
if(params[0].equals("-i")){
switch(params[1]){
case "name":
return user.getName();
case "follow":
return Integer.toString(user.getFriendsCount());
case "follower":
return Integer.toString(user.getFollowersCount());
}
}else{
return "詳細情報は「-i」で指定してください";
}
}else{
return "使い方:user -i name/follow/follower";
}
case "tweet":
if(params.length == 1){
twitter.updateStatus(params[0]);
return "「" + params[0] + "」" + "とツイートしました。";
}else{
return "使い方:tweet ツイート文言";
}
default:
return "userコマンドまたはtweetコマンドを入力してください";
}
} catch (TwitterException ex) {
return "エラーです" + ex.getErrorMessage();
}
}
}
多分もっとシンプルで綺麗にかけると思いますが…(^^;
こんなサンプルが10分くらいで作れました。そう、Java EEとJSFならね!
とか言ってみたり。