Esempio n. 1
0
 public Result(ResultSpec spec)
 {
     ResultSpec = spec;
     Type       = ResultTypes.DirectURL;
 }
        /// <summary>
        /// バックグラウンドワーカーの作業
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void bgw1_DoWork(object sender, DoWorkEventArgs e)
        {
            List <Result> results = new List <Result>();

            if (e.Argument is List <String> args)
            {
                foreach (var arg in args)
                {
                    try
                    {
                        if (Util.IsUrl(arg) == false)
                        {
                            var urls = Search.GetSearchResult(arg).Result;
                            Thread.Sleep(1000);

                            ResultSearch search = new ResultSearch();

                            foreach (var url in urls.URLs)
                            {
                                try
                                {
                                    var s = ResultSpec.GetTextAsync(Util.SpecUrl(url), arg).Result;

                                    search.Specs.Add(s);

                                    Thread.Sleep(1000);
                                }
                                catch
                                {
                                }
                            }

                            Result result = new Result(search);
                            result.Time = DateTime.Now;
                            result.Word = arg;

                            results.Add(result);
                        }
                        else
                        {
                            var t = arg.TrimEnd('/');
                            var s = ResultSpec.GetTextAsync(Util.SpecUrl(t)).Result;
                            Thread.Sleep(1000);

                            Result result = new Result(s);
                            result.Time = DateTime.Now;
                            result.Word = arg;

                            results.Add(result);
                        }
                    }
                    catch
                    {
                    }
                }

                Console.WriteLine(String.Join(",", args));
            }

            e.Result = results;
        }
Esempio n. 3
0
        public static async Task <ResultSpec> GetTextAsync(string url, string searchword = null)
        {
            var s = new ResultSpec();

            var doc = default(IHtmlDocument);

            using (var client = new HttpClient())
                using (var stream = await client.GetStreamAsync(new Uri(url)))
                {
                    // AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる
                    var parser = new HtmlParser();
                    doc = parser.ParseDocument(stream);
                }

            // HTMLからtitleタグの値(サイトのタイトルとして表示される部分)を取得する
            var title = doc.QuerySelector(".titie");

            s.Title      = doc.Title;
            s.URL        = url;
            s.SearchWord = searchword;

            var speclistElement = doc.QuerySelector("[class^=tbl]");

            var specrowlistElement = speclistElement.QuerySelectorAll("tr:not([class^=itemview])");

            foreach (var specrowElement in specrowlistElement)
            {
                var specheaderlistElement = specrowElement.QuerySelectorAll("th");
                var specdetaillistElement = specrowElement.QuerySelectorAll("td");

                foreach (var(specheaderElement, index) in specheaderlistElement.Select((item, index) => (item, index)))
                {
                    if (specheaderElement.TextContent.Trim() != String.Empty)
                    {
                        var detail = new Detail();

                        detail.Key   = specheaderElement.TextContent.Trim();
                        detail.Value = specdetaillistElement[index].TextContent.Trim();

                        s.Item.Add(detail);
                    }
                }
            }

            var imagedoc = default(IHtmlDocument);

            using (var client = new HttpClient())
                using (var stream = await client.GetStreamAsync(new Uri(String.Format(ImageUrlParts, s.ItemID))))
                {
                    // AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる
                    var parser = new HtmlParser();
                    imagedoc = parser.ParseDocument(stream);
                }

            var imageElements = imagedoc.QuerySelectorAll("img");

            foreach (IHtmlImageElement imageElement in imageElements)
            {
                string fullurl = imageElement.Source.Replace("/t/", "/fullscale/");

                if (fullurl.Contains(s.ItemID) && !s.ImageUrls.Contains(fullurl))
                {
                    s.ImageUrls.Add(fullurl);
                }
            }

            var urlword = s.SearchWord ?? s.ItemID;

            DownloadImage.GetImages(Util.NetWorkFolderPath + urlword, s.ImageUrls);

            return(s);
        }
        /// <summary>
        /// 検索結果の選択中の行が変更されたときのイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lvSearchResult_SelectedIndexChanged(object sender, EventArgs e)
        {
            //表示中アイテムが0件の場合はなにもしない
            if (lvSearchResult.Items.Count <= 0)
            {
                return;
            }

            //選択中アイテムがない場合はなにもしない
            if (lvSearchResult.SelectedItems.Count <= 0)
            {
                return;
            }

            //インデックスを取得する
            int i;
            int l = lvSearchResult.SelectedItems[0].Index;

            //検索履歴が選択されているか調べる
            //選択されていない場合はタグから親のインデックスを取得する
            if (lvSearchHistory.SelectedItems.Count <= 0)
            {
                i = (int)lvSearchResult.SelectedItems[0].Tag;
            }
            else
            {
                i = lvSearchHistory.SelectedItems[0].Index;
            }

            //インデックスより検索履歴件数が少ない場合は戻る
            if (this.Results.Count < i || this.Results[i].ResultNumber < l)
            {
                return;
            }

            //表示をリセットする
            ClearResultPrev();

            //表示するデータを取得する
            var spec = new ResultSpec();

            switch (this.Results[i].Type)
            {
            case ResultTypes.DirectURL:
                spec = this.Results[i].ResultSpec;
                break;

            case ResultTypes.Search:
                spec = this.Results[i].ResultSearch.Specs[l];
                break;
            }

            selectingcode = spec.SearchWord ?? spec.ItemID;
            string str = String.Empty;

            foreach (var sp in spec.Item)
            {
                str += sp.Key + "\t" + sp.Value + "\r\n";
            }

            //画面に設定
            lblTitleDetail.Text = spec.Title;
            lblURLDetail.Text   = spec.URL;
            txtResultPrev.Text  = str;
        }