OpenTweenのfork
修订版 | 7d5337d3b6f2adca148795d02a0867a5888b6e60 (tree) |
---|---|
时间 | 2012-05-26 19:29:31 |
作者 | Kimura Youichi <kim.upsilon@bucy...> |
Commiter | Kimura Youichi |
via.me のサムネイル表示に対応
twiccaのデフォルト画像投稿先が変わったので急遽対応
@@ -1,6 +1,7 @@ | ||
1 | 1 | 更新履歴 |
2 | 2 | |
3 | 3 | ==== Ver 1.0.3-beta1(2012/xx/xx) |
4 | + * NEW: via.me のサムネイル表示に対応 | |
4 | 5 | * CHG: yats-data.comのTwitter検索を削除 (サイト閉鎖のため) |
5 | 6 | * FIX: UserStreamsのイベントログ表示をEscキーで閉じられない問題を修正 |
6 | 7 | * FIX: yfrogのサムネイルURL仕様変更に対応 |
@@ -32,8 +32,12 @@ using System.Runtime.Serialization.Json; | ||
32 | 32 | using System.Text; |
33 | 33 | using System.Text.RegularExpressions; |
34 | 34 | using System.Xml; |
35 | +using System.Xml.Linq; | |
36 | +using System.Xml.XPath; | |
35 | 37 | using System.Drawing; |
36 | 38 | using System.Windows.Forms; |
39 | +using System.Collections; | |
40 | +using System.Linq; | |
37 | 41 | |
38 | 42 | namespace OpenTween |
39 | 43 | { |
@@ -169,6 +173,7 @@ namespace OpenTween | ||
169 | 173 | new ThumbnailService("Twimg", Twimg_GetUrl, Twimg_CreateImage), |
170 | 174 | new ThumbnailService("TwitrPix", TwitrPix_GetUrl, TwitrPix_CreateImage), |
171 | 175 | new ThumbnailService("Pckles", Pckles_GetUrl, Pckles_CreateImage), |
176 | + new ThumbnailService("via.me", ViaMe_GetUrl, ViaMe_CreateImage), | |
172 | 177 | }; |
173 | 178 | } |
174 | 179 |
@@ -3236,5 +3241,80 @@ namespace OpenTween | ||
3236 | 3241 | } |
3237 | 3242 | |
3238 | 3243 | #endregion |
3244 | + | |
3245 | + #region via.me | |
3246 | + | |
3247 | + /// <summary> | |
3248 | + /// URL解析部で呼び出されるサムネイル画像URL作成デリゲート | |
3249 | + /// </summary> | |
3250 | + /// <param name="args">class GetUrlArgs | |
3251 | + /// args.url URL文字列 | |
3252 | + /// args.imglist 解析成功した際にこのリストに元URL、サムネイルURLの形で作成するKeyValuePair | |
3253 | + /// </param> | |
3254 | + /// <returns>成功した場合True,失敗の場合False</returns> | |
3255 | + /// <remarks>args.imglistには呼び出しもとで使用しているimglistをそのまま渡すこと</remarks> | |
3256 | + | |
3257 | + private bool ViaMe_GetUrl(GetUrlArgs args) | |
3258 | + { | |
3259 | + // TODO URL判定処理を記述 | |
3260 | + var mc = Regex.Match(string.IsNullOrEmpty(args.extended) ? args.url : args.extended, | |
3261 | + @"^https?://via\.me/-(\w+)$", RegexOptions.IgnoreCase); | |
3262 | + if (mc.Success) | |
3263 | + { | |
3264 | + // TODO 成功時はサムネイルURLを作成しimglist.Addする | |
3265 | + args.imglist.Add(new KeyValuePair<string, string>(args.url, mc.Value)); | |
3266 | + return true; | |
3267 | + } | |
3268 | + return false; | |
3269 | + } | |
3270 | + | |
3271 | + /// <summary> | |
3272 | + /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート | |
3273 | + /// </summary> | |
3274 | + /// <param name="args">class CreateImageArgs | |
3275 | + /// KeyValuePair<string, string> url 元URLとサムネイルURLのKeyValuePair | |
3276 | + /// List<KeyValuePair<string, Image>> pics 元URLとサムネイル画像のKeyValuePair | |
3277 | + /// List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair | |
3278 | + /// string errmsg 取得に失敗した際のエラーメッセージ | |
3279 | + /// </param> | |
3280 | + /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse | |
3281 | + /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns> | |
3282 | + /// <remarks></remarks> | |
3283 | + private bool ViaMe_CreateImage(CreateImageArgs args) | |
3284 | + { | |
3285 | + var mc = Regex.Match(args.url.Value, @"^https?://via\.me/-(\w+)$", RegexOptions.IgnoreCase); | |
3286 | + var apiUrl = mc.Result("http://via.me/api/v1/posts/$1"); | |
3287 | + | |
3288 | + var src = ""; | |
3289 | + if ((new HttpVarious()).GetData(apiUrl, null, out src, 0, out args.errmsg, MyCommon.GetUserAgentString())) | |
3290 | + { | |
3291 | + using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(src), XmlDictionaryReaderQuotas.Max)) | |
3292 | + { | |
3293 | + var xElm = XElement.Load(jsonReader); | |
3294 | + var thumbUrlElm = ((IEnumerable)xElm.XPathEvaluate("/response/post/thumb_url/text()")).Cast<XText>().FirstOrDefault(); | |
3295 | + if (thumbUrlElm == null) | |
3296 | + { | |
3297 | + return false; | |
3298 | + } | |
3299 | + | |
3300 | + var thumbUrl = thumbUrlElm.Value; | |
3301 | + | |
3302 | + // TODO: サムネイル画像読み込み処理を記述します | |
3303 | + var img = (new HttpVarious()).GetImage(thumbUrl, args.url.Key, 10000, out args.errmsg); | |
3304 | + if (img == null) | |
3305 | + { | |
3306 | + return false; | |
3307 | + } | |
3308 | + // 成功した場合はURLに対応する画像、ツールチップテキストを登録 | |
3309 | + args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, img)); | |
3310 | + args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, "")); | |
3311 | + return true; | |
3312 | + } | |
3313 | + } | |
3314 | + | |
3315 | + return false; | |
3316 | + } | |
3317 | + | |
3318 | + #endregion | |
3239 | 3319 | } |
3240 | 3320 | } |