예제 #1
0
        public string LanguageDetect(string source)
        {
            var http    = new HttpVarious();
            var apiurl  = LanguageDetectEndPoint;
            var headers = new Dictionary <string, string>();

            headers.Add("User-Agent", MyCommon.GetUserAgentString());
            headers.Add("v", "1.0");
            headers.Add("q", source);
            var content = "";

            if (http.GetData(apiurl, headers, out content))
            {
                var serializer = new DataContractJsonSerializer(typeof(LanguageDetectResponse));
                try
                {
                    var res = MyCommon.CreateDataFromJson <LanguageDetectResponse>(content);
                    return(res.ResponseData.Language);
                }
                catch (Exception)
                {
                    return("");
                }
            }
            return("");
        }
예제 #2
0
        public string Shorten(string source)
        {
            var http    = new HttpVarious();
            var apiurl  = "https://www.googleapis.com/urlshortener/v1/url";
            var headers = new Dictionary <string, string>();

            headers.Add("User-Agent", MyCommon.GetUserAgentString());
            headers.Add("Content-Type", "application/json");

            http.PostData(apiurl, headers);
            return("");
        }
예제 #3
0
        public bool Translate(string _from, string _to, string _text, out string buf)
        {
            HttpVarious http    = new HttpVarious();
            string      apiurl  = TranslateUri + "&text=" + System.Web.HttpUtility.UrlEncode(_text) + "&to=" + _to;
            string      content = "";

            if (http.GetData(apiurl, null, out content))
            {
                buf = string.Copy(content);
                return(true);
            }
            buf = null;
            return(false);
        }
예제 #4
0
        public bool Translate(string srclng, string dstlng, string source, ref string destination, ref string ErrMsg)
        {
            var http    = new HttpVarious();
            var apiurl  = TranslateEndPoint;
            var headers = new Dictionary <string, string>();

            headers.Add("v", "1.0");

            ErrMsg = "";
            if (string.IsNullOrEmpty(srclng) || string.IsNullOrEmpty(dstlng))
            {
                return(false);
            }
            headers.Add("User-Agent", MyCommon.GetUserAgentString());
            headers.Add("langpair", srclng + "|" + dstlng);

            headers.Add("q", source);

            var content = "";

            if (http.GetData(apiurl, headers, out content))
            {
                var serializer = new DataContractJsonSerializer(typeof(TranslateResponse));
                TranslateResponse res;

                try
                {
                    res = MyCommon.CreateDataFromJson <TranslateResponse>(content);
                }
                catch (Exception)
                {
                    ErrMsg = "Err:Invalid JSON";
                    return(false);
                }

                if (res.ResponseData == null)
                {
                    ErrMsg = "Err:" + res.ResponseDetails;
                    return(false);
                }
                var _body = res.ResponseData.TranslatedText;
                var buf   = HttpUtility.UrlDecode(_body);

                destination = string.Copy(buf);
                return(true);
            }
            return(false);
        }
예제 #5
0
        private void GetImage(KeyValuePair <string, Action <Image> > downloadAsyncInfo)
        {
            Image callbackImage = null;

            lock (lockObject)
            {
                if (this.innerDictionary[downloadAsyncInfo.Key] != null)
                {
                    callbackImage = (Image)this.innerDictionary[downloadAsyncInfo.Key];
                }
            }
            if (callbackImage != null)
            {
                if (downloadAsyncInfo.Value != null)
                {
                    downloadAsyncInfo.Value.Invoke(callbackImage);
                }
                this.netSemaphore.Release();
                return;
            }
            var hv      = new HttpVarious();
            var dlImage = hv.GetImage(downloadAsyncInfo.Key, 10000);

            lock (lockObject)
            {
                if (this.innerDictionary[downloadAsyncInfo.Key] == null)
                {
                    if (dlImage != null)
                    {
                        this.innerDictionary.Add(downloadAsyncInfo.Key, dlImage, this.cachePolicy);
                        callbackImage = dlImage;
                    }
                }
                else
                {
                    callbackImage = (Image)this.innerDictionary[downloadAsyncInfo.Key];
                }
            }
            if (downloadAsyncInfo.Value != null)
            {
                downloadAsyncInfo.Value.Invoke(callbackImage);
            }
            this.netSemaphore.Release();
        }
