プロジェクト

全般

プロフィール

ダウンロード (2.49 KB) 統計
| ブランチ: | タグ: | リビジョン:

github / src / com / mizo0203 / twitter / timeline / talker / TwitterTimelineTalker.java @ 3c5e61d4

1 df4ee0a0 みぞ@CrazyBeatCoder
package com.mizo0203.twitter.timeline.talker;
2
3 79a6e367 みぞ@CrazyBeatCoder
import java.util.Locale;
4 df4ee0a0 みぞ@CrazyBeatCoder
import twitter4j.StallWarning;
5
import twitter4j.Status;
6
import twitter4j.StatusDeletionNotice;
7
import twitter4j.StatusListener;
8
import twitter4j.TwitterStream;
9
import twitter4j.TwitterStreamFactory;
10
import twitter4j.conf.Configuration;
11
12
public class TwitterTimelineTalker {
13
14 79a6e367 みぞ@CrazyBeatCoder
  /**
15
   * ISO 639 言語コード - 日本語 (ja)
16
   */
17
  public static final String LANG_JA = Locale.JAPAN.getLanguage();
18
19
  private Talker.YukkuriVoice mYukkuriVoice = Talker.YukkuriVoice.REIMU;
20 df4ee0a0 みぞ@CrazyBeatCoder
  private final TwitterStream mTwitterStream;
21
  private final Talker mTalker;
22
23
  public TwitterTimelineTalker(Configuration configuration, Talker talker) {
24
    mTwitterStream = new TwitterStreamFactory(configuration).getInstance();
25 79a6e367 みぞ@CrazyBeatCoder
    mTwitterStream.addListener(new OnStatusEvent());
26 df4ee0a0 みぞ@CrazyBeatCoder
    mTalker = talker;
27
  }
28
29
  public void start() {
30 79a6e367 みぞ@CrazyBeatCoder
    // OnStatusEvent に Twitter タイムラインが通知される
31 df4ee0a0 みぞ@CrazyBeatCoder
    mTwitterStream.user();
32
  }
33
34 79a6e367 みぞ@CrazyBeatCoder
  private class OnStatusEvent implements StatusListener {
35 df4ee0a0 みぞ@CrazyBeatCoder
36
    public void onStatus(final Status status) {
37 79a6e367 みぞ@CrazyBeatCoder
      if (!LANG_JA.equalsIgnoreCase(status.getLang())) {
38 df4ee0a0 みぞ@CrazyBeatCoder
        return;
39
      }
40 79a6e367 みぞ@CrazyBeatCoder
41 df4ee0a0 みぞ@CrazyBeatCoder
      final StringBuffer buffer = new StringBuffer();
42 3c5e61d4 みぞ@CrazyBeatCoder
43
      if (status.isRetweet()) {
44
        Status retweetedStatus = status.getRetweetedStatus();
45
        buffer.append(status.getUser().getName() + "さんがリツイート。");
46
        buffer.append(retweetedStatus.getUser().getName() + "さんから、");
47
        buffer.append(retweetedStatus.getText());
48
      } else {
49
        buffer.append(status.getUser().getName() + "さんから、");
50
        buffer.append(status.getText());
51
      }
52 df4ee0a0 みぞ@CrazyBeatCoder
53 79a6e367 みぞ@CrazyBeatCoder
      mTalker.talkAsync(UrlUtil.convURLEmpty(buffer).replaceAll("\n", "。"), mYukkuriVoice);
54 df4ee0a0 みぞ@CrazyBeatCoder
55 79a6e367 みぞ@CrazyBeatCoder
      // 読み上げは、霊夢と魔理沙が交互に行なう
56
      if (mYukkuriVoice == Talker.YukkuriVoice.REIMU) {
57
        mYukkuriVoice = Talker.YukkuriVoice.MARISA;
58
      } else {
59
        mYukkuriVoice = Talker.YukkuriVoice.REIMU;
60
      }
61 df4ee0a0 みぞ@CrazyBeatCoder
62
    }
63
64
    public void onDeletionNotice(StatusDeletionNotice sdn) {
65
      System.err.println("onDeletionNotice.");
66
    }
67
68
    public void onTrackLimitationNotice(int i) {
69
      System.err.println("onTrackLimitationNotice.(" + i + ")");
70
    }
71
72
    public void onScrubGeo(long lat, long lng) {
73
      System.err.println("onScrubGeo.(" + lat + ", " + lng + ")");
74
    }
75
76
    public void onException(Exception excptn) {
77
      System.err.println("onException.");
78
    }
79
80
    @Override
81
    public void onStallWarning(StallWarning arg0) {}
82
  }
83
84
}