dev
Revision | 608c926714d7cc920b3b994e6e90054ce655050c (tree) |
---|---|
Time | 2013-04-14 21:41:32 |
Author | Kimura Youichi <kim.upsilon@bucy...> |
Commiter | Kimura Youichi |
サードパーティ製サービスのパーマリンクURLからステータスIDを抽出して関連発言表示する
@@ -47,5 +47,21 @@ namespace OpenTween | ||
47 | 47 | return Twitter.StatusUrlRegex.Matches(url).Cast<Match>() |
48 | 48 | .Select(x => x.Groups["StatusId"].Value).ToArray(); |
49 | 49 | } |
50 | + | |
51 | + [TestCase("http://favstar.fm/users/twitterapi/status/22634515958", | |
52 | + Result = new[] { "22634515958" })] | |
53 | + [TestCase("http://ja.favstar.fm/users/twitterapi/status/22634515958", | |
54 | + Result = new[] { "22634515958" })] | |
55 | + [TestCase("http://favstar.fm/t/22634515958", | |
56 | + Result = new[] { "22634515958" })] | |
57 | + [TestCase("http://aclog.koba789.com/i/312485321239564288", | |
58 | + Result = new[] { "312485321239564288" })] | |
59 | + [TestCase("http://frtrt.net/solo_status.php?status=263483634307198977", | |
60 | + Result = new[] { "263483634307198977" })] | |
61 | + public string[] ThirdPartyStatusUrlRegexTest(string url) | |
62 | + { | |
63 | + return Twitter.ThirdPartyStatusUrlRegex.Matches(url).Cast<Match>() | |
64 | + .Select(x => x.Groups["StatusId"].Value).ToArray(); | |
65 | + } | |
50 | 66 | } |
51 | 67 | } |
@@ -3,6 +3,7 @@ | ||
3 | 3 | ==== Ver 1.1.0-beta1(2013/xx/xx) |
4 | 4 | * NEW: タブの表示位置を画面上部に変更可能に (thx @aokomoriuta!) |
5 | 5 | * NEW: mobile.twitter.com/<スクリーン名>/status/<ステータスID> のURLも関連発言表示の対象に追加 |
6 | + * NEW: Favstarなどサードパーティ製サービスのパーマリンクURLも関連発言表示の対象に追加 | |
6 | 7 | * FIX: スペースが含まれているURLをブラウザで開こうとするとURLが分断されて複数のタブが開いてしまう問題を修正 (thx @5px!) |
7 | 8 | * FIX: 画面更新時にInvalidOperationExceptionのエラーが発生する不具合を修正 |
8 | 9 |
@@ -122,6 +122,16 @@ namespace OpenTween | ||
122 | 122 | /// </summary> |
123 | 123 | public static readonly Regex StatusUrlRegex = new Regex(@"https?://([^.]+\.)?twitter\.com/(#!/)?(?<ScreenName>[a-zA-Z0-9_]+)/status(es)?/(?<StatusId>[0-9]+)(/photo)?", RegexOptions.IgnoreCase); |
124 | 124 | |
125 | + /// <summary> | |
126 | + /// FavstarやaclogなどTwitter関連サービスのパーマリンクURLからステータスIDを抽出する正規表現 | |
127 | + /// </summary> | |
128 | + public static readonly Regex ThirdPartyStatusUrlRegex = new Regex(@"https?://(?:[^.]+\.)?(?: | |
129 | + favstar\.fm/users/[a-zA-Z0-9_]+/status/ # Favstar | |
130 | +| favstar\.fm/t/ # Favstar (short) | |
131 | +| aclog\.koba789\.com/i/ # aclog | |
132 | +| frtrt\.net/solo_status\.php\?status= # RtRT | |
133 | +)(?<StatusId>[0-9]+)", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); | |
134 | + | |
125 | 135 | delegate void GetIconImageDelegate(PostClass post); |
126 | 136 | private readonly object LockObj = new object(); |
127 | 137 | private List<long> followerId = new List<long>(); |
@@ -2622,8 +2632,10 @@ namespace OpenTween | ||
2622 | 2632 | //return rslt; |
2623 | 2633 | |
2624 | 2634 | //MRTとかに対応のためツイート内にあるツイートを指すURLを取り込む |
2625 | - var ma = Twitter.StatusUrlRegex.Matches(tab.RelationTargetPost.Text); | |
2626 | - foreach (Match _match in ma) | |
2635 | + var text = tab.RelationTargetPost.Text; | |
2636 | + var ma = Twitter.StatusUrlRegex.Matches(text).Cast<Match>() | |
2637 | + .Concat(Twitter.ThirdPartyStatusUrlRegex.Matches(text).Cast<Match>()); | |
2638 | + foreach (var _match in ma) | |
2627 | 2639 | { |
2628 | 2640 | Int64 _statusId; |
2629 | 2641 | if (Int64.TryParse(_match.Groups["StatusId"].Value, out _statusId)) |