From: Kimura Youichi Date: Sat, 22 Jan 2022 12:19:06 +0000 (+0900) Subject: Instagramのサムネイルを表示するURLのパターンを追加 X-Git-Tag: OpenTween_v2.5.0~20^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fc6f5d7236e7368cf97c13c04c72f2b4041b2d8b;p=opentween%2Fopen-tween.git Instagramのサムネイルを表示するURLのパターンを追加 --- diff --git a/OpenTween.Tests/Thumbnail/ThumbnailGeneratorTest.cs b/OpenTween.Tests/Thumbnail/ThumbnailGeneratorTest.cs new file mode 100644 index 00000000..0c61bd71 --- /dev/null +++ b/OpenTween.Tests/Thumbnail/ThumbnailGeneratorTest.cs @@ -0,0 +1,50 @@ +// OpenTween - Client of Twitter +// Copyright (c) 2022 kim_upsilon (@kim_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 , 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.Threading.Tasks; +using Xunit; + +namespace OpenTween.Thumbnail +{ + public class ThumbnailGeneratorTest + { + [Theory] + [InlineData("https://www.instagram.com/p/aaaaaaaaaaa/", "aaaaaaaaaaa")] + [InlineData("http://www.instagram.com/p/aaaaaaaaaaa/", "aaaaaaaaaaa")] + [InlineData("https://i.instagram.com/p/aaaaaaaaaaa/", "aaaaaaaaaaa")] + [InlineData("https://instagram.com/p/aaaaaaaaaaa/", "aaaaaaaaaaa")] + [InlineData("https://instagr.am/p/aaaaaaaaaaa/", "aaaaaaaaaaa")] + [InlineData("https://www.instagram.com/hogehoge/p/aaaaaaaaaaa/", "aaaaaaaaaaa")] // ユーザー名付き + [InlineData("https://www.instagram.com/p/aaaaaaaaaaa/?utm_medium=copy_link", "aaaaaaaaaaa")] // トラッキングパラメータ付き + [InlineData("https://www.instagram.com/hogehoge/", null)] // プロフィールページ + public void InstagramPattern_IsMatchTest(string testUrl, string expected) + { + var match = ThumbnailGenerator.InstagramPattern.Match(testUrl); + + var matchedMediaId = match.Success ? match.Groups["mediaId"].Value : null; + Assert.Equal(expected, matchedMediaId); + } + } +} diff --git a/OpenTween/Resources/ChangeLog.txt b/OpenTween/Resources/ChangeLog.txt index 75b85ffe..6bc611b2 100644 --- a/OpenTween/Resources/ChangeLog.txt +++ b/OpenTween/Resources/ChangeLog.txt @@ -2,6 +2,7 @@ ==== Ver 2.4.4-dev(2019/xx/xx) * CHG: pic.twitter.com の画像URLのフォーマット変更に対応 + * CHG: Instagramのサムネイルを表示するURLのパターンを追加 * FIX: DMの添付画像をブラウザで開く場合に使用するURLを変更 * FIX: 大文字アルファベットを含むハッシュタグがユーザー情報画面で正しくリンク化されない不具合を修正 (thx @naminodarie!) diff --git a/OpenTween/Thumbnail/Services/SimpleThumbnailService.cs b/OpenTween/Thumbnail/Services/SimpleThumbnailService.cs index 8de0cd5e..6b9d316f 100644 --- a/OpenTween/Thumbnail/Services/SimpleThumbnailService.cs +++ b/OpenTween/Thumbnail/Services/SimpleThumbnailService.cs @@ -48,8 +48,13 @@ namespace OpenTween.Thumbnail.Services } public SimpleThumbnailService(string pattern, string replacement, string? file_replacement) + : this(new Regex(pattern, RegexOptions.IgnoreCase), replacement, file_replacement) { - this.regex = new Regex(pattern, RegexOptions.IgnoreCase); + } + + public SimpleThumbnailService(Regex regex, string replacement, string? file_replacement) + { + this.regex = regex; this.thumb_replacement = replacement; this.fullsize_replacement = file_replacement; } diff --git a/OpenTween/Thumbnail/ThumbnailGenerator.cs b/OpenTween/Thumbnail/ThumbnailGenerator.cs index e84e4733..74b93ec2 100644 --- a/OpenTween/Thumbnail/ThumbnailGenerator.cs +++ b/OpenTween/Thumbnail/ThumbnailGenerator.cs @@ -36,6 +36,11 @@ namespace OpenTween.Thumbnail { class ThumbnailGenerator { + public static readonly Regex InstagramPattern = new Regex( + @"^https?://(?:instagram.com|instagr\.am|i\.instagram\.com|www\.instagram\.com)/([^/]+/)?p/(?[^/]+)/(\?.*)?$", + RegexOptions.IgnoreCase + ); + public static List Services { get; protected set; } internal static ImgAzyobuziNet ImgAzyobuziNetInstance { get; private set; } = null!; @@ -132,9 +137,9 @@ namespace OpenTween.Thumbnail // Instagram new SimpleThumbnailService( - @"^https?://(?:instagram.com|instagr\.am|i\.instagram\.com|www\.instagram\.com)/p/.+/", - "${0}media/?size=m", - "${0}media/?size=l"), + InstagramPattern, + "https://www.instagram.com/p/${mediaId}/media/?size=m", + "https://www.instagram.com/p/${mediaId}/media/?size=l"), // Foursquare new FoursquareCheckin(),