예제 #6
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool nicovideo_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            var http = new HttpVarious();
            var mc = Regex.Match(args.url.Value, @"^http://(?:(www|ext)\.nicovideo\.jp/watch|nico\.ms)/(?<id>(?:sm|nm)?([0-9]+))(\?.+)?$", RegexOptions.IgnoreCase);
            var apiurl = "http://www.nicovideo.jp/api/getthumbinfo/" + mc.Groups["id"].Value;
            var src = "";
            var imgurl = "";
            if ((new HttpVarious()).GetData(apiurl, null, out src, 0, out args.errmsg, MyCommon.GetUserAgentString()))
            {
                var sb = new StringBuilder();
                var xdoc = new XmlDocument();
                try
                {
                    xdoc.LoadXml(src);
                    var status = xdoc.SelectSingleNode("/nicovideo_thumb_response").Attributes["status"].Value;
                    if (status == "ok")
                    {
                        imgurl = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/thumbnail_url").InnerText;

                        //ツールチップに動画情報をセットする
                        string tmp;

                        try
                        {
                            tmp = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/title").InnerText;
                            if (!string.IsNullOrEmpty(tmp))
                            {
                                sb.Append(Properties.Resources.NiconicoInfoText1);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {

                        }

                        try
                        {
                            tmp = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/length").InnerText;
                            if (!string.IsNullOrEmpty(tmp))
                            {
                                sb.Append(Properties.Resources.NiconicoInfoText2);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {

                        }

                        try
                        {
                            var tm = new DateTime();
                            tmp = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/first_retrieve").InnerText;
                            if (DateTime.TryParse(tmp, out tm))
                            {
                                sb.Append(Properties.Resources.NiconicoInfoText3);
                                sb.Append(tm.ToString());
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {

                        }

                        try
                        {
                            tmp = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/view_counter").InnerText;
                            if (!string.IsNullOrEmpty(tmp))
                            {
                                sb.Append(Properties.Resources.NiconicoInfoText4);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {

                        }

                        try
                        {
                            tmp = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/comment_num").InnerText;
                            if (!string.IsNullOrEmpty(tmp))
                            {
                                sb.Append(Properties.Resources.NiconicoInfoText5);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {

                        }
                        try
                        {
                            tmp = xdoc.SelectSingleNode("/nicovideo_thumb_response/thumb/mylist_counter").InnerText;
                            if (!string.IsNullOrEmpty(tmp))
                            {
                                sb.Append(Properties.Resources.NiconicoInfoText6);
                                sb.Append(tmp);
                                sb.AppendLine();
                            }
                        }
                        catch(Exception)
                        {

                        }
                    }
                    else if (status == "fail")
                    {
                        var errcode = xdoc.SelectSingleNode("/nicovideo_thumb_response/error/code").InnerText;
                        args.errmsg = errcode;
                        imgurl = "";
                    }
                    else
                    {
                        args.errmsg = "UnknownResponse";
                        imgurl = "";
                    }

                }
                catch(Exception)
                {
                    imgurl = "";
                    args.errmsg = "Invalid XML";
                }

                if (!string.IsNullOrEmpty(imgurl))
                {
                    var _img = http.GetImage(imgurl, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, sb.ToString().Trim()));
                    return true;
                }
            }
            return false;
        }
예제 #7
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool flickr_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            //参考: http://tanarky.blogspot.com/2010/03/flickr-urlunavailable.html アグレッシブエンジニア: flickr の画像URL仕様についてまとめ(Unavailable画像)
            //画像URL仕様 http://farm{farm}.staticflickr.com/{server}/{id}_{secret}_{size}.{extension}
            //photostreamなど複数の画像がある場合先頭の一つのみ認識と言うことにする
            //(二つ目のキャプチャ 一つ目の画像はユーザーアイコン)

            var src = "";
            var mc = Regex.Match(args.url.Value, "^http://www.flickr.com/", RegexOptions.IgnoreCase);
            var http = new HttpVarious();
            if (http.GetData(args.url.Value, null, out src, 0, out args.errmsg, ""))
            {
                var _mc = Regex.Matches(src, mc.Result(@"http://farm[0-9]+\.staticflickr\.com/[0-9]+/.+?\.([a-zA-Z]+)"));
                //二つ以上キャプチャした場合先頭の一つだけ 一つだけの場合はユーザーアイコンしか取れなかった
                if (_mc.Count > 1)
                {
                    var _img = http.GetImage(_mc[1].Value, args.url.Value, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
                else
                {
                    args.errmsg = "Pattern NotFound";
                }
            }
            return false;
        }
예제 #8
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool Vimeo_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            var http = new HttpVarious();
            var mc = Regex.Match(args.url.Value, @"http://vimeo\.com/(?<postID>[0-9]+)", RegexOptions.IgnoreCase);
            var apiurl = "http://vimeo.com/api/v2/video/" + mc.Groups["postID"].Value + ".xml";
            var src = "";
            string imgurl = null;
            if (http.GetData(apiurl, null, out src, 0, out args.errmsg, ""))
            {
                var xdoc = new XmlDocument();
                var sb = new StringBuilder();
                try
                {
                    xdoc.LoadXml(src);
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/title").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText1);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmpdate = new DateTime();
                        if (DateTime.TryParse(xdoc.SelectSingleNode("videos/video/upload_date").InnerText, out tmpdate))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText2);
                            sb.Append(tmpdate);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_likes").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText3);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_plays").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText4);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/stats_number_of_comments").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText5);
                            sb.Append(tmp);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var sec = 0;
                        if (int.TryParse(xdoc.SelectSingleNode("videos/video/duration").InnerText, out sec))
                        {
                            sb.Append(Properties.Resources.VimeoInfoText6);
                            sb.AppendFormat("{0:d}:{1:d2}", sec / 60, sec % 60);
                            sb.AppendLine();
                        }
                    }
                    catch(Exception)
                    {
                    }
                    try
                    {
                        var tmp = xdoc.SelectSingleNode("videos/video/thumbnail_medium").InnerText;
                        if (!string.IsNullOrEmpty(tmp))
                        {
                            imgurl = tmp;
                        }
                    }
                    catch(Exception)
                    {
                    }
                }
                catch(Exception)
                {
                    imgurl = "";
                }

                if (!string.IsNullOrEmpty(imgurl))
                {
                    var _img = http.GetImage(imgurl, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, sb.ToString().Trim()));
                    return true;
                }
            }
            return false;
        }
예제 #9
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Twimg_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^https?://p\.twimg\.com/.*$", RegexOptions.IgnoreCase);
     if (mc.Success)
     {
         var src = "";
         var ContentInfo = args.url.Value + ":thumb";
         var _img = http.GetImage(ContentInfo, src, 0, out args.errmsg);
         if (_img == null) return false;
         args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
         args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
     }
     return false;
 }
예제 #10
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Tinami_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^http://www\.tinami\.com/view/(?<ContentId>\d+)$", RegexOptions.IgnoreCase);
     if (mc.Success)
     {
         var src = "";
         var ContentInfo = mc.Result("http://api.tinami.com/content/info?api_key=" + ApplicationSettings.TINAMIApiKey +
                                     "&cont_id=${ContentId}");
         if (http.GetData(ContentInfo, null, out src, 0, out args.errmsg, ""))
         {
             var xdoc = new XmlDocument();
             var thumbnail_url = "";
             try
             {
                 xdoc.LoadXml(src);
                 var stat = xdoc.SelectSingleNode("/rsp").Attributes.GetNamedItem("stat").InnerText;
                 if (stat == "ok")
                 {
                     if (xdoc.SelectSingleNode("/rsp/content/thumbnails/thumbnail_150x150") != null)
                     {
                         var nd = xdoc.SelectSingleNode("/rsp/content/thumbnails/thumbnail_150x150");
                         thumbnail_url = nd.Attributes.GetNamedItem("url").InnerText;
                         if (string.IsNullOrEmpty(thumbnail_url)) return false;
                         var _img = http.GetImage(thumbnail_url, args.url.Key);
                         if (_img == null) return false;
                         args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                         args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                         return true;
                     }
                     else
                     {
                         //エラー処理 エラーメッセージが返ってきた場合はここで処理
                         if (xdoc.SelectSingleNode("/rsp/err") != null)
                         {
                             args.errmsg = xdoc.SelectSingleNode("/rsp/err").Attributes.GetNamedItem("msg").InnerText;
                         }
                         return false;
                     }
                 }
                 else
                 {
                     // TODO rsp stat=failの際のエラーメッセージ返却はAPI拡張待ち(2011/8/2要望済み)
                     // TODO 後日APIレスポンスを確認し修正すること
                     if (xdoc.SelectSingleNode("/rsp/err") != null)
                     {
                         args.errmsg = xdoc.SelectSingleNode("/rsp/err").Attributes.GetNamedItem("msg").InnerText;
                     }
                     else
                     {
                         args.errmsg = "DeletedOrSuspended";
                     }
                     return false;
                 }
             }
             catch(Exception ex)
             {
                 args.errmsg = ex.Message;
                 return false;
             }
         }
     }
     return false;
 }
예제 #11
0
        private bool PicPlz_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            var http = new HttpVarious();
            var apiurl = "http://api.picplz.com/api/v2/pic.json?";
            var 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;
                }
            }
            var src = "";
            var imgurl = "";
            if ((new HttpVarious()).GetData(apiurl, null, out src, 0, out args.errmsg, MyCommon.GetUserAgentString()))
            {
                var sb = new StringBuilder();
                var serializer = new DataContractJsonSerializer(typeof(PicPlzDataModel.ResultData));
                PicPlzDataModel.ResultData res;

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

                if (res.Result == "ok")
                {
                    try
                    {
                        imgurl = res.Value.Pics[0].PicFiles.Pic320rh.ImgUrl;
                    }
                    catch(Exception)
                    {

                    }

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

                    }
                }
                else
                {
                    return false;
                }

                if (!string.IsNullOrEmpty(imgurl))
                {
                    var _img = http.GetImage(imgurl, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, sb.ToString().Trim()));
                    return true;
                }
            }
            return false;
        }
