// constructor // note: must specify which search type to use public WikipediaSearcher(ArticleCollection Webpages, string Start, string Finish, ForbiddenLinks l, string searchType) { StartPage = Start; FinishPage = Finish; Articles = Webpages; ForbiddenLinksCollection = l; // depth first if (searchType == "DFS") { watch.Start(); SearchDFS(); watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); } // breadth first else if (searchType == "BFS") { watch.Start(); SearchBFS(); watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds + "ms"); } else { Console.WriteLine("Please enter either DFS or BFS to indicate which search type you prefer."); } }
// constructor public WikipediaWebRequest(string requested_page, ArticleCollection Webpages, ForbiddenLinks l, Webpage parent) { ParentPage = parent; RequestedPage = requested_page.Replace(' ', '_'); if (!RequestedPage.Contains("wiki/")) { RequestedPage.Insert(0, "wiki/"); } Articles = Webpages; ForbiddenLinkCollection = l; Controller(); }
// used to run the program void Run() { // stores list of links not to search ForbiddenLinks ForbiddenLinksCollection = new ForbiddenLinks(); // stores master list of webpages ArticleCollection Articles = new ArticleCollection(ForbiddenLinksCollection); bool StartExists; bool FinishExists; string StartPageName; string FinishPageName; // Ask for start page Console.WriteLine("Welcome\nWhich Wikipedia Page would you like to begin at?"); StartPageName = Console.ReadLine(); // StartPageName = "United States"; StartPageName.Replace(' ', '_'); // check if start page exists StartExists = checkIfPageExists(StartPageName); // Ask for end page Console.WriteLine("Which Wikipedia Page would you like to end with?"); FinishPageName = Console.ReadLine(); // FinishPageName = "Federation"; FinishPageName.Replace(' ', '_'); // check if finish page exists FinishExists = checkIfPageExists(FinishPageName); if (StartExists && FinishExists) { searchForWebsite(StartPageName, FinishPageName, Articles, ForbiddenLinksCollection); } else { Console.WriteLine("Unknown Error"); } Console.WriteLine("Terminating Program"); }
// constructor public ArticleCrawler(ArticleCollection c, ForbiddenLinks l) { Articles = c; ForbiddenLinksCollection = l; }
// search for the finishing website // inputs: strings for start and end, ArticleCollection to store webpages in, ForbiddenLinks object void searchForWebsite(string StartPageName, string FinishPageName, ArticleCollection Webpages, ForbiddenLinks Forbidden) { // get data for first webpage WikipediaWebRequest request = new WikipediaWebRequest("wiki/"+StartPageName, Webpages, Forbidden, null); // successful request, start program if (request.SuccessfulWebRequest()) { WikipediaSearcher s = null; // create article crawler ArticleCrawler c = new ArticleCrawler(Webpages, Forbidden); Thread crawler = new Thread(() => c.Start()); crawler.Start(); crawler.Priority = ThreadPriority.Normal; // create searcher Console.WriteLine("Creating Searcher...."); Thread searcher = new Thread(() => {s = new WikipediaSearcher(Webpages, StartPageName, FinishPageName, Forbidden, "BFS");}); searcher.Start(); searcher.Priority = ThreadPriority.AboveNormal; // wait for searcher to complete searcher.Join(); // try to stop crawler try { crawler.Abort(); } catch (PlatformNotSupportedException) { // TODO: investigate this further Console.WriteLine("System does not support abort of threads. Please terminate manually"); } } }
// constructor public ArticleCollection(ForbiddenLinks l) { ForbiddenLinksCollection = l; }