Пример #1
0
 private void SearchFromSodu(SearchResult searchResult,
                              HttpContentDownloader downloader,
                              Uri searchUri)
 {
     downloader.Download(searchUri,
                         ar =>
                         {
                             try
                             {
                                 //At this step, we can get the index page in the search engine 
                                 var state = (RequestState)ar.AsyncState;
                                 state.stopTimer = true;
                                 var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                                 response.GetResponseStream();
                                 var parser = new SoduSearchResultPageParser();
                                 SearchBookResult =
                                     parser.Parse(response.GetResponseStream(), searchResult) as
                                     List<SearchResult>;
                                 ProgressIndicatorHelper.StopProgressIndicator();
                             }
                             catch (WebException e)
                             {
                                 if (e.Status == WebExceptionStatus.RequestCanceled)
                                 {
                                     throw new TimeoutException("连接sodu.org超时,可尝试更换搜书引擎");
                                 }
                             }
                         });
 }
Пример #2
0
        private void CallBookContentPage(object sender, RoutedEventArgs e)
        {
            var downloader = new HttpContentDownloader();
            //var uri1 = new Uri(String.Format("http://www.opny.net/Html/Book/23/18992/4274362.html"), UriKind.Absolute);
            //var uri2 = new Uri(String.Format("http://www.qu24read.com/book/64/64383/5620931.html"), UriKind.Absolute);
            //var uri3 = new Uri(String.Format("http://www.wu69.org/files/article/html/4/4144/2111331.html"), UriKind.Absolute);
            //var uri4 = new Uri(String.Format("http://www.oaixs.org/files/article/html/5/5929/4478629.html"), UriKind.Absolute);
            //var uri5 = new Uri(String.Format("http://www.lwzw.com/files/article/html/5/5703/2274760.html"), UriKind.Absolute);
            //var uri6 = new Uri(String.Format("http://www.q520.org/1/1846/1061784.html"), UriKind.Absolute);
            //var uri7 = new Uri(String.Format("http://www.dazhouhuangzu.net/mulu/0/175/1789564.html"), UriKind.Absolute);
            //var uri8 = new Uri(String.Format("http://www.baihuawen.com/xiaoshuo/27/27183/9662281.html"), UriKind.Absolute);
            //var uri9 = new Uri(String.Format("http://www.xiaoshuoread.com/read/0/853/2119114.html"), UriKind.Absolute); 
            var uri10 = new Uri(String.Format("http://www.wanshuba.com/Html/3/3833/2151249.html"), UriKind.Absolute);

            var dbHelpler = TestDBHelper.GetTestDBInstance();
            dbHelpler.PrepareTempDB();

            //downloader.Download(uri1, new Chapter { ChapterUri = uri1, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri2, new Chapter { ChapterUri = uri2, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri3, new Chapter { ChapterUri = uri3, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri4, new Chapter { ChapterUri = uri4, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri5, new Chapter { ChapterUri = uri5, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri6, new Chapter { ChapterUri = uri6, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri7, new Chapter { ChapterUri = uri7, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri8, new Chapter { ChapterUri = uri8, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //downloader.Download(uri9, new Chapter { ChapterUri = uri9, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            downloader.Download(uri10, dbHelpler.TestTextChapter, new WebSiteBookContentPageParser());
        }
