• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#objective-cqt誰得cocoawindowspythonphprubygameguibathyscaphec翻訳omegat計画中(planning stage)frameworktwittertestdombtronvb.netdirectxarduinopreviewerゲームエンジン

OpenTweenのfork


Commit MetaInfo

修訂7d5337d3b6f2adca148795d02a0867a5888b6e60 (tree)
時間2012-05-26 19:29:31
作者Kimura Youichi <kim.upsilon@bucy...>
CommiterKimura Youichi

Log Message

via.me のサムネイル表示に対応

twiccaのデフォルト画像投稿先が変わったので急遽対応

Change Summary

差異

--- a/OpenTween/Resources/ChangeLog.txt
+++ b/OpenTween/Resources/ChangeLog.txt
@@ -1,6 +1,7 @@
11 更新履歴
22
33 ==== Ver 1.0.3-beta1(2012/xx/xx)
4+ * NEW: via.me のサムネイル表示に対応
45 * CHG: yats-data.comのTwitter検索を削除 (サイト閉鎖のため)
56 * FIX: UserStreamsのイベントログ表示をEscキーで閉じられない問題を修正
67 * FIX: yfrogのサムネイルURL仕様変更に対応
--- a/OpenTween/Thumbnail.cs
+++ b/OpenTween/Thumbnail.cs
@@ -32,8 +32,12 @@ using System.Runtime.Serialization.Json;
3232 using System.Text;
3333 using System.Text.RegularExpressions;
3434 using System.Xml;
35+using System.Xml.Linq;
36+using System.Xml.XPath;
3537 using System.Drawing;
3638 using System.Windows.Forms;
39+using System.Collections;
40+using System.Linq;
3741
3842 namespace OpenTween
3943 {
@@ -169,6 +173,7 @@ namespace OpenTween
169173 new ThumbnailService("Twimg", Twimg_GetUrl, Twimg_CreateImage),
170174 new ThumbnailService("TwitrPix", TwitrPix_GetUrl, TwitrPix_CreateImage),
171175 new ThumbnailService("Pckles", Pckles_GetUrl, Pckles_CreateImage),
176+ new ThumbnailService("via.me", ViaMe_GetUrl, ViaMe_CreateImage),
172177 };
173178 }
174179
@@ -3236,5 +3241,80 @@ namespace OpenTween
32363241 }
32373242
32383243 #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
32393319 }
32403320 }