From 7d5337d3b6f2adca148795d02a0867a5888b6e60 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Sat, 26 May 2012 19:29:05 +0900 Subject: [PATCH] =?utf8?q?via.me=20=E3=81=AE=E3=82=B5=E3=83=A0=E3=83=8D?= =?utf8?q?=E3=82=A4=E3=83=AB=E8=A1=A8=E7=A4=BA=E3=81=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit twiccaのデフォルト画像投稿先が変わったので急遽対応 --- OpenTween/Resources/ChangeLog.txt | 1 + OpenTween/Thumbnail.cs | 80 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) diff --git a/OpenTween/Resources/ChangeLog.txt b/OpenTween/Resources/ChangeLog.txt index df2a6f13..8adf9006 100644 --- a/OpenTween/Resources/ChangeLog.txt +++ b/OpenTween/Resources/ChangeLog.txt @@ -1,6 +1,7 @@ 更新履歴 ==== Ver 1.0.3-beta1(2012/xx/xx) + * NEW: via.me のサムネイル表示に対応 * CHG: yats-data.comのTwitter検索を削除 (サイト閉鎖のため) * FIX: UserStreamsのイベントログ表示をEscキーで閉じられない問題を修正 * FIX: yfrogのサムネイルURL仕様変更に対応 diff --git a/OpenTween/Thumbnail.cs b/OpenTween/Thumbnail.cs index 4137c388..20640725 100644 --- a/OpenTween/Thumbnail.cs +++ b/OpenTween/Thumbnail.cs @@ -32,8 +32,12 @@ using System.Runtime.Serialization.Json; using System.Text; using System.Text.RegularExpressions; using System.Xml; +using System.Xml.Linq; +using System.Xml.XPath; using System.Drawing; using System.Windows.Forms; +using System.Collections; +using System.Linq; namespace OpenTween { @@ -169,6 +173,7 @@ namespace OpenTween new ThumbnailService("Twimg", Twimg_GetUrl, Twimg_CreateImage), new ThumbnailService("TwitrPix", TwitrPix_GetUrl, TwitrPix_CreateImage), new ThumbnailService("Pckles", Pckles_GetUrl, Pckles_CreateImage), + new ThumbnailService("via.me", ViaMe_GetUrl, ViaMe_CreateImage), }; } @@ -3236,5 +3241,80 @@ namespace OpenTween } #endregion + + #region via.me + + /// + /// URL解析部で呼び出されるサムネイル画像URL作成デリゲート + /// + /// class GetUrlArgs + /// args.url URL文字列 + /// args.imglist 解析成功した際にこのリストに元URL、サムネイルURLの形で作成するKeyValuePair + /// + /// 成功した場合True,失敗の場合False + /// args.imglistには呼び出しもとで使用しているimglistをそのまま渡すこと + + private bool ViaMe_GetUrl(GetUrlArgs args) + { + // TODO URL判定処理を記述 + var mc = Regex.Match(string.IsNullOrEmpty(args.extended) ? args.url : args.extended, + @"^https?://via\.me/-(\w+)$", RegexOptions.IgnoreCase); + if (mc.Success) + { + // TODO 成功時はサムネイルURLを作成しimglist.Addする + args.imglist.Add(new KeyValuePair(args.url, mc.Value)); + return true; + } + return false; + } + + /// + /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート + /// + /// class CreateImageArgs + /// KeyValuePair url 元URLとサムネイルURLのKeyValuePair + /// List> pics 元URLとサムネイル画像のKeyValuePair + /// List> tooltiptext 元URLとツールチップテキストのKeyValuePair + /// string errmsg 取得に失敗した際のエラーメッセージ + /// + /// サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse + /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる + /// + private bool ViaMe_CreateImage(CreateImageArgs args) + { + var mc = Regex.Match(args.url.Value, @"^https?://via\.me/-(\w+)$", RegexOptions.IgnoreCase); + var apiUrl = mc.Result("http://via.me/api/v1/posts/$1"); + + var src = ""; + if ((new HttpVarious()).GetData(apiUrl, null, out src, 0, out args.errmsg, MyCommon.GetUserAgentString())) + { + using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(src), XmlDictionaryReaderQuotas.Max)) + { + var xElm = XElement.Load(jsonReader); + var thumbUrlElm = ((IEnumerable)xElm.XPathEvaluate("/response/post/thumb_url/text()")).Cast().FirstOrDefault(); + if (thumbUrlElm == null) + { + return false; + } + + var thumbUrl = thumbUrlElm.Value; + + // TODO: サムネイル画像読み込み処理を記述します + var img = (new HttpVarious()).GetImage(thumbUrl, args.url.Key, 10000, out args.errmsg); + if (img == null) + { + return false; + } + // 成功した場合はURLに対応する画像、ツールチップテキストを登録 + args.pics.Add(new KeyValuePair(args.url.Key, img)); + args.tooltipText.Add(new KeyValuePair(args.url.Key, "")); + return true; + } + } + + return false; + } + + #endregion } } -- 2.11.0