プロジェクト

全般

プロフィール

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

github / src / com / mizo0203 / timeline / talker / TimelineTalker.java @ 493ff79f

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