/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }
/// <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; }
/// <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); }
/// <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); }
/// <summary> /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート /// </summary> /// <param name="args">CreateImageArgs</param> /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns> /// <remarks></remarks> private static bool Path_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); }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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); }
public string LanguageDetect(string source) { var http = new HttpVarious(); var headers = new Dictionary <string, string> { { "User-Agent", MyCommon.GetUserAgentString() }, { "v", "1.0" }, { "q", source } }; var content = string.Empty; if (!http.GetData(LanguageDetectEndPoint, headers, ref content)) { return(string.Empty); } try { var res = D.CreateDataFromJson <LanguageDetectResponse>(content); return(res.ResponseData.Language); } catch (Exception) { return(string.Empty); } }
/// <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); }
/// <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; }
// Google URL Shortener API // http://code.google.com/intl/ja/apis/urlshortener/v1/getting_started.html public string Shorten(string source) { var headers = new Dictionary <string, string> { { "User-Agent", MyCommon.GetUserAgentString() }, { "Content-Type", "application/json" } }; var http = new HttpVarious(); http.PostData("https://www.googleapis.com/urlshortener/v1/url", headers); return(string.Empty); }
public bool Translate(string from, string to, string text, ref string buf) { var http = new HttpVarious(); string apiurl = TranslateUri + "&text=" + HttpUtility.UrlEncode(text) + "&to=" + to; string content = string.Empty; if (http.GetData(apiurl, null, ref content)) { buf = string.Copy(content); return(true); } return(false); }
private void GetImage(KeyValuePair <string, Action <Image> > downloadAsyncInfo) { Image callbackImage = null; lock (_lockObject) { if (_innerDictionary[downloadAsyncInfo.Key] != null) { callbackImage = (Image)_innerDictionary[downloadAsyncInfo.Key]; } } if (callbackImage != null) { if (downloadAsyncInfo.Value != null) { downloadAsyncInfo.Value.Invoke(callbackImage); } _netSemaphore.Release(); return; } var hv = new HttpVarious(); Image image = hv.GetImage(downloadAsyncInfo.Key, 10000); lock (_lockObject) { if (_innerDictionary[downloadAsyncInfo.Key] == null) { if (image != null) { _innerDictionary.Add(downloadAsyncInfo.Key, image, _cachePolicy); callbackImage = image; } } else { callbackImage = (Image)_innerDictionary[downloadAsyncInfo.Key]; } } if (downloadAsyncInfo.Value != null) { downloadAsyncInfo.Value.Invoke(callbackImage); } _netSemaphore.Release(); }
public bool Translate(string srclng, string dstlng, string source, ref string destination, out string errorMessage) { errorMessage = string.Empty; if (string.IsNullOrEmpty(srclng) || string.IsNullOrEmpty(dstlng)) { return(false); } var headers = new Dictionary <string, string> { { "v", "1.0" }, { "User-Agent", MyCommon.GetUserAgentString() }, { "langpair", string.Format("{0}|{1}", srclng, dstlng) }, { "q", source } }; var content = string.Empty; var http = new HttpVarious(); if (!http.GetData(TranslateEndPoint, headers, ref content)) { return(false); } TranslateResponse res; try { res = D.CreateDataFromJson <TranslateResponse>(content); } catch (Exception) { errorMessage = "Err:Invalid JSON"; return(false); } if (res.ResponseData == null) { errorMessage = "Err:" + res.ResponseDetails; return(false); } var body = res.ResponseData.TranslatedText; var buf = HttpUtility.UrlDecode(body); destination = string.Copy(buf); return(true); }
/// <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); }
/// <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; }
/// <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; }
/// <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; }
/// <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); }
/// <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; }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
/// <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; }
/// <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); }
/// <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; }
public static string Resolve(string orgData, bool tcoResolve) { if (!isResolve) { return(orgData); } lock (LockObj) { if (UrlCache.Count > 500) { // 定期的にリセット UrlCache.Clear(); } } var urlList = new List <string>(); var m = Regex.Matches(orgData, "<a href=\"(?<svc>http://.+?/)(?<path>[^\"]+)?\"", RegexOptions.IgnoreCase); foreach (Match orgUrlMatch in m) { var orgUrl = orgUrlMatch.Result("${svc}"); var orgUrlPath = orgUrlMatch.Result("${path}"); if ((isForceResolve || Array.IndexOf(ShortUrlServices, orgUrl) > -1) && !urlList.Contains(orgUrl + orgUrlPath) && orgUrl != "http://twitter.com/") { if (!tcoResolve && (orgUrl == "http://t.co/" || orgUrl == "https://t.co")) { continue; } lock (LockObj) { urlList.Add(orgUrl + orgUrlPath); } } } foreach (string orgUrl in urlList) { if (UrlCache.ContainsKey(orgUrl)) { try { orgData = orgData.Replace("<a href=\"" + orgUrl + "\"", "<a href=\"" + UrlCache[orgUrl] + "\""); } catch (Exception) { // Through } } else { try { // urlとして生成できない場合があるらしい var tmpurlStr = new Uri(MyCommon.GetUrlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path); var httpVar = new HttpVarious(); var retUrlStr = MyCommon.GetUrlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr)); if (retUrlStr.StartsWith("http")) { // ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード retUrlStr = retUrlStr.Replace("\"", "%22"); orgData = orgData.Replace("<a href=\"" + tmpurlStr, "<a href=\"" + retUrlStr); lock (LockObj) { if (!UrlCache.ContainsKey(orgUrl)) { UrlCache.Add(orgUrl, retUrlStr); } } } } catch (Exception) { // Through } } } return(orgData); }
public static string ResolveMedia(string orgData, bool tcoResolve) { if (!isResolve) { return(orgData); } lock (LockObj) { if (UrlCache.Count > 500) { // 定期的にリセット UrlCache.Clear(); } } var m = Regex.Match(orgData, "(?<svc>https?://.+?/)(?<path>[^\"]+)?", RegexOptions.IgnoreCase); if (!m.Success) { return(orgData); } var orgUrl = m.Result("${svc}"); var orgUrlPath = m.Result("${path}"); if ((isForceResolve || Array.IndexOf(ShortUrlServices, orgUrl) > -1) && orgUrl != "http://twitter.com/") { if (!tcoResolve && (orgUrl == "http://t.co/" || orgUrl == "https://t.co/")) { return(orgData); } orgUrl += orgUrlPath; if (UrlCache.ContainsKey(orgUrl)) { return(orgData.Replace(orgUrl, UrlCache[orgUrl])); } try { // urlとして生成できない場合があるらしい var tmpurlStr = new Uri(MyCommon.GetUrlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path); var httpVar = new HttpVarious(); var retUrlStr = MyCommon.GetUrlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr)); if (retUrlStr.StartsWith("http")) { // ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード retUrlStr = retUrlStr.Replace("\"", "%22"); lock (LockObj) { if (!UrlCache.ContainsKey(orgUrl)) { UrlCache.Add(orgUrl, orgData.Replace(tmpurlStr, retUrlStr)); } } return(orgData.Replace(tmpurlStr, retUrlStr)); } } catch (Exception) { return(orgData); } } return(orgData); }
public bool Translate(string from, string to, string text, ref string buf) { var http = new HttpVarious(); string apiurl = TranslateUri + "&text=" + HttpUtility.UrlEncode(text) + "&to=" + to; string content = string.Empty; if (http.GetData(apiurl, null, ref content)) { buf = string.Copy(content); return true; } return false; }
public static string ResolveMedia(string orgData, bool tcoResolve) { if (!isResolve) { return orgData; } lock (LockObj) { if (UrlCache.Count > 500) { // 定期的にリセット UrlCache.Clear(); } } var m = Regex.Match(orgData, "(?<svc>https?://.+?/)(?<path>[^\"]+)?", RegexOptions.IgnoreCase); if (!m.Success) { return orgData; } var orgUrl = m.Result("${svc}"); var orgUrlPath = m.Result("${path}"); if ((isForceResolve || Array.IndexOf(ShortUrlServices, orgUrl) > -1) && orgUrl != "http://twitter.com/") { if (!tcoResolve && (orgUrl == "http://t.co/" || orgUrl == "https://t.co/")) { return orgData; } orgUrl += orgUrlPath; if (UrlCache.ContainsKey(orgUrl)) { return orgData.Replace(orgUrl, UrlCache[orgUrl]); } try { // urlとして生成できない場合があるらしい var tmpurlStr = new Uri(MyCommon.GetUrlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path); var httpVar = new HttpVarious(); var retUrlStr = MyCommon.GetUrlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr)); if (retUrlStr.StartsWith("http")) { // ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード retUrlStr = retUrlStr.Replace("\"", "%22"); lock (LockObj) { if (!UrlCache.ContainsKey(orgUrl)) { UrlCache.Add(orgUrl, orgData.Replace(tmpurlStr, retUrlStr)); } } return orgData.Replace(tmpurlStr, retUrlStr); } } catch (Exception) { return orgData; } } return orgData; }
/// <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; }
/// <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); }
/// <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); } }
/// <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; } }
// Google URL Shortener API // http://code.google.com/intl/ja/apis/urlshortener/v1/getting_started.html public string Shorten(string source) { var headers = new Dictionary<string, string> { { "User-Agent", MyCommon.GetUserAgentString() }, { "Content-Type", "application/json" } }; var http = new HttpVarious(); http.PostData("https://www.googleapis.com/urlshortener/v1/url", headers); return string.Empty; }
/// <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); }
public bool Translate(string srclng, string dstlng, string source, ref string destination, out string errorMessage) { errorMessage = string.Empty; if (string.IsNullOrEmpty(srclng) || string.IsNullOrEmpty(dstlng)) { return false; } var headers = new Dictionary<string, string> { { "v", "1.0" }, { "User-Agent", MyCommon.GetUserAgentString()}, { "langpair", string.Format("{0}|{1}", srclng, dstlng) }, { "q", source } }; var content = string.Empty; var http = new HttpVarious(); if (!http.GetData(TranslateEndPoint, headers, ref content)) { return false; } TranslateResponse res; try { res = D.CreateDataFromJson<TranslateResponse>(content); } catch (Exception) { errorMessage = "Err:Invalid JSON"; return false; } if (res.ResponseData == null) { errorMessage = "Err:" + res.ResponseDetails; return false; } var body = res.ResponseData.TranslatedText; var buf = HttpUtility.UrlDecode(body); destination = string.Copy(buf); return true; }
/// <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; }
public string LanguageDetect(string source) { var http = new HttpVarious(); var headers = new Dictionary<string, string> { { "User-Agent", MyCommon.GetUserAgentString() }, { "v", "1.0" }, { "q", source } }; var content = string.Empty; if (!http.GetData(LanguageDetectEndPoint, headers, ref content)) { return string.Empty; } try { var res = D.CreateDataFromJson<LanguageDetectResponse>(content); return res.ResponseData.Language; } catch (Exception) { return string.Empty; } }
/// <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; }
public static string Resolve(string orgData, bool tcoResolve) { if (!isResolve) { return orgData; } lock (LockObj) { if (UrlCache.Count > 500) { // 定期的にリセット UrlCache.Clear(); } } var urlList = new List<string>(); var m = Regex.Matches(orgData, "<a href=\"(?<svc>http://.+?/)(?<path>[^\"]+)?\"", RegexOptions.IgnoreCase); foreach (Match orgUrlMatch in m) { var orgUrl = orgUrlMatch.Result("${svc}"); var orgUrlPath = orgUrlMatch.Result("${path}"); if ((isForceResolve || Array.IndexOf(ShortUrlServices, orgUrl) > -1) && !urlList.Contains(orgUrl + orgUrlPath) && orgUrl != "http://twitter.com/") { if (!tcoResolve && (orgUrl == "http://t.co/" || orgUrl == "https://t.co")) { continue; } lock (LockObj) { urlList.Add(orgUrl + orgUrlPath); } } } foreach (string orgUrl in urlList) { if (UrlCache.ContainsKey(orgUrl)) { try { orgData = orgData.Replace("<a href=\"" + orgUrl + "\"", "<a href=\"" + UrlCache[orgUrl] + "\""); } catch (Exception) { // Through } } else { try { // urlとして生成できない場合があるらしい var tmpurlStr = new Uri(MyCommon.GetUrlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path); var httpVar = new HttpVarious(); var retUrlStr = MyCommon.GetUrlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr)); if (retUrlStr.StartsWith("http")) { // ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード retUrlStr = retUrlStr.Replace("\"", "%22"); orgData = orgData.Replace("<a href=\"" + tmpurlStr, "<a href=\"" + retUrlStr); lock (LockObj) { if (!UrlCache.ContainsKey(orgUrl)) { UrlCache.Add(orgUrl, retUrlStr); } } } } catch (Exception) { // Through } } } return orgData; }
/// <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); }
/// <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); }