Пример #3
0
        private void CallWebSiteBookSearchPage(object sender, RoutedEventArgs e)
        {
            var downloader = new HttpContentDownloader();
            var uri1 = new Uri(String.Format("http://www.xinduba.com/Html/Book/18/18798/"), UriKind.Absolute); // BookText
            var uri2 = new Uri(String.Format("http://www.xiaoshuo999.org/files/article/html/0/421/index.html"), UriKind.Absolute); //Id Content
            var uri3 = new Uri(String.Format("http://www.yjxs.net/files/article/html/92/92146/"), UriKind.Absolute); //Id Content
            var uri4 = new Uri(String.Format("http://www.geiliwx.com/GeiLi/4/4703/"), UriKind.Absolute);
            var uri5 = new Uri(String.Format("http://tieshu.net/lishi/25769/"), UriKind.Absolute);
            var uri6 = new Uri(String.Format("http://www.zhantianzw.com/mulu/0/431/"), UriKind.Absolute);
            var uri7 = new Uri(String.Format("http://www.du1du.com/book/71/70333/"), UriKind.Absolute);
            var uri8 = new Uri(String.Format("http://www.hxqwx.com/xiaoshuo/71/70757/"), UriKind.Absolute);
            var uri9 = new Uri(String.Format("http://www.06sk.com/xiaoshuo/0/9/"), UriKind.Absolute);
            var uri10 = new Uri(String.Format("http://www.qu24read.com/book/64/64383/index.html"), UriKind.Absolute);


            downloader.Download(uri1, new Book { Name = "宰执天下", IndexPage = uri1, RootUrl = "http://www.abc.com/"}, new WebsiteBookIndexPageParser());
            downloader.Download(uri2, new Book { Name = "宰执天下", IndexPage = uri2, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri3, new Book { Name = "宰执天下", IndexPage = uri3, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri4, new Book { Name = "宰执天下", IndexPage = uri4, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri5, new Book { Name = "宰执天下", IndexPage = uri5, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri6, new Book { Name = "宰执天下", IndexPage = uri6, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri7, new Book { Name = "宰执天下", IndexPage = uri7, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri8, new Book { Name = "宰执天下", IndexPage = uri8, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri9, new Book { Name = "宰执天下", IndexPage = uri9, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
            downloader.Download(uri10, new Book { Name = "宰执天下", IndexPage = uri10, RootUrl = "http://www.abc.com/" }, new WebsiteBookIndexPageParser());
        }
Пример #4
0
 private void CallSearchPage(object sender, RoutedEventArgs e)
 {
     var keyword = "官神";
     HttpContentDownloader downloader = new HttpContentDownloader();
     var uri = new Uri(String.Format("http://search.sodu.org/searchname.aspx?wd={0}", HttpUtility.UrlEncode(keyword)), UriKind.Absolute);
     //  downloader.Download(uri, keyword);
 }
        private void SaveSingleChapter(object sender, RoutedEventArgs e)
        {
            var downloader = new HttpContentDownloader();
            var uri1 = new Uri(String.Format("http://www.tianhen.com/tian/Book/0/547/3165604.shtml"), UriKind.Absolute);

            //downloader.Download(uri1, new Chapter { ChapterUri = uri1, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
            //var uri10 = new Uri(String.Format("http://www.ruyu.org/bk/0/200/1821260.html"), UriKind.Absolute);
            //downloader.Download(uri10, new Chapter { ChapterUri = uri10, ChapterName = "望河异论希(四)" }, new WebSiteBookContentPageParser());
        }
Пример #6
0
        public void DownloadChapter(object s)
        {
            var cha = (BookIndexViewModel.DownloadTask) s;

            var downloader = new HttpContentDownloader();
            downloader.Download(cha.TaskChapter.ChapterUri, ar =>
                                                                {
                                                                    //At this step, we can get the index page in the search engine 
                                                                    var state = (RequestState) ar.AsyncState;
                                                                    var response =
                                                                        (HttpWebResponse)
                                                                        state.Request.EndGetResponse(ar);
                                                                    response.GetResponseStream();

                                                                    var parser = new WebSiteBookContentPageParser();
                                                                    parser.Parse(response.GetResponseStream(),
                                                                                 cha.TaskChapter);
                                                                    CommonModels.TestChapter = chapter;
                                                                });
        }
Пример #7
0
        public void Search(string keyword)
        {
            var searchEngine = GetSearchEngine();
            var searchUri = new Uri(searchEngine.SearchUri, UriKind.Absolute);
            if (searchEngine.Type == SearchEngineType.Sodu)
            {
                searchUri = new Uri(String.Format(searchEngine.SearchUri, HttpUtility.UrlEncode(keyword)), UriKind.Absolute);
            }

            var downloader = new HttpContentDownloader();
            DownloaderList.Add(downloader);

            var searchResult = new SearchResult();

            if (searchEngine.Type == SearchEngineType.Sodu)
            {
                SearchFromSodu(searchResult, downloader, searchUri);
            }

            if (searchEngine.Type == SearchEngineType.Xiaoelang)
            {
                SearchFromXiaoelang(keyword, searchResult, downloader, searchUri);
            }
        }
Пример #8
0
        /// <summary>
        /// Download single chapter, should be active from the ChapterView Page
        /// </summary>
        /// <param name="chapter"></param>
        /// <param name="callback"></param>
        public void DownloadSingleChapter(Chapter chapter, Action callback)
        {
            var downloader = new HttpContentDownloader();
            downloader.Download(chapter.ChapterUri, ar =>
            {
                try
                {
                    //At this step, we can get the index page in the search engine 
                    var state = (RequestState)ar.AsyncState;
                    state.stopTimer = true;
                    var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                    response.GetResponseStream();

                    var parser = new WebSiteBookContentPageParser();
                    parser.ParsingCompleted += ChapterContentParsingCompleted;

                    chapter.Downloaded = true;
                    parser.Parse(response.GetResponseStream(), chapter);

                    if (callback != null)
                    {
                        callback();
                    }
                }
                catch (WebException e)
                {
                    //TODO need to recover from exception
                    ExceptionHandler.HandleException(e);
                }
            });
        }
Пример #9
0
 private void SearchFromXiaoelang(string keyword,
                                  SearchResult searchResult,
                                  HttpContentDownloader downloader,
                                  Uri searchUri)
 {
     downloader.DownloadPost(searchUri, "keyword", keyword,
                             ar =>
                             {
                                 try
                                 {
                                     //At this step, we can get the index page in the search engine 
                                     var state = (RequestState)ar.AsyncState;
                                     state.stopTimer = true;
                                     var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                                     response.GetResponseStream();
                                     var parser = new XiaoelangSearchResultPageParser();
                                     SearchBookResult =
                                         parser.Parse(response.GetResponseStream(), searchResult) as List<SearchResult>;
                                 }
                                 catch (WebException e)
                                 {
                                     if (e.Status == WebExceptionStatus.RequestCanceled)
                                         throw new TimeoutException("连接xiaoelang.com超时,请尝试更换搜书引擎");
                                 }
                             });
 }
Пример #10
0
        public void DownloadAndParseWebSiteBookIndexPage(Book book)
        {
            var downloader = new HttpContentDownloader();
            downloader.Download(book.IndexPage,
                ar =>
                {
                    try
                    {
                        //At this step, we can get the index page in the search engine 
                        var state = (RequestState)ar.AsyncState;
                        var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                        response.GetResponseStream();
                        book.RootUrl = UrlHelper.GetRootUrlString(response.ResponseUri);
                        var parser = new WebsiteBookIndexPageParser();
                        try
                        {
                            ProgressIndicatorHelper.CrossThreadStartProgressIndicator(true, "下载完成,解析目录中");
                            parser.Parse(response.GetResponseStream(), book);
                            SelectedBook = book;
                            ModelManager.GetBookIndexModel().Book = SelectedBook;

                            if (GetBookIndexPageCompleted != null)
                            {
                                GetBookIndexPageCompleted(this, null);
                            }
                        }
                        catch (Exception e)
                        {
                            ExceptionHandler.HandleException(e);
                        }
                    }
                    catch (WebException e)
                    {
                        if (e.Status == WebExceptionStatus.RequestCanceled)
                        {
                            throw new TimeoutException(String.Format("连接{0}目录页超时", book.WebSite.WebSiteName));
                        }
                    }
              
                });
        }
Пример #11
0
        public void GetBookSiteBookIndexPageLink(Book book)
        {
            var downloader = new HttpContentDownloader();
            try
            {
                downloader.Download(book.IndexPage,
                    ar =>
                    {
                        try
                        {
                            //At this step, we can get the index page in the search engine 
                            var state = (RequestState)ar.AsyncState;
                            var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                            response.GetResponseStream();

                            book.RootUrl = UrlHelper.GetRootUrlString(response.ResponseUri);
                            var parser = new WebSiteBookContentPageParser();
                            parser.Parse(response.GetResponseStream(), book);

                            DownloadAndParseWebSiteBookIndexPage(book);

                        }
                        catch (WebException e)
                        {
                            if (e.Status == WebExceptionStatus.RequestCanceled)
                            {
                                throw new TimeoutException(String.Format("连接{0}超时", book.WebSite.WebSiteName));
                            }
                        }

                    });
            }
            catch (WebException we)
            {
                ExceptionHandler.HandleException(we);
            }
        }
Пример #12
0
        public void GetBookSiteLink(SearchResult searchResult)
        {
            var searchEngine = GetSearchEngine();

            Uri soduBookLatestUpdatePage = searchResult.IndexPageUri;
            var downloader = new HttpContentDownloader();
            DownloaderList.Add(downloader);
            downloader.Download(soduBookLatestUpdatePage,
                ar =>
                {
                    //At this step, we can get the index page in the search engine 
                    var state = (RequestState)ar.AsyncState;
                    var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                    response.GetResponseStream();

                    if (searchEngine.Type == SearchEngineType.Sodu)
                    {
                        var parser = new SoduBookLastestUpdatePageParser();
                        BookList = parser.Parse(response.GetResponseStream(), searchResult.Book) as List<Book>;
                    }

                    if (searchEngine.Type == SearchEngineType.Xiaoelang)
                    {
                        var parser = new XiaoelangBookLastestUpdatePageParser();
                        BookList = parser.Parse(response.GetResponseStream(), searchResult.Book) as List<Book>;
                    }

                });
        }
Пример #13
0
 private void CallWebsiteSearchIndexPage(object sender, RoutedEventArgs e)
 {
     var downloader = new HttpContentDownloader();
     var uri = new Uri(String.Format("http://go.sodu.tv/gogourl.aspx?obid=03g0q&cid=385&bid=1613&tid=1&zid=1713549"), UriKind.Absolute);
     downloader.Download(uri, null, new WebSiteBookContentPageParser());
 }
Пример #14
0
 private void CallSoduLatestUpdatePage(object sender, RoutedEventArgs e)
 {
     var downloader = new HttpContentDownloader();
     var uri = new Uri(String.Format("http://www.sodu.org/mulu_160730.html"), UriKind.Absolute);
     downloader.Download(uri, null, new SoduBookLastestUpdatePageParser());
 }
Пример #15
0
        public void Refresh()
        {
            ProgressIndicatorHelper.StartProgressIndicator(true , "更新本书目录");
            var downloader = new HttpContentDownloader();
            DownloaderList.Add(downloader);
            downloader.Download(Book.IndexPage,
                ar =>
                {
                    //At this step, we can get the index page in the search engine 
                    var state = (RequestState)ar.AsyncState;
                    state.stopTimer = true;
                    var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                    response.GetResponseStream();

                    Book.RootUrl = UrlHelper.GetRootUrlString(response.ResponseUri);
                    var parser = new WebsiteBookIndexPageParser();

                    var temp = new Book {RootUrl = Book.RootUrl};
                    parser.Parse(response.GetResponseStream(), temp );

                    var newChapters = new List<Chapter>();
                    newChapters.AddRange(
                            temp.Chapters.Where
                            (
                                chapter => !Book.Chapters.Any(c => c.ChapterName == chapter.ChapterName)
                            ));

                    if (newChapters.Count > 0)
                    {
                        var totalChapters = new List<Chapter>();
                        totalChapters.AddRange(Book.Chapters);
                        totalChapters.AddRange(newChapters);
                        _storage.SaveChapters(newChapters);
                        Book.Chapters = totalChapters.ToArray();
                        LastPage();
                    }
                    else
                    {
                        CrossThreadHelper.CrossThreadMethodCall(() => MessageBox.Show("本书尚未有新的章节"));
                    }

                    ProgressIndicatorHelper.StopProgressIndicator();
                });
        }
Пример #16
0
        public void DownloadChapter(object s)
        {
            var cha = (DownloadTask)s;
            var downloader = new HttpContentDownloader();
            DownloaderList.Add(downloader);
            downloader.Download(cha.TaskChapter.ChapterUri, ar =>
            {
                try
                {
                    //At this step, we can get the index page in the search engine 
                    var state = (RequestState)ar.AsyncState;
                    state.stopTimer = true;
                    var response = (HttpWebResponse)state.Request.EndGetResponse(ar);
                    response.GetResponseStream();

                    var parser = new WebSiteBookContentPageParser();
                    parser.Parse(response.GetResponseStream(), cha.TaskChapter);

                    lock (_thisLock)
                    {
                        _batchCompleteCount++;
                    }

                    if (_batchCompleteCount == cha.BatchCount)
                    {
                        _batchCompleteCount = 0;
                        ((ManualResetEvent) cha.ResetEvent).Set();
                    }

                }catch (WebException e)
                {
                    ProgressIndicatorHelper.StopProgressIndicator();
                    if (e.Status == WebExceptionStatus.RequestCanceled)
                    {
                        throw new TimeoutException(String.Format("连接{0}超时", cha.TaskChapter.Book.WebSite.WebSiteName));
                    }
                    //TODO need to recover from exception
                    ExceptionHandler.HandleException(e);
                }
            });
        }