/// <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 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 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 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 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 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 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; }
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 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 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 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">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 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; } }
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 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; }
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 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; } }