예제 #12
0
        public static string ResolveMedia(string orgData, bool tcoResolve)
        {
            if (!_isresolve)
            {
                return(orgData);
            }
            lock (_lockObj)
            {
                if (urlCache.Count > 500)
                {
                    urlCache.Clear(); //定期的にリセット
                }
            }

            Match m = Regex.Match(orgData, "(?<svc>https?://.+?/)(?<path>[^\"]+)?", RegexOptions.IgnoreCase);

            if (m.Success)
            {
                string orgUrl     = m.Result("${svc}");
                string orgUrlPath = m.Result("${path}");
                if ((_isForceResolve ||
                     Array.IndexOf(_ShortUrlService, 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]));
                    }
                    else
                    {
                        try
                        {
                            //urlとして生成できない場合があるらしい
                            //string urlstr = new Uri(urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                            string      retUrlStr = "";
                            string      tmpurlStr = new Uri(MyCommon.urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                            HttpVarious httpVar   = new HttpVarious();
                            retUrlStr = MyCommon.urlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr));
                            if (retUrlStr.StartsWith("http"))
                            {
                                retUrlStr = retUrlStr.Replace("\"", "%22");  //ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード
                                lock (_lockObj)
                                {
                                    if (!urlCache.ContainsKey(orgUrl))
                                    {
                                        urlCache.Add(orgUrl, orgData.Replace(tmpurlStr, retUrlStr));
                                    }
                                }
                                return(orgData.Replace(tmpurlStr, retUrlStr));
                            }
                        }
                        catch (Exception)
                        {
                            return(orgData);
                        }
                    }
                }
            }

            return(orgData);
        }
