プロジェクト

全般

プロフィール

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

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

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