コード例 #1
0
ファイル: Search.cs プロジェクト: mikesavior/elmcity
        public static List <SearchResult> BingSearch(string search_expression, int max, Dictionary <string, object> stats_dict)
        {
            var        url_template    = "http://api.search.live.net/json.aspx?AppId=" + Configurator.bing_api_key + "&Market=en-US&Sources=Web&Adult=Strict&Query={0}&Web.Count=50";
            var        offset_template = "&Web.Offset={1}";
            var        results_list    = new List <SearchResult>();
            Uri        search_url;
            List <int> offsets = GenUtils.EveryNth(start: 0, step: 50, stop: max).ToList();

            var options = new ParallelOptions();

            Parallel.ForEach(source: offsets, parallelOptions: options, body: (offset) =>
                             // foreach (var offset in offsets)
            {
                if (offset == 0)
                {
                    search_url = new Uri(string.Format(url_template, search_expression));
                }
                else
                {
                    search_url = new Uri(string.Format(url_template + offset_template, search_expression, offset));
                }

                var page = CallSearchApi(search_url);
                if (page == null)
                {
                    //continue;
                    return;
                }
                try
                {
                    JObject o = (JObject)JsonConvert.DeserializeObject(page);

                    var results_query =
                        from result in o["SearchResponse"]["Web"]["Results"].Children()
                        select new SearchResult
                        (
                            url: result.Value <string>("Url").ToString() ?? "NoUrl",
                            title: result.Value <string>("Title").ToString() ?? "NoTitle",
                            content: result.Value <string>("Description").ToString() ?? "NoDescription",
                            engine: SearchResult.FindingEngine.bing
                        );

                    foreach (var result in results_query)
                    {
                        results_list.Add(result);
                    }
                }
                catch
                {
                    GenUtils.PriorityLogMsg("exception", "BingSearch", search_url.ToString());
                }
            }

                             );

            return(results_list);
        }