예제 #13
0
        public static string Resolve(string orgData, bool tcoResolve)
        {
            if (!_isresolve)
            {
                return(orgData);
            }
            lock (_lockObj)
            {
                if (urlCache.Count > 500)
                {
                    urlCache.Clear(); //定期的にリセット
                }
            }

            List <string>   urlList = new List <string>();
            MatchCollection m       = Regex.Matches(orgData, "<a href=\"(?<svc>http://.+?/)(?<path>[^\"]+)?\"", RegexOptions.IgnoreCase);

            foreach (Match orgUrlMatch in m)
            {
                string orgUrl     = orgUrlMatch.Result("${svc}");
                string orgUrlPath = orgUrlMatch.Result("${path}");
                if ((_isForceResolve || Array.IndexOf(_ShortUrlService, 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として生成できない場合があるらしい
                        //string urlstr = new Uri(urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                        string      retUrlStr = "";
                        string      tmpurlStr = new Uri(MyCommon.urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                        HttpVarious httpVar   = new HttpVarious();
                        retUrlStr = MyCommon.urlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr));
                        if (retUrlStr.StartsWith("http"))
                        {
                            retUrlStr = retUrlStr.Replace("\"", "%22");  //ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード
                            orgData   = orgData.Replace("<a href=\"" + tmpurlStr, "<a href=\"" + retUrlStr);
                            lock (_lockObj)
                            {
                                if (!urlCache.ContainsKey(orgUrl))
                                {
                                    urlCache.Add(orgUrl, retUrlStr);
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        //Through
                    }
                }
            }

            return(orgData);
        }
예제 #14
0
파일: Bing.cs 프로젝트: CiaNostal/OpenTween
 public bool Translate(string _from, string _to, string _text, out string buf)
 {
     HttpVarious http = new HttpVarious();
     string apiurl = TranslateUri + "&text=" + System.Web.HttpUtility.UrlEncode(_text) + "&to=" + _to;
     string content = "";
     if (http.GetData(apiurl, null, out content))
     {
         buf = string.Copy(content);
         return true;
     }
     buf = null;
     return false;
 }
예제 #15
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Photozou_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^http://photozou\.jp/photo/show/(?<userId>[0-9]+)/(?<photoId>[0-9]+)", RegexOptions.IgnoreCase);
     if (mc.Success)
     {
         var src = "";
         var show_info = mc.Result("http://api.photozou.jp/rest/photo_info?photo_id=${photoId}");
         if (http.GetData(show_info, null, out src, 0, out args.errmsg, ""))
         {
             var xdoc = new XmlDocument();
             var thumbnail_url = "";
             try
             {
                 xdoc.LoadXml(src);
                 thumbnail_url = xdoc.SelectSingleNode("/rsp/info/photo/thumbnail_image_url").InnerText;
             }
             catch(Exception ex)
             {
                 args.errmsg = ex.Message;
                 thumbnail_url = "";
             }
             if (string.IsNullOrEmpty(thumbnail_url)) return false;
             var _img = http.GetImage(thumbnail_url, args.url.Key);
             if (_img == null) return false;
             args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
             args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
             return true;
         }
     }
     return false;
 }
예제 #16
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Piapro_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^http://piapro\.jp/(?:content/[0-9a-z]+|t/[0-9a-zA-Z_\-]+)$");
     if (mc.Success)
     {
         var src = "";
         if (http.GetData(args.url.Key, null, out src, 0, out args.errmsg, ""))
         {
             var _mc = 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 (_mc.Success)
             {
                 //各画像には120x120のサムネイルがある(多分)ので、URLを置き換える。元々ページに埋め込まれている画像は500x500
                 var r = new System.Text.RegularExpressions.Regex(@"_\d{4}_\d{4}");
                 var min_img_url = r.Replace(_mc.Groups["big_img"].Value, "_0120_0120");
                 var _img = http.GetImage(min_img_url, args.url.Key, 0, out args.errmsg);
                 if (_img == null) return false;
                 args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                 args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                 return true;
             }
             else
             {
                 args.errmsg = "Pattern NotFound";
             }
         }
     }
     return false;
 }
예제 #17
0
        public static string Resolve(string orgData, bool tcoResolve)
        {
            if (!_isresolve) return orgData;
            lock (_lockObj)
            {
                if (urlCache.Count > 500)
                {
                    urlCache.Clear(); //定期的にリセット
                }
            }

            List<string> urlList = new List<string>();
            MatchCollection m = Regex.Matches(orgData, "<a href=\"(?<svc>http://.+?/)(?<path>[^\"]+)?\"", RegexOptions.IgnoreCase);
            foreach (Match orgUrlMatch in m)
            {
                string orgUrl = orgUrlMatch.Result("${svc}");
                string orgUrlPath = orgUrlMatch.Result("${path}");
                if (Array.IndexOf(_ShortUrlService, 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として生成できない場合があるらしい
                        //string urlstr = new Uri(urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                        string retUrlStr = "";
                        string tmpurlStr = new Uri(MyCommon.urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                        HttpVarious httpVar = new HttpVarious();
                        retUrlStr = MyCommon.urlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr));
                        if (retUrlStr.StartsWith("http"))
                        {
                            retUrlStr = retUrlStr.Replace("\"", "%22");  //ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード
                            orgData = orgData.Replace("<a href=\"" + tmpurlStr, "<a href=\"" + retUrlStr);
                            lock (_lockObj)
                            {
                                if (!urlCache.ContainsKey(orgUrl)) urlCache.Add(orgUrl, retUrlStr);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        //Through
                    }
                }
            }

            return orgData;
        }
예제 #18
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool Pixiv_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var src = "";
     //illustIDをキャプチャ
     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);
     if (mc.Groups["tag"].Value == "R-18" || mc.Groups["tag"].Value == "R-18G")
     {
         args.errmsg = "NotSupported";
         return false;
     }
     else
     {
         var http = new HttpVarious();
         if (http.GetData(Regex.Replace(mc.Groups[0].Value, "amp;", ""), null, out src, 0, out args.errmsg, ""))
         {
             var _mc = Regex.Match(src, mc.Result(@"http://img([0-9]+)\.pixiv\.net/img/.+/${illustId}_[ms]\.([a-zA-Z]+)"));
             if (_mc.Success)
             {
                 var _img = http.GetImage(_mc.Value, args.url.Value, 0, out args.errmsg);
                 if (_img == null) return false;
                 args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                 args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                 return true;
             }
             else if (Regex.Match(src, "<span class=//error//>ログインしてください</span>").Success)
             {
                 args.errmsg = "NotSupported";
             }
             else
             {
                 args.errmsg = "Pattern NotFound";
             }
         }
     }
     return false;
 }
