Ejemplo n.º 1
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool TwipplePhoto_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^http://p.twipple.jp/(?<contentId>[0-9a-z]+)", RegexOptions.IgnoreCase);
            if (!mc.Success)
            {
                return false;
            }

            var src = string.Empty;
            var http = new HttpVarious();
            if (!http.GetData(args.Url.Key, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            var contentId = mc.Groups["contentId"].Value;
            var thumbnailUrl = "http://p.twpl.jp/show/large/" + contentId;
            var img = http.GetImage(thumbnailUrl, args.Url.Key, 0, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Flickr_CreateImage(CreateImageArgs args)
        {
            /*

            // 参考: http://tanarky.blogspot.com/2010/03/flickr-urlunavailable.html アグレッシブエンジニア: flickr の画像URL仕様についてまとめ(Unavailable画像)
            // 画像URL仕様 http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_{size}.{extension}
            // photostreamなど複数の画像がある場合先頭の一つのみ認識と言うことにする
            // (二つ目のキャプチャ 一つ目の画像はユーザーアイコン)
            */
            string src = string.Empty;
            var http = new HttpVarious();
            if (!http.GetData(args.Url.Value, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            var mc = Regex.Match(args.Url.Value, "^http://www.flickr.com/", RegexOptions.IgnoreCase);
            var mc2 = Regex.Matches(src, mc.Result("http://farm[0-9]+\\.staticflickr\\.com/[0-9]+/.+?\\.([a-zA-Z]+)"));

            // 二つ以上キャプチャした場合先頭の一つだけ 一つだけの場合はユーザーアイコンしか取れなかった
            if (mc2.Count > 1)
            {
                var img = http.GetImage(mc2[1].Value, args.Url.Value, 0, ref args.Errmsg);
                if (img == null)
                {
                    return false;
                }

                args.AddTooltipInfo(args.Url.Key, string.Empty, img);
                return true;
            }

            args.Errmsg = "Pattern NotFound";
            return false;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">CreateImageArgs</param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool StreamZoo_CreateImage(CreateImageArgs args)
        {
            var src = string.Empty;
            if (!new HttpVarious().GetData(args.Url.Value, null, ref src, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return false;
            }

            // 	<meta property="og:image"  content="http://cdn.streamzoo.com/si_5790766_p194egkoms_lr.jpg" />
            var thummc = Regex.Match(src, "property=\"og:image\"(?: *)content=\"([^\"]+)\"", RegexOptions.IgnoreCase);
            if (!thummc.Success)
            {
                return false;
            }

            var thumburl = thummc.Result("$1");
            var img = new HttpVarious().GetImage(thumburl, args.Url.Value, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 4
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Instagram_CreateImage(CreateImageArgs args)
        {
            var src = string.Empty;
            var http = new HttpVarious();
            if (!http.GetData(args.Url.Value, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            var mc = Regex.Match(src, "<meta property=\"og:image\" content=\"(?<url>.+)\" ?/>");
            if (!mc.Success)
            {
                args.Errmsg = "Pattern NotFound";
                return false;
            }

            var img = http.GetImage(mc.Groups["url"].Value, args.Url.Key, 0, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">CreateImageArgs</param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        private static 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 = string.Empty;
            if (!new HttpVarious().GetData(apiUrl, null, ref src, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return false;
            }

            // "thumb_url":"http://img.viame-cdn.com/photos/0e267550-b6c4-012f-bf69-123138092a26/s150x150.jpg",
            var thummc = Regex.Match(src, "\"thumb_url\":\"([^\"]+)\"", RegexOptions.IgnoreCase);
            if (!thummc.Success)
            {
                return false;
            }

            var thumburl = thummc.Result("$1");
            var img = new HttpVarious().GetImage(thumburl, args.Url.Key, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool TwitterGeo_CreateImage(CreateImageArgs args)
        {
            var img = (new HttpVarious()).GetImage(args.Url.Value, args.Url.Key, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            // 成功した場合はURLに対応する画像、ツールチップテキストを登録
            string url = args.Url.Value;
            try
            {
                // URLをStaticMapAPIから通常のURLへ変換
                // 仕様:ズーム率、サムネイルサイズの設定は無視する
                // 参考:http://imakoko.didit.jp/imakoko_html/memo/parameters_google.html
                // サンプル
                // static版 http://maps.google.com/maps/api/staticmap?center=35.16959869,136.93813205&size=300x300&zoom=15&markers=35.16959869,136.93813205&sensor=false
                // 通常URL  http://maps.google.com/maps?ll=35.16959869,136.93813205&size=300x300&zoom=15&markers=35.16959869,136.93813205&sensor=false
                url = url.Replace("/maps/api/staticmap?center=", "?ll=");
                url = url.Replace("&markers=", "&q=");
                url = Regex.Replace(url, "&size=\\d+x\\d+&zoom=\\d+", string.Empty);
                url = url.Replace("&sensor=false", string.Empty);
            }
            catch (Exception)
            {
                url = args.Url.Value;
            }

            args.AddTooltipInfo(url, string.Empty, img);
            return true;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Lockerz_CreateImage(CreateImageArgs args)
        {
            var src = string.Empty;
            if (!new HttpVarious().GetData(args.Url.Value, null, ref src, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return false;
            }

            // <meta name="twitter:image" value="http://static.lockerz.com/decalz/original/image001366662197907nmgm7x.jpeg" />
            var thummc = Regex.Match(src, "name=\"twitter:image\" (?:value|content)=\"([^\"]+)\"", RegexOptions.IgnoreCase);
            if (!thummc.Success)
            {
                return false;
            }

            var thumburl = thummc.Result("$1");
            var img = new HttpVarious().GetImage(thumburl, args.Url.Key, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            // 成功した場合はURLに対応する画像、ツールチップテキストを登録
            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 8
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">CreateImageArgs</param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool MiilMe_CreateImage(CreateImageArgs args)
        {
            var photoId = new Uri(args.Url.Value).AbsolutePath.Split('/')[2];
            var apiUrl = $"http://miil.me/api/photos/{ToInt32(photoId, 36)}.js";

            var json = string.Empty;
            if (!new HttpVarious().GetData(apiUrl, null, ref json, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return false;
            }

            // name="twitter:image" content="http://images.miil.me/i/ab9f8cd6-9500-11e2-97f8-123143016634.jpg"
            var thummc = Regex.Match(json, "\"url\"\\s*:\\s*\"([^\"]+)\"", RegexOptions.IgnoreCase);
            if (!thummc.Success)
            {
                return false;
            }

            var thumburl = thummc.Result("$1");
            var img = new HttpVarious().GetImage(thumburl, args.Url.Key, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 9
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Piapro_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^http://piapro\\.jp/(?:content/[0-9a-z]+|t/[0-9a-zA-Z_\\-]+)$");
            if (!mc.Success)
            {
                return false;
            }

            string src = string.Empty;
            var http = new HttpVarious();
            if (!http.GetData(args.Url.Key, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            Match mc2 = Regex.Match(src, "<meta property=\"og:image\" content=\"(?<big_img>http://c1\\.piapro\\.jp/timg/[0-9a-z]+_\\d{14}_0500_0500\\.(?:jpg|png|gif)?)\" />");
            if (!mc2.Success)
            {
                args.Errmsg = "Pattern NotFound";
                return false;
            }

            // 各画像には120x120のサムネイルがある(多分)ので、URLを置き換える。元々ページに埋め込まれている画像は500x500
            var r = new Regex("_\\d{4}_\\d{4}");
            string minImgUrl = r.Replace(mc2.Groups["big_img"].Value, "_0120_0120");
            Image img = http.GetImage(minImgUrl, args.Url.Key, 0, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Tumblr_CreateImage(CreateImageArgs args)
        {
            var http = new HttpVarious();
            string targetUrl = args.Url.Value;
            string tmp = http.GetRedirectTo(targetUrl);
            while (!targetUrl.Equals(tmp))
            {
                targetUrl = tmp;
                tmp = http.GetRedirectTo(targetUrl);
            }

            Match mc = Regex.Match(targetUrl, "(?<base>http://.+?\\.tumblr\\.com/)post/(?<postID>[0-9]+)(/(?<subject>.+?)/)?", RegexOptions.IgnoreCase);
            string apiurl = mc.Groups["base"].Value + "api/read?id=" + mc.Groups["postID"].Value;
            string src = string.Empty;
            if (!http.GetData(apiurl, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            string imgurl;
            try
            {
                var xdoc = new XmlDocument();
                xdoc.LoadXml(src);
                string type = xdoc.SelectSingleNode("/tumblr/posts/post").Attributes["type"].Value;
                if (type == "photo")
                {
                    imgurl = xdoc.SelectSingleNode("/tumblr/posts/post/photo-url").InnerText;
                }
                else
                {
                    args.Errmsg = "PostType:" + type;
                    imgurl = string.Empty;
                }
            }
            catch (Exception)
            {
                imgurl = string.Empty;
            }

            if (!string.IsNullOrEmpty(imgurl))
            {
                Image img = http.GetImage(imgurl, args.Url.Key, 0, ref args.Errmsg);
                if (img == null)
                {
                    return false;
                }

                args.AddTooltipInfo(args.Url.Key, string.Empty, img);
                return true;
            }

            return false;
        }
Ejemplo n.º 11
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Twimg_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^https?://p\\.twimg\\.com/.*$", RegexOptions.IgnoreCase);
            if (!mc.Success)
            {
                return false;
            }

            var img = new HttpVarious().GetImage(args.Url.Value + ":thumb", string.Empty, 0, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 12
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Nicoseiga_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^http://(?:seiga\\.nicovideo\\.jp/seiga/|nico\\.ms/)im(?<id>\\d+)");
            if (!mc.Success)
            {
                return false;
            }

            var img = new HttpVarious().GetImage(string.Format("http://lohas.nicoseiga.jp/thumb/{0}q?", mc.Groups["id"].Value), args.Url.Key, 0, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 13
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Foursquare_CreateImage(CreateImageArgs args)
        {
            string tipsText = string.Empty;
            string mapsUrl = Foursquare.GetInstance.GetMapsUri(args.Url.Key, ref tipsText);
            if (string.IsNullOrEmpty(mapsUrl))
            {
                return false;
            }

            var img = new HttpVarious().GetImage(mapsUrl, args.Url.Key, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, tipsText, img);
            return true;
        }
Ejemplo n.º 14
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Photozou_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^http://photozou\\.jp/photo/show/(?<userId>[0-9]+)/(?<photoId>[0-9]+)", RegexOptions.IgnoreCase);
            if (!mc.Success)
            {
                return false;
            }

            string src = string.Empty;
            string apiUrl = mc.Result("http://api.photozou.jp/rest/photo_info?photo_id=${photoId}");
            var http = new HttpVarious();
            if (!http.GetData(apiUrl, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            string thumbnailUrl;
            try
            {
                var xdoc = new XmlDocument();
                xdoc.LoadXml(src);
                thumbnailUrl = xdoc.SelectSingleNode("/rsp/info/photo/thumbnail_image_url").InnerText;
            }
            catch (Exception ex)
            {
                args.Errmsg = ex.Message;
                thumbnailUrl = string.Empty;
            }

            if (string.IsNullOrEmpty(thumbnailUrl))
            {
                return false;
            }

            Image img = http.GetImage(thumbnailUrl, args.Url.Key);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 15
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Foursquare_CreateImage(CreateImageArgs args)
        {
            string tipsText = string.Empty;
            string mapsUrl  = Foursquare.GetInstance.GetMapsUri(args.Url.Key, ref tipsText);

            if (string.IsNullOrEmpty(mapsUrl))
            {
                return(false);
            }

            var img = new HttpVarious().GetImage(mapsUrl, args.Url.Key, 10000, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, tipsText, img);
            return(true);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Pixiv_CreateImage(CreateImageArgs args)
        {
            var url     = new Uri(args.Url.Value);
            var queries = HttpUtility.ParseQueryString(url.Query);

            if (!string.IsNullOrEmpty(queries["tag"]) && queries["tag"].StartsWith("R-18"))
            {
                args.Errmsg = "NotSupported";
                return(false);
            }

            //var mc = Regex.Match(args.Url.Value, "^http://www\\.pixiv\\.net/(member_illust|index)\\.php\\?mode=(medium|big)&(amp;)?illust_id=(?<illustId>[0-9]+)(&(amp;)?tag=(?<tag>.+)?)*$", RegexOptions.IgnoreCase);

            var    http = new HttpVarious();
            string src  = string.Empty;

            if (!http.GetData(Regex.Replace(args.Url.Value, "amp;", string.Empty), null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return(false);
            }

            // illustIDをキャプチャ
            var illustId = queries["illust_id"];
            var mc2      = Regex.Match(src, string.Format(@"http://i(mg)?([0-9]+)\.pixiv\.net/.+/img/.+/{0}_[ms]\.([a-zA-Z]+)", illustId));

            if (!mc2.Success)
            {
                args.Errmsg = Regex.Match(src, "<span class='error'>ログインしてください</span>").Success ? "NotSupported" : "Pattern NotFound";
                return(false);
            }

            var img = http.GetImage(mc2.Value, args.Url.Value, 0, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return(true);
        }
Ejemplo n.º 17
0
        private void Bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            var arg = (PreviewData)e.Argument;

            arg.AdditionalErrorMessage = string.Empty;

            foreach (var url in arg.Urls)
            {
                var args = new CreateImageArgs {
                    Url = url, Pics = arg.Pics, TooltipText = arg.TooltipText, Errmsg = string.Empty
                };
                if (!arg.ImageCreators[arg.Urls.IndexOf(url)].Value(args))
                {
                    arg.AdditionalErrorMessage = args.Errmsg;
                    arg.IsError = true;
                }
            }

            arg.IsError = arg.Pics.Count == 0;
            e.Result    = arg;
        }
Ejemplo n.º 18
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Piapro_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^http://piapro\\.jp/(?:content/[0-9a-z]+|t/[0-9a-zA-Z_\\-]+)$");

            if (!mc.Success)
            {
                return(false);
            }

            string src  = string.Empty;
            var    http = new HttpVarious();

            if (!http.GetData(args.Url.Key, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return(false);
            }

            Match mc2 = Regex.Match(src, "<meta property=\"og:image\" content=\"(?<big_img>http://c1\\.piapro\\.jp/timg/[0-9a-z]+_\\d{14}_0500_0500\\.(?:jpg|png|gif)?)\" />");

            if (!mc2.Success)
            {
                args.Errmsg = "Pattern NotFound";
                return(false);
            }

            // 各画像には120x120のサムネイルがある(多分)ので、URLを置き換える。元々ページに埋め込まれている画像は500x500
            var    r         = new Regex("_\\d{4}_\\d{4}");
            string minImgUrl = r.Replace(mc2.Groups["big_img"].Value, "_0120_0120");
            Image  img       = http.GetImage(minImgUrl, args.Url.Key, 0, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return(true);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Pixiv_CreateImage(CreateImageArgs args)
        {
            var url = new Uri(args.Url.Value);
            var queries = HttpUtility.ParseQueryString(url.Query);
            if (!string.IsNullOrEmpty(queries["tag"]) && queries["tag"].StartsWith("R-18"))
            {
                args.Errmsg = "NotSupported";
                return false;
            }

            //var mc = Regex.Match(args.Url.Value, "^http://www\\.pixiv\\.net/(member_illust|index)\\.php\\?mode=(medium|big)&(amp;)?illust_id=(?<illustId>[0-9]+)(&(amp;)?tag=(?<tag>.+)?)*$", RegexOptions.IgnoreCase);

            var http = new HttpVarious();
            string src = string.Empty;
            if (!http.GetData(Regex.Replace(args.Url.Value, "amp;", string.Empty), null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return false;
            }

            // illustIDをキャプチャ
            var illustId = queries["illust_id"];
            var mc2 = Regex.Match(src, string.Format(@"http://i(mg)?([0-9]+)\.pixiv\.net/.+/img/.+/{0}_[ms]\.([a-zA-Z]+)", illustId));
            if (!mc2.Success)
            {
                args.Errmsg = Regex.Match(src, "<span class='error'>ログインしてください</span>").Success ? "NotSupported" : "Pattern NotFound";
                return false;
            }

            var img = http.GetImage(mc2.Value, args.Url.Value, 0, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 20
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Flickr_CreateImage(CreateImageArgs args)
        {
            /*
             *
             * // 参考: http://tanarky.blogspot.com/2010/03/flickr-urlunavailable.html アグレッシブエンジニア: flickr の画像URL仕様についてまとめ(Unavailable画像)
             * // 画像URL仕様 http://farm{farm}.static.flickr.com/{server}/{id}_{secret}_{size}.{extension}
             * // photostreamなど複数の画像がある場合先頭の一つのみ認識と言うことにする
             * // (二つ目のキャプチャ 一つ目の画像はユーザーアイコン)
             */
            string src  = string.Empty;
            var    http = new HttpVarious();

            if (!http.GetData(args.Url.Value, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return(false);
            }

            var mc  = Regex.Match(args.Url.Value, "^http://www.flickr.com/", RegexOptions.IgnoreCase);
            var mc2 = Regex.Matches(src, mc.Result("http://farm[0-9]+\\.staticflickr\\.com/[0-9]+/.+?\\.([a-zA-Z]+)"));

            // 二つ以上キャプチャした場合先頭の一つだけ 一つだけの場合はユーザーアイコンしか取れなかった
            if (mc2.Count > 1)
            {
                var img = http.GetImage(mc2[1].Value, args.Url.Value, 0, ref args.Errmsg);
                if (img == null)
                {
                    return(false);
                }

                args.AddTooltipInfo(args.Url.Key, string.Empty, img);
                return(true);
            }

            args.Errmsg = "Pattern NotFound";
            return(false);
        }
Ejemplo n.º 21
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">CreateImageArgs</param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool My365_CreateImage(CreateImageArgs args)
        {
            var src = string.Empty;
            if (!new HttpVarious().GetData(args.Url.Value, null, ref src, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return false;
            }

            var thummc = Regex.Match(src, "property=\"og:image\" content=\"([^\"]+)\"", RegexOptions.IgnoreCase);
            if (!thummc.Success)
            {
                return false;
            }

            var thumburl = thummc.Result("$1");
            var img = new HttpVarious().GetImage(thumburl, args.Url.Key, 10000, ref args.Errmsg);
            if (img == null)
            {
                return false;
            }

            args.AddTooltipInfo(args.Url.Key, string.Empty, img);
            return true;
        }
Ejemplo n.º 22
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool Tumblr_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            var http = new HttpVarious();
            var TargetUrl = args.url.Value;
            var tmp = http.GetRedirectTo(TargetUrl);
            while (!TargetUrl.Equals(tmp))
            {
                TargetUrl = tmp;
                tmp = http.GetRedirectTo(TargetUrl);
            }
            var mc = Regex.Match(TargetUrl, @"(?<base>http://.+?\.tumblr\.com/)post/(?<postID>[0-9]+)(/(?<subject>.+?)/)?", RegexOptions.IgnoreCase);
            var apiurl = mc.Groups["base"].Value + "api/read?id=" + mc.Groups["postID"].Value;
            var src = "";
            string imgurl = null;
            if (http.GetData(apiurl, null, out src, 0, out args.errmsg, ""))
            {
                var xdoc = new XmlDocument();
                try
                {
                    xdoc.LoadXml(src);

                    var type = xdoc.SelectSingleNode("/tumblr/posts/post").Attributes["type"].Value;
                    if (type == "photo")
                    {
                        imgurl = xdoc.SelectSingleNode("/tumblr/posts/post/photo-url").InnerText;
                    }
                    else
                    {
                        args.errmsg = "PostType:" + type;
                        imgurl = "";
                    }
                }
                catch(Exception)
                {
                    imgurl = "";
                }

                if (!string.IsNullOrEmpty(imgurl))
                {
                    var _img = http.GetImage(imgurl, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
            }
            return false;
        }
Ejemplo n.º 23
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Tinami_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^http://www\.tinami\.com/view/(?<ContentId>\d+)$", RegexOptions.IgnoreCase);
     if (mc.Success)
     {
         var src = "";
         var ContentInfo = mc.Result("http://api.tinami.com/content/info?api_key=" + ApplicationSettings.TINAMIApiKey +
                                     "&cont_id=${ContentId}");
         if (http.GetData(ContentInfo, null, out src, 0, out args.errmsg, ""))
         {
             var xdoc = new XmlDocument();
             var thumbnail_url = "";
             try
             {
                 xdoc.LoadXml(src);
                 var stat = xdoc.SelectSingleNode("/rsp").Attributes.GetNamedItem("stat").InnerText;
                 if (stat == "ok")
                 {
                     if (xdoc.SelectSingleNode("/rsp/content/thumbnails/thumbnail_150x150") != null)
                     {
                         var nd = xdoc.SelectSingleNode("/rsp/content/thumbnails/thumbnail_150x150");
                         thumbnail_url = nd.Attributes.GetNamedItem("url").InnerText;
                         if (string.IsNullOrEmpty(thumbnail_url)) return false;
                         var _img = http.GetImage(thumbnail_url, args.url.Key);
                         if (_img == null) return false;
                         args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                         args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                         return true;
                     }
                     else
                     {
                         //エラー処理 エラーメッセージが返ってきた場合はここで処理
                         if (xdoc.SelectSingleNode("/rsp/err") != null)
                         {
                             args.errmsg = xdoc.SelectSingleNode("/rsp/err").Attributes.GetNamedItem("msg").InnerText;
                         }
                         return false;
                     }
                 }
                 else
                 {
                     // TODO rsp stat=failの際のエラーメッセージ返却はAPI拡張待ち(2011/8/2要望済み)
                     // TODO 後日APIレスポンスを確認し修正すること
                     if (xdoc.SelectSingleNode("/rsp/err") != null)
                     {
                         args.errmsg = xdoc.SelectSingleNode("/rsp/err").Attributes.GetNamedItem("msg").InnerText;
                     }
                     else
                     {
                         args.errmsg = "DeletedOrSuspended";
                     }
                     return false;
                 }
             }
             catch(Exception ex)
             {
                 args.errmsg = ex.Message;
                 return false;
             }
         }
     }
     return false;
 }
Ejemplo n.º 24
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool PhotoShare_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 25
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool ImgUr_CreateImage(CreateImageArgs args)
 {
     var img = (new HttpVarious()).GetImage(args.url.Value, args.url.Key, 10000, out args.errmsg);
     if (img == null)
     {
         return false;
     }
     args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, img));
     args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
     return true;
 }
Ejemplo n.º 26
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool flickr_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            //参考: http://tanarky.blogspot.com/2010/03/flickr-urlunavailable.html アグレッシブエンジニア: flickr の画像URL仕様についてまとめ(Unavailable画像)
            //画像URL仕様 http://farm{farm}.staticflickr.com/{server}/{id}_{secret}_{size}.{extension}
            //photostreamなど複数の画像がある場合先頭の一つのみ認識と言うことにする
            //(二つ目のキャプチャ 一つ目の画像はユーザーアイコン)

            var src = "";
            var mc = Regex.Match(args.url.Value, "^http://www.flickr.com/", RegexOptions.IgnoreCase);
            var http = new HttpVarious();
            if (http.GetData(args.url.Value, null, out src, 0, out args.errmsg, ""))
            {
                var _mc = Regex.Matches(src, mc.Result(@"http://farm[0-9]+\.staticflickr\.com/[0-9]+/.+?\.([a-zA-Z]+)"));
                //二つ以上キャプチャした場合先頭の一つだけ 一つだけの場合はユーザーアイコンしか取れなかった
                if (_mc.Count > 1)
                {
                    var _img = http.GetImage(_mc[1].Value, args.url.Value, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
                else
                {
                    args.errmsg = "Pattern NotFound";
                }
            }
            return false;
        }
Ejemplo n.º 27
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool youtube_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            // 参考
            // http://code.google.com/intl/ja/apis/youtube/2.0/developers_guide_protocol_video_entries.html
            // デベロッパー ガイド: Data API プロトコル - 単独の動画情報の取得 - YouTube の API とツール - Google Code
            // http://code.google.com/intl/ja/apis/youtube/2.0/developers_guide_protocol_understanding_video_feeds.html#Understanding_Feeds_and_Entries
            // デベロッパー ガイド: Data API プロトコル - 動画のフィードとエントリについて - YouTube の API とツール - Google Code
            var imgurl = "";
            var mcImg = Regex.Match(args.url.Value, @"^http://(?:(www\.youtube\.com)|(youtu\.be))/(watch\?v=)?(?<videoid>([\w\-]+))", RegexOptions.IgnoreCase);
            if (mcImg.Success)
            {
                imgurl = mcImg.Result("http://i.ytimg.com/vi/${videoid}/default.jpg");
            }
            else
            {
                return false;
            }
            var videourl = (new HttpVarious()).GetRedirectTo(args.url.Value);
            var mc = Regex.Match(videourl, @"^http://(?:(www\.youtube\.com)|(youtu\.be))/(watch\?v=)?(?<videoid>([\w\-]+))", RegexOptions.IgnoreCase);
            if (videourl.StartsWith("http://www.youtube.com/index?ytsession="))
            {
                videourl = args.url.Value;
                mc = Regex.Match(videourl, @"^http://(?:(www\.youtube\.com)|(youtu\.be))/(watch\?v=)?(?<videoid>([\w\-]+))", RegexOptions.IgnoreCase);
            }
            if (mc.Success)
            {
                var apiurl = "http://gdata.youtube.com/feeds/api/videos/" + mc.Groups["videoid"].Value;
                var src = "";
                if ((new HttpVarious()).GetData(apiurl, null, out src, 5000))
                {
                    var sb = new StringBuilder();
                    var xdoc = new XmlDocument();
                    try
                    {
                        xdoc.LoadXml(src);
                        var nsmgr = new XmlNamespaceManager(xdoc.NameTable);
                        nsmgr.AddNamespace("root", "http://www.w3.org/2005/Atom");
                        nsmgr.AddNamespace("app", "http://purl.org/atom/app#");
                        nsmgr.AddNamespace("media", "http://search.yahoo.com/mrss/");

                        var xentryNode = xdoc.DocumentElement.SelectSingleNode("/root:entry/media:group", nsmgr);
                        var xentry = (XmlElement)xentryNode;
                        var tmp = "";
                        try
                        {
                            tmp = xentry["media:title"].InnerText;
                            if (!string.IsNullOrEmpty(tmp))
                            {
                                sb.Append(Properties.Resources.YouTubeInfoText1);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {
                        }

                        try
                        {
                            var sec = 0;
                            if (int.TryParse(xentry["yt:duration"].Attributes["seconds"].Value, out sec))
                            {
                                sb.Append(Properties.Resources.YouTubeInfoText2);
                                sb.AppendFormat("{0:d}:{1:d2}", sec / 60, sec % 60);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {
                        }

                        try
                        {
                            var tmpdate = new DateTime();
                            xentry = (XmlElement)xdoc.DocumentElement.SelectSingleNode("/root:entry", nsmgr);
                            if (DateTime.TryParse(xentry["published"].InnerText, out tmpdate))
                            {
                                sb.Append(Properties.Resources.YouTubeInfoText3);
                                sb.Append(tmpdate);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {
                        }

                        try
                        {
                            var count = 0;
                            xentry = (XmlElement)xdoc.DocumentElement.SelectSingleNode("/root:entry", nsmgr);
                            tmp = xentry["yt:statistics"].Attributes["viewCount"].Value;
                            if (int.TryParse(tmp, out count))
                            {
                                sb.Append(Properties.Resources.YouTubeInfoText4);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {
                        }

                        try
                        {
                            xentry = (XmlElement)xdoc.DocumentElement.SelectSingleNode("/root:entry/app:control", nsmgr);
                            if (xentry != null)
                            {
                                sb.Append(xentry["yt:state"].Attributes["name"].Value);
                                sb.Append(":");
                                sb.Append(xentry["yt:state"].InnerText);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {
                        }

                        //mc = Regex.Match(videourl, @"^http://www\.youtube\.com/watch\?v=([\w\-]+)", RegexOptions.IgnoreCase)
                        //if (mc.Success)
                        //{
                        //    imgurl = mc.Result("http://i.ytimg.com/vi/${1}/default.jpg");
                        //}
                        //mc = Regex.Match(videourl, @"^http://youtu\.be/([\w\-]+)", RegexOptions.IgnoreCase)
                        //if (mc.Success)
                        //{
                        //    imgurl = mc.Result("http://i.ytimg.com/vi/${1}/default.jpg");
                        //}

                    }
                    catch(Exception)
                    {

                    }

                    if (!string.IsNullOrEmpty(imgurl))
                    {
                        var http = new HttpVarious();
                        var _img = http.GetImage(imgurl, videourl, 10000, out args.errmsg);
                        if (_img == null) return false;
                        args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                        args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, sb.ToString().Trim()));
                        return true;
                    }
                }

            }
            return false;
        }
Ejemplo n.º 28
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        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 = xElm.XPathSelectElement("/response/post/thumb_url");
                    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<string, Image>(args.url.Key, img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
            }

            return false;
        }
Ejemplo n.º 29
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Nicovideo_CreateImage(CreateImageArgs args)
        {
            var    mc     = Regex.Match(args.Url.Value, "^http://(?:(www|ext)\\.nicovideo\\.jp/watch|nico\\.ms)/(?<id>(?:sm|nm)?([0-9]+))(\\?.+)?$", RegexOptions.IgnoreCase);
            string apiurl = "http://www.nicovideo.jp/api/getthumbinfo/" + mc.Groups["id"].Value;
            string src    = string.Empty;

            if (!(new HttpVarious()).GetData(apiurl, null, ref src, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return(false);
            }

            var    sb = new StringBuilder();
            string imgurl;

            try
            {
                var xdoc = new XmlDocument();
                xdoc.LoadXml(src);
                string status = xdoc.SelectSingleNode("/nicovideo_thumb_response").Attributes["status"].Value;
                if (status != "ok")
                {
                    imgurl      = string.Empty;
                    args.Errmsg = status == "fail" ? xdoc.SelectSingleNode("/nicovideo_thumb_response/error/code").InnerText : "UnknownResponse";
                }
                else
                {
                    TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/thumbnail_url", out imgurl);
                    string tmp;
                    if (TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/title", out tmp))
                    {
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.AppendLine(R.NiconicoInfoText1 + tmp);
                        }
                    }

                    if (TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/length", out tmp))
                    {
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.AppendLine(R.NiconicoInfoText2 + tmp);
                        }
                    }

                    if (TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/first_retrieve", out tmp))
                    {
                        DateTime tm;
                        if (DateTime.TryParse(tmp, out tm))
                        {
                            sb.AppendLine(R.NiconicoInfoText3 + tm);
                        }
                    }

                    if (TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/view_counter", out tmp))
                    {
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.AppendLine(R.NiconicoInfoText4 + tmp);
                        }
                    }

                    if (TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/comment_num", out tmp))
                    {
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.AppendLine(R.NiconicoInfoText5 + tmp);
                        }
                    }

                    if (TryGetSingleNodeText(xdoc, "/nicovideo_thumb_response/thumb/mylist_counter", out tmp))
                    {
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.AppendLine(R.NiconicoInfoText6 + tmp);
                        }
                    }
                }
            }
            catch (Exception)
            {
                imgurl      = string.Empty;
                args.Errmsg = "Invalid XML";
            }

            if (string.IsNullOrEmpty(imgurl))
            {
                return(false);
            }

            Image img = new HttpVarious().GetImage(imgurl, args.Url.Key, 0, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, sb.ToString().Trim(), img);
            return(true);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Tinami_CreateImage(CreateImageArgs args)
        {
            var mc = Regex.Match(args.Url.Value, "^http://www\\.tinami\\.com/view/(?<ContentId>\\d+)$", RegexOptions.IgnoreCase);

            if (!mc.Success)
            {
                return(false);
            }

            var          src         = string.Empty;
            const string apiKey      = "4e353d9113dce";        // TODO: TINAMI API Key
            var          contentInfo = mc.Result("http://api.tinami.com/content/info?api_key=" + apiKey + "&cont_id=${ContentId}");
            var          http        = new HttpVarious();

            if (!http.GetData(contentInfo, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return(false);
            }

            var xdoc = new XmlDocument();

            try
            {
                xdoc.LoadXml(src);
                var stat = xdoc.SelectSingleNode("/rsp").Attributes.GetNamedItem("stat").InnerText;
                if (stat != "ok")
                {
                    args.Errmsg = xdoc.SelectSingleNode("/rsp/err") != null?
                                  xdoc.SelectSingleNode("/rsp/err").Attributes.GetNamedItem("msg").InnerText:
                                  "DeletedOrSuspended";

                    return(false);
                }

                if (xdoc.SelectSingleNode("/rsp/content/thumbnails/thumbnail_150x150") != null)
                {
                    var nd           = xdoc.SelectSingleNode("/rsp/content/thumbnails/thumbnail_150x150");
                    var thumbnailUrl = nd.Attributes.GetNamedItem("url").InnerText;
                    if (string.IsNullOrEmpty(thumbnailUrl))
                    {
                        return(false);
                    }

                    var img = http.GetImage(thumbnailUrl, args.Url.Key);
                    if (img == null)
                    {
                        return(false);
                    }

                    args.AddTooltipInfo(args.Url.Key, string.Empty, img);
                    return(true);
                }

                // エラー処理 エラーメッセージが返ってきた場合はここで処理
                if (xdoc.SelectSingleNode("/rsp/err") != null)
                {
                    args.Errmsg = xdoc.SelectSingleNode("/rsp/err").Attributes.GetNamedItem("msg").InnerText;
                }

                return(false);
            }
            catch (Exception ex)
            {
                args.Errmsg = ex.Message;
                return(false);
            }
        }
Ejemplo n.º 31
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool TwitVideo_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 32
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool Bokete_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 33
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool PicPlz_CreateImage(CreateImageArgs args)
        {
            string apiurl = "http://api.picplz.com/api/v2/pic.json?";
            Match  mc     = Regex.Match(args.Url.Value, "^http://picplz\\.com/user/\\w+/pic/(?<longurl_ids>\\w+)/?$", RegexOptions.IgnoreCase);

            if (mc.Success)
            {
                apiurl += "longurl_ids=" + mc.Groups["longurl_ids"].Value;
            }
            else
            {
                mc = Regex.Match(args.Url.Value, "^http://picplz\\.com/(?<shorturl_ids>\\w+)?$", RegexOptions.IgnoreCase);
                if (mc.Success)
                {
                    apiurl += "shorturl_ids=" + mc.Groups["shorturl_ids"].Value;
                }
                else
                {
                    return(false);
                }
            }

            string src    = string.Empty;
            string imgurl = string.Empty;

            if (!(new HttpVarious()).GetData(apiurl, null, ref src, 0, ref args.Errmsg, MyCommon.GetUserAgentString()))
            {
                return(false);
            }

            var sb = new StringBuilder();

            PicPlzDataModel.ResultData res;
            try
            {
                res = D.CreateDataFromJson <PicPlzDataModel.ResultData>(src);
            }
            catch (Exception)
            {
                return(false);
            }

            if (res.Result != "ok")
            {
                return(false);
            }

            try
            {
                imgurl = res.Value.Pics[0].PicFiles.Pic320Rh.ImgUrl;
            }
            catch (Exception)
            {
            }

            try
            {
                sb.Append(res.Value.Pics[0].Caption);
            }
            catch (Exception)
            {
            }

            if (string.IsNullOrEmpty(imgurl))
            {
                return(false);
            }

            Image img = new HttpVarious().GetImage(imgurl, args.Url.Key, 0, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, sb.ToString().Trim(), img);
            return(true);
        }
Ejemplo n.º 34
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool mypix_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var img = (new HttpVarious()).GetImage(args.url.Value, args.url.Key, 0, out args.errmsg);
     if (img == null)
     {
         return false;
     }
     // 成功した場合はURLに対応する画像、ツールチップテキストを登録
     args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, img));
     args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
     return true;
 }
Ejemplo n.º 35
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool CloudFiles_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 36
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Twimg_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^https?://p\.twimg\.com/.*$", RegexOptions.IgnoreCase);
     if (mc.Success)
     {
         var src = "";
         var ContentInfo = args.url.Value + ":thumb";
         var _img = http.GetImage(ContentInfo, src, 0, out args.errmsg);
         if (_img == null) return false;
         args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
         args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
     }
     return false;
 }
Ejemplo n.º 37
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool TwitterGeo_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var img = (new HttpVarious()).GetImage(args.url.Value, args.url.Key, 10000, out args.errmsg);
     if (img == null)
     {
         return false;
     }
     // 成功した場合はURLに対応する画像、ツールチップテキストを登録
     var url = args.url.Value;
     try
     {
         // URLをStaticMapAPIから通常のURLへ変換
         var m = Regex.Match(url, @"^.+=(?<lat>\d+(\.\d+)?),(?<lon>\d+(\.\d+)?)(&.+)?$");
         if (m.Success)
         {
             var lat = double.Parse(m.Groups["lat"].Value);
             var lon = double.Parse(m.Groups["lon"].Value);
             url = MapThumb.GetDefaultInstance().CreateMapLinkUrl(lat, lon);
         }
     }
     catch(Exception)
     {
         url = args.url.Value;
     }
     args.pics.Add(new KeyValuePair<string, Image>(url, img));
     args.tooltipText.Add(new KeyValuePair<string, string>(url, ""));
     return true;
 }
Ejemplo n.º 38
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool DirectLink_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 39
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool Vimeo_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            var http = new HttpVarious();
            var mc = Regex.Match(args.url.Value, @"http://vimeo\.com/(?<postID>[0-9]+)", RegexOptions.IgnoreCase);
            var apiurl = "http://vimeo.com/api/v2/video/" + mc.Groups["postID"].Value + ".xml";
            var src = "";
            string imgurl = null;
            if (http.GetData(apiurl, null, out src, 0, out args.errmsg, ""))
            {
                var xdoc = new XmlDocument();
                var sb = new StringBuilder();
                try
                {
                    xdoc.LoadXml(src);
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/title").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText1);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmpdate = new DateTime();
                        if (DateTime.TryParse(xdoc.SelectSingleNode("videos/video/upload_date").InnerText, out tmpdate))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText2);
                            sb.Append(tmpdate);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_likes").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText3);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_plays").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText4);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_comments").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText5);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var sec = 0;
                        if (int.TryParse(xdoc.SelectSingleNode("videos/video/duration").InnerText, out sec))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText6);
                            sb.AppendFormat("{0:d}:{1:d2}", sec / 60, sec % 60);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/thumbnail_medium").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            imgurl = tmp;
                        }
                    }
                    catch(Exception)
                    {
                    }
                }
                catch(Exception)
                {
                    imgurl = "";
                }

                if (!string.IsNullOrEmpty(imgurl))
                {
                    var _img = http.GetImage(imgurl, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, sb.ToString().Trim()));
                    return true;
                }
            }
            return false;
        }
Ejemplo n.º 40
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool MobyPicture_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 41
0
        private void bgw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            var arg = (PreviewData)e.Argument;
            var worker = (BackgroundWorker)sender;
            arg.AdditionalErrorMessage = "";

            foreach (var url in arg.urls)
            {
                var args = new CreateImageArgs();
                args.url = url;
                args.pics = arg.pics;
                args.tooltipText = arg.tooltipText;
                args.errmsg = "";
                if (!arg.imageCreators[arg.urls.IndexOf(url)].Value(args))
                {
                    arg.AdditionalErrorMessage = args.errmsg;
                    arg.IsError = true;
                }
            }

            if (arg.pics.Count == 0)
            {
                arg.IsError = true;
            }
            else
            {
                arg.IsError = false;
            }
            e.Result = arg;
        }
Ejemplo n.º 42
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool Pikubo_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 43
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Foursquare_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var tipsText = "";
     var mapsUrl = Foursquare.GetInstance.GetMapsUri(args.url.Key, ref tipsText);
     if (mapsUrl == null) return false;
     var img = (new HttpVarious()).GetImage(mapsUrl, args.url.Key, 10000, out args.errmsg);
     if (img == null)
     {
         return false;
     }
     // 成功した場合はURLに対応する画像、ツールチップテキストを登録
     args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, img));
     args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, tipsText));
     return true;
 }
Ejemplo n.º 44
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">Class CreateImageArgs
 ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
 ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
 ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
 ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private static bool Hatena_CreateImage(CreateImageArgs args)
 {
     return(Default_CreateImage(args));
 }
Ejemplo n.º 45
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool instagram_CreateImage(CreateImageArgs args)
        {
            var http = new HttpVarious();
            var imgUrl = http.GetRedirectTo(args.url.Value);

            if (string.IsNullOrEmpty(imgUrl)) return false;

            var img = http.GetImage(imgUrl, args.url.Key, 10000, out args.errmsg);
            if (img == null) return false;

            // 成功した場合はURLに対応する画像、ツールチップテキストを登録
            args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, img));
            args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
            return true;
        }
Ejemplo n.º 46
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Vimeo_CreateImage(CreateImageArgs args)
        {
            var    http   = new HttpVarious();
            Match  mc     = Regex.Match(args.Url.Value, "http://vimeo\\.com/(?<postID>[0-9]+)", RegexOptions.IgnoreCase);
            string apiurl = "http://vimeo.com/api/v2/video/" + mc.Groups["postID"].Value + ".xml";
            string src    = string.Empty;

            if (!http.GetData(apiurl, null, ref src, 0, ref args.Errmsg, string.Empty))
            {
                return(false);
            }

            var    sb     = new StringBuilder();
            string imgurl = null;

            try
            {
                var xdoc = new XmlDocument();
                xdoc.LoadXml(src);
                try
                {
                    string tmp = xdoc.SelectSingleNode("videos/video/title").InnerText;
                    if (!string.IsNullOrEmpty(tmp))
                    {
                        sb.Append(R.VimeoInfoText1);
                        sb.Append(tmp);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    DateTime tmpdate;
                    if (DateTime.TryParse(xdoc.SelectSingleNode("videos/video/upload_date").InnerText, out tmpdate))
                    {
                        sb.Append(R.VimeoInfoText2);
                        sb.Append(tmpdate);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    string tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_likes").InnerText;
                    if (!string.IsNullOrEmpty(tmp))
                    {
                        sb.Append(R.VimeoInfoText3);
                        sb.Append(tmp);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    string tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_plays").InnerText;
                    if (!string.IsNullOrEmpty(tmp))
                    {
                        sb.Append(R.VimeoInfoText4);
                        sb.Append(tmp);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    string tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_comments").InnerText;
                    if (!string.IsNullOrEmpty(tmp))
                    {
                        sb.Append(R.VimeoInfoText5);
                        sb.Append(tmp);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    int sec;
                    if (int.TryParse(xdoc.SelectSingleNode("videos/video/duration").InnerText, out sec))
                    {
                        sb.Append(R.VimeoInfoText6);
                        sb.AppendFormat("{0:d}:{1:d2}", sec / 60, sec % 60);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    string tmp = xdoc.SelectSingleNode("videos/video/thumbnail_medium").InnerText;
                    if (!string.IsNullOrEmpty(tmp))
                    {
                        imgurl = tmp;
                    }
                }
                catch (Exception)
                {
                }
            }
            catch (Exception)
            {
                imgurl = string.Empty;
            }

            if (string.IsNullOrEmpty(imgurl))
            {
                return(false);
            }

            Image img = http.GetImage(imgurl, args.Url.Key, 0, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, sb.ToString().Trim(), img);
            return(true);
        }
Ejemplo n.º 47
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool nicoseiga_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^http://(?:seiga\.nicovideo\.jp/seiga/|nico\.ms/)im(?<id>\d+)");
     if (mc.Success)
     {
         var _img = http.GetImage("http://lohas.nicoseiga.jp/thumb/" + mc.Groups["id"].Value + "q?", args.url.Key, 0, out args.errmsg);
         if (_img == null) return false;
         args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
         args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
         return true;
     }
     return false;
 }
Ejemplo n.º 48
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">Class CreateImageArgs
        ///                                 url As KeyValuePair(Of String, String)                  元URLとサムネイルURLのKeyValuePair
        ///                                 pics As List(Of KeyValuePair(Of String, Image))         元URLとサムネイル画像のKeyValuePair
        ///                                 tooltiptext As List(Of KeyValuePair(Of String, String)) 元URLとツールチップテキストのKeyValuePair
        ///                                 errmsg As String                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private static bool Youtube_CreateImage(CreateImageArgs args)
        {
            // 参考
            // http://code.google.com/intl/ja/apis/youtube/2.0/developers_guide_protocol_video_entries.html
            // デベロッパー ガイド: Data API プロトコル - 単独の動画情報の取得 - YouTube の API とツール - Google Code
            // http://code.google.com/intl/ja/apis/youtube/2.0/developers_guide_protocol_understanding_video_feeds.html#Understanding_Feeds_and_Entries
            // デベロッパー ガイド: Data API プロトコル - 動画のフィードとエントリについて - YouTube の API とツール - Google Code
            Match mcimg = Regex.Match(args.Url.Value, "^http://(?:(www\\.youtube\\.com)|(youtu\\.be))/(watch\\?v=)?(?<videoid>([\\w\\-]+))", RegexOptions.IgnoreCase);

            if (!mcimg.Success)
            {
                return(false);
            }

            string imgurl = mcimg.Result("http://i.ytimg.com/vi/${videoid}/default.jpg");

            if (string.IsNullOrEmpty(imgurl))
            {
                return(false);
            }

            string videourl = (new HttpVarious()).GetRedirectTo(args.Url.Value);
            var    mc       = Regex.Match(videourl, "^http://(?:(www\\.youtube\\.com)|(youtu\\.be))/(watch\\?v=)?(?<videoid>([\\w\\-]+))", RegexOptions.IgnoreCase);

            if (videourl.StartsWith("http://www.youtube.com/index?ytsession="))
            {
                videourl = args.Url.Value;
                mc       = Regex.Match(videourl, "^http://(?:(www\\.youtube\\.com)|(youtu\\.be))/(watch\\?v=)?(?<videoid>([\\w\\-]+))", RegexOptions.IgnoreCase);
            }

            if (!mc.Success)
            {
                return(false);
            }

            string apiurl = "http://gdata.youtube.com/feeds/api/videos/" + mc.Groups["videoid"].Value;
            string src    = string.Empty;

            if (!(new HttpVarious()).GetData(apiurl, null, ref src, 5000))
            {
                return(false);
            }

            var sb = new StringBuilder();

            try
            {
                var xdoc = new XmlDocument();
                xdoc.LoadXml(src);
                var nsmgr = new XmlNamespaceManager(xdoc.NameTable);
                nsmgr.AddNamespace("root", "http://www.w3.org/2005/Atom");
                nsmgr.AddNamespace("app", "http://purl.org/atom/app#");
                nsmgr.AddNamespace("media", "http://search.yahoo.com/mrss/");

                var    xentryNode = xdoc.DocumentElement.SelectSingleNode("/root:entry/media:group", nsmgr);
                var    xentry     = (XmlElement)xentryNode;
                string tmp;
                try
                {
                    tmp = xentry["media:title"].InnerText;
                    if (!string.IsNullOrEmpty(tmp))
                    {
                        sb.AppendLine(R.YouTubeInfoText1 + tmp);
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    int sec;
                    if (int.TryParse(xentry["yt:duration"].Attributes["seconds"].Value, out sec))
                    {
                        sb.Append(R.YouTubeInfoText2);
                        sb.Append(string.Format("{0:d}:{1:d2}", sec / 60, sec % 60));
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    DateTime tmpdate;
                    xentry = (XmlElement)xdoc.DocumentElement.SelectSingleNode("/root:entry", nsmgr);
                    if (DateTime.TryParse(xentry["published"].InnerText, out tmpdate))
                    {
                        sb.Append(R.YouTubeInfoText3);
                        sb.Append(tmpdate);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    int count;
                    xentry = (XmlElement)xdoc.DocumentElement.SelectSingleNode("/root:entry", nsmgr);
                    tmp    = xentry["yt:statistics"].Attributes["viewCount"].Value;
                    if (int.TryParse(tmp, out count))
                    {
                        sb.Append(R.YouTubeInfoText4);
                        sb.Append(tmp);
                        sb.AppendLine();
                    }
                }
                catch (Exception)
                {
                }

                try
                {
                    xentry = (XmlElement)xdoc.DocumentElement.SelectSingleNode("/root:entry/app:control", nsmgr);
                    if (xentry != null)
                    {
                        sb.AppendLine(string.Format("{0}:{1}", xentry["yt:state"].Attributes["name"].Value, xentry["yt:state"].InnerText));
                    }
                }
                catch (Exception)
                {
                }
            }
            catch (Exception)
            {
            }

            var   http = new HttpVarious();
            Image img  = http.GetImage(imgurl, videourl, 10000, ref args.Errmsg);

            if (img == null)
            {
                return(false);
            }

            args.AddTooltipInfo(args.Url.Key, sb.ToString().Trim(), img);
            return(true);
        }