protected void saveButton_Click(object sender, EventArgs e) { PageSummaryView ps = (PageSummaryView)Session["Page" + pageIdTextBox.Text]; CustomGenericList <PageName> pageNames = (CustomGenericList <PageName>)Session["PageNames" + pageIdTextBox.Text]; if (validate(pageNames)) { BHLProvider bp = new BHLProvider(); try { foreach (PageName pageName in pageNames) { if (pageName.IsNew && pageName.Active) { PageName existingPageName = bp.PageNameSelectByPageIDAndNameFound(ps.PageID, pageName.NameFound); if (existingPageName == null) { pageName.PageID = ps.PageID; pageName.Source = "User Reported"; pageName.Active = true; // Get confirmed value and namebankid from uBio FindItItem uBioResult = ubioLookup(pageName.NameFound); if (uBioResult != null) { pageName.NameConfirmed = TypeHelper.NullIfEmpty(uBioResult.Name); pageName.NameBankID = TypeHelper.NullIfZero(uBioResult.NamebankID); } } } else { if (pageName.Active) { FindItItem uBioResult = ubioLookup(pageName.NameFound); if (uBioResult != null && uBioResult.NamebankID >= 0) { pageName.NameConfirmed = TypeHelper.NullIfEmpty(uBioResult.Name); pageName.NameBankID = TypeHelper.NullIfZero(uBioResult.NamebankID); } } } } bp.PageNameSaveList(pageNames); } catch (Exception ex) { Session["Exception"] = ex; Response.Redirect("/Error.aspx"); } } else { return; } Response.Redirect("/Admin/Dashboard.aspx"); }
private FindItItem ubioLookup(string name) { XmlTextReader reader = null; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create( "http://www.ubio.org/webservices/service.php?function=taxonFinder&includeLinks=0&freeText=" + Server.UrlEncode(name)); request.Timeout = 15000; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); reader = new XmlTextReader((Stream)response.GetResponseStream()); XmlDocument doc = new XmlDocument(); doc.Load(reader); FindItItem result = null; // Taking this simple, straight forward approach because we're only expecting one result per check. Will // make parsing algorithm more robust later if needed. XmlNodeList nameList = doc.GetElementsByTagName("nameString"); XmlNodeList idList = doc.GetElementsByTagName("namebankID"); if (nameList.Count == 1) { result = new FindItItem(); result.Name = nameList[0].InnerText; if (idList.Count == 1) { result.NamebankID = int.Parse(idList[0].InnerText); } } return(result); } catch { return(null); } finally { if (reader != null) { reader.Close(); } } }
public FindItItem[] GetUBioNames(int pageID) { bool tooLarge = false; string webServiceUrl = string.Empty; PageSummaryView ps = new BHLProvider().PageSummarySelectByPageId(pageID); string filepath = ps.OcrTextLocation; if (new BHLProvider().GetFileAccessProvider(ConfigurationManager.AppSettings["UseRemoteFileAccessProvider"] == "true").GetFileSizeInKB(filepath) <= 5) { // OCR text not too large for URI, so send it in the UBIO request // Get the OCR text and start to build the UBIO url string ocrText = this.GetOcrText(ps); StringBuilder webServiceUrlSB = new StringBuilder(); webServiceUrlSB.Append("http://www.ubio.org/webservices/service.php?function=taxonFinder&includeLinks=0&freeText="); webServiceUrlSB.Append(System.Web.HttpUtility.UrlEncode(ocrText)); // Add the existing page names for this Page to the UBIO url CustomGenericList <PageName> pageNames = new BHLProvider().PageNameSelectByPageID(pageID); foreach (PageName pageName in pageNames) { webServiceUrlSB.Append(System.Web.HttpUtility.UrlEncode(" " + pageName.NameFound)); } // Get the final UBIO url webServiceUrl = webServiceUrlSB.ToString(); // If the url is too large after all UrlEncoding is complete, just send the file path if (((long)webServiceUrl.Length / 1024) > 5) { tooLarge = true; } } else { tooLarge = true; } // OCR text is too large, so just send the file path //string webServiceUrl = String.Format("http://names.ubio.org/webservices/service.php?function=findIT&url=http://www.botanicus.org/PrimeOcr/{0}/{1}/{2}/{3}.txt&strict=1&keyCode=78bd024866f1df74125f194b764d80333e0d64aa", ps.WebVirtualDirectory, ps.MARCBibID, ps.BarCode, ps.FileNamePrefix); if (tooLarge) { webServiceUrl = String.Format("http://www.ubio.org/webservices/service.php?function=taxonFinder&includeLinks=0&url=http://www.botanicus.org/PrimeOcr/mbgserv14/{0}/{1}/{2}/{3}.txt", ps.WebVirtualDirectory, ps.FileRootFolder, ps.BarCode, ps.FileNamePrefix); } List <FindItItem> fiil = new List <FindItItem>(); XmlTextReader reader = null; try { HttpWebRequest req = (HttpWebRequest)WebRequest.Create(webServiceUrl); req.Method = "POST"; req.Timeout = 15000; HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); reader = new XmlTextReader((System.IO.Stream)resp.GetResponseStream()); StringBuilder sb = new StringBuilder(); FindItItem fii = null; string currentStage = ""; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Whitespace) { continue; } if (reader.HasValue) { sb.Append(reader.Value); } if (currentStage == "nameString" && reader.Value != "") { fii.Name = reader.Value; } if (currentStage == "namebankID" && reader.Value != "") { fii.NamebankID = Int32.Parse(reader.Value); } else if (reader.NodeType != XmlNodeType.EndElement) { sb.Append("\n" + reader.Name + ": "); currentStage = reader.Name; if (reader.Name == "entity") { fii = new FindItItem(); } } else { if (reader.Name == "entity") { fiil.Add(fii); } } } } finally { if (reader != null) { reader.Close(); } } return(fiil.ToArray()); }