예제 #19
0
        public static string ResolveMedia(string orgData, bool tcoResolve)
        {
            if (!_isresolve) return orgData;
            lock (_lockObj)
            {
                if (urlCache.Count > 500)
                    urlCache.Clear(); //定期的にリセット
            }

            Match m = Regex.Match(orgData, "(?<svc>https?://.+?/)(?<path>[^\"]+)?", RegexOptions.IgnoreCase);
            if (m.Success)
            {
                string orgUrl = m.Result("${svc}");
                string orgUrlPath = m.Result("${path}");
                if (Array.IndexOf(_ShortUrlService, 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]);
                    }
                    else
                    {
                        try
                        {
                            //urlとして生成できない場合があるらしい
                            //string urlstr = new Uri(urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                            string retUrlStr = "";
                            string tmpurlStr = new Uri(MyCommon.urlEncodeMultibyteChar(orgUrl)).GetLeftPart(UriPartial.Path);
                            HttpVarious httpVar = new HttpVarious();
                            retUrlStr = MyCommon.urlEncodeMultibyteChar(httpVar.GetRedirectTo(tmpurlStr));
                            if (retUrlStr.StartsWith("http"))
                            {
                                retUrlStr = retUrlStr.Replace("\"", "%22");  //ダブルコーテーションがあるとURL終端と判断されるため、これだけ再エンコード
                                lock (_lockObj)
                                {
                                    if (!urlCache.ContainsKey(orgUrl)) urlCache.Add(orgUrl, orgData.Replace(tmpurlStr, retUrlStr));
                                }
                                return orgData.Replace(tmpurlStr, retUrlStr);
                            }
                        }
                        catch (Exception)
                        {
                            return orgData;
                        }
                    }
                }
            }

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

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

                if (!string.IsNullOrEmpty(imgurl))
                {
                    var _img = http.GetImage(imgurl, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
            }
            return false;
        }
