プロジェクト

全般

プロフィール

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

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

1
package com.mizo0203.timeline.talker;
2

    
3
import twitter4j.*;
4
import twitter4j.conf.Configuration;
5

    
6
import java.util.Locale;
7
import java.util.regex.Matcher;
8
import java.util.regex.Pattern;
9

    
10
public class TimelineTalker {
11

    
12
  /**
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
  private final TwitterStream mTwitterStream;
19
  private final Talker mTalker;
20

    
21
  public TimelineTalker(Configuration configuration, Talker talker) {
22
    mTwitterStream = new TwitterStreamFactory(configuration).getInstance();
23
    mTwitterStream.addListener(new OnStatusEvent());
24
    mTalker = talker;
25
  }
26

    
27
  public void start() {
28
    // OnStatusEvent に Twitter タイムラインが通知される
29
    mTwitterStream.user();
30
  }
31

    
32
  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
  private class OnStatusEvent implements StatusListener {
39

    
40
    public void onStatus(final Status status) {
41
      if (!LANG_JA.equalsIgnoreCase(status.getLang())) {
42
        return;
43
      }
44

    
45
      final StringBuffer buffer = new StringBuffer();
46

    
47
      if (status.isRetweet()) {
48
        Status retweetedStatus = status.getRetweetedStatus();
49
        buffer.append(getUserNameWithoutContext(status.getUser().getName()) + "さんがリツイート。");
50
        buffer.append(getUserNameWithoutContext(retweetedStatus.getUser().getName()) + "さんから、");
51
        buffer.append(retweetedStatus.getText());
52
      } else {
53
        buffer.append(getUserNameWithoutContext(status.getUser().getName()) + "さんから、");
54
        buffer.append(status.getText());
55
      }
56

    
57
      mTalker.talkAsync(UrlUtil.convURLEmpty(buffer).replaceAll("\n", "。"), mYukkuriVoice);
58

    
59
      // 読み上げは、霊夢と魔理沙が交互に行なう
60
      if (mYukkuriVoice == Talker.YukkuriVoice.REIMU) {
61
        mYukkuriVoice = Talker.YukkuriVoice.MARISA;
62
      } else {
63
        mYukkuriVoice = Talker.YukkuriVoice.REIMU;
64
      }
65

    
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
}
(4-4/5)