--- /dev/null
+// OpenTween - Client of Twitter
+// Copyright (c) 2013 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
+// All rights reserved.
+//
+// This file is part of OpenTween.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see <http://www.gnu.org/licenses/>, or write to
+// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using NUnit.Framework;
+
+namespace OpenTween
+{
+ [TestFixture]
+ class TwitterTest
+ {
+ [TestCase("https://twitter.com/twitterapi/status/22634515958",
+ Result = new[] { "22634515958" })]
+ [TestCase("<a target=\"_self\" href=\"https://t.co/aaaaaaaa\" title=\"https://twitter.com/twitterapi/status/22634515958\">twitter.com/twitterapi/stat…</a>",
+ Result = new[] { "22634515958" })]
+ [TestCase("<a target=\"_self\" href=\"https://t.co/bU3oR95KIy\" title=\"https://twitter.com/haru067/status/224782458816692224\">https://t.co/bU3oR95KIy</a>" +
+ "<a target=\"_self\" href=\"https://t.co/bbbbbbbb\" title=\"https://twitter.com/karno/status/311081657790771200\">https://t.co/bbbbbbbb</a>",
+ Result = new[] { "224782458816692224", "311081657790771200" })]
+ [TestCase("https://mobile.twitter.com/muji_net/status/21984934471",
+ Result = new[] { "21984934471" })]
+ [TestCase("https://twitter.com/imgazyobuzi/status/293333871171354624/photo/1",
+ Result = new[] { "293333871171354624" })]
+ public string[] StatusUrlRegexTest(string url)
+ {
+ return Twitter.StatusUrlRegex.Matches(url).Cast<Match>()
+ .Select(x => x.Groups["StatusId"].Value).ToArray();
+ }
+ }
+}
/// </summary>
public const string ServiceAvailabilityStatusUrl = "https://status.io.watchmouse.com/7617";
+ /// <summary>
+ /// ツイートへのパーマリンクURLを判定する正規表現
+ /// </summary>
+ public static readonly Regex StatusUrlRegex = new Regex(@"https?://([^.]+\.)?twitter\.com/(#!/)?(?<ScreenName>[a-zA-Z0-9_]+)/status(es)?/(?<StatusId>[0-9]+)(/photo)?", RegexOptions.IgnoreCase);
+
delegate void GetIconImageDelegate(PostClass post);
private readonly object LockObj = new object();
private List<long> followerId = new List<long>();
//}
//return rslt;
-
//MRTとかに対応のためツイート内にあるツイートを指すURLを取り込む
- var ma = Regex.Matches(tab.RelationTargetPost.Text, "title=\"https?://twitter.com/(#!/)?(?<ScreenName>[a-zA-Z0-9_]+)(/status(es)?/(?<StatusId>[0-9]+))\"");
+ var ma = Twitter.StatusUrlRegex.Matches(tab.RelationTargetPost.Text);
foreach (Match _match in ma)
{
Int64 _statusId;