예제 #21
0
 public string LanguageDetect(string source)
 {
     var http = new HttpVarious();
     var apiurl = LanguageDetectEndPoint;
     var headers = new Dictionary<string, string>();
     headers.Add( "User-Agent", MyCommon.GetUserAgentString() );
     headers.Add( "v", "1.0" );
     headers.Add( "q", source );
     var content = "";
     if ( http.GetData( apiurl, headers, out content ) ) {
         var serializer = new DataContractJsonSerializer( typeof(LanguageDetectResponse) );
         try {
             var res = MyCommon.CreateDataFromJson<LanguageDetectResponse>( content );
             return res.ResponseData.Language;
         } catch ( Exception ) {
             return "";
         }
     }
     return "";
 }
예제 #22
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool TwipplePhoto_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します
            var http = new HttpVarious();
            var mc = Regex.Match(args.url.Value, "^http://p.twipple.jp/(?<contentId>[0-9a-z]+)", RegexOptions.IgnoreCase);
            if (mc.Success)
            {
                var src = "";
                if (http.GetData(args.url.Key, null, out src, 0, out args.errmsg, ""))
                {
                    var thumbnail_url = "";
                    var ContentId = mc.Groups["contentId"].Value;
                    var DataDir = new StringBuilder();

                    // DataDir作成
                    DataDir.Append("data");
                    for (int i = 0; i < ContentId.Length; i++)
                    {
                        DataDir.Append("/");
                        DataDir.Append(ContentId[i]);
                    }

                    // サムネイルURL抽出
                    thumbnail_url = Regex.Match(src, @"http://p\.twipple\.jp/" + DataDir.ToString() + @"_s\.([a-zA-Z]+)").Value;

                    if (string.IsNullOrEmpty(thumbnail_url)) return false;
                    var _img = http.GetImage(thumbnail_url, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
            }
            return false;
        }
예제 #23
0
        public string Shorten(string source)
        {
            var http = new HttpVarious();
            var apiurl = "https://www.googleapis.com/urlshortener/v1/url";
            var headers = new Dictionary<string, string>();
            headers.Add( "User-Agent", MyCommon.GetUserAgentString() );
            headers.Add( "Content-Type", "application/json" );

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

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

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

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

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

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

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

                    }
                    catch(Exception)
                    {

                    }

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

            }
            return false;
        }
예제 #25
0
        public bool Translate(string srclng, string dstlng, string source, ref string destination, ref string ErrMsg)
        {
            var http = new HttpVarious();
            var apiurl = TranslateEndPoint;
            var headers = new Dictionary<string, string>();
            headers.Add( "v", "1.0" );

            ErrMsg = "";
            if ( string.IsNullOrEmpty( srclng ) || string.IsNullOrEmpty( dstlng ) ) {
                return false;
            }
            headers.Add( "User-Agent", MyCommon.GetUserAgentString() );
            headers.Add( "langpair", srclng + "|" + dstlng );

            headers.Add( "q", source );

            var content = "";
            if ( http.GetData( apiurl, headers, out content ) ) {
                var serializer = new DataContractJsonSerializer( typeof(TranslateResponse) );
                TranslateResponse res;

                try {
                    res = MyCommon.CreateDataFromJson<TranslateResponse>( content );
                } catch ( Exception ) {
                    ErrMsg = "Err:Invalid JSON";
                    return false;
                }

                if ( res.ResponseData == null ) {
                    ErrMsg = "Err:" + res.ResponseDetails;
                    return false;
                }
                var _body = res.ResponseData.TranslatedText;
                var buf = HttpUtility.UrlDecode( _body );

                destination = string.Copy( buf );
                return true;
            }
            return false;
        }
예제 #26
0
        /// <summary>
        /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
        /// </summary>
        /// <param name="args">class CreateImageArgs
        ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
        ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
        ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
        ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
        /// </param>
        /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
        /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
        /// <remarks></remarks>
        private bool instagram_CreateImage(CreateImageArgs args)
        {
            // TODO: サムネイル画像読み込み処理を記述します

            var src = "";
            var http = new HttpVarious();
            if (http.GetData(args.url.Value, null, out src, 0, out args.errmsg, ""))
            {
                var mc = Regex.Match(src, "<meta property=\"og:image\" content=\"(?<url>.+)\" ?/>");
                if (mc.Success)
                {
                    var _img = http.GetImage(mc.Groups["url"].Value, args.url.Key, 0, out args.errmsg);
                    if (_img == null) return false;
                    args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
                    args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
                    return true;
                }
                else
                {
                    args.errmsg = "Pattern NotFound";
                }
            }
            return false;
        }
예제 #27
0
 /// <summary>
 /// BackgroundWorkerから呼び出されるサムネイル画像作成デリゲート
 /// </summary>
 /// <param name="args">class CreateImageArgs
 ///                                 KeyValuePair<string, string> url                  元URLとサムネイルURLのKeyValuePair
 ///                                 List<KeyValuePair<string, Image>> pics         元URLとサムネイル画像のKeyValuePair
 ///                                 List<KeyValuePair<string, string>> tooltiptext 元URLとツールチップテキストのKeyValuePair
 ///                                 string errmsg                                        取得に失敗した際のエラーメッセージ
 /// </param>
 /// <returns>サムネイル画像作成に成功した場合はTrue,失敗した場合はFalse
 /// なお失敗した場合はargs.errmsgにエラーを表す文字列がセットされる</returns>
 /// <remarks></remarks>
 private bool nicoseiga_CreateImage(CreateImageArgs args)
 {
     // TODO: サムネイル画像読み込み処理を記述します
     var http = new HttpVarious();
     var mc = Regex.Match(args.url.Value, @"^http://(?:seiga\.nicovideo\.jp/seiga/|nico\.ms/)im(?<id>\d+)");
     if (mc.Success)
     {
         var _img = http.GetImage("http://lohas.nicoseiga.jp/thumb/" + mc.Groups["id"].Value + "q?", args.url.Key, 0, out args.errmsg);
         if (_img == null) return false;
         args.pics.Add(new KeyValuePair<string, Image>(args.url.Key, _img));
         args.tooltipText.Add(new KeyValuePair<string, string>(args.url.Key, ""));
         return true;
     }
     return false;
 }