/// <summary> /// Procesa una Uri de resultados. Descarga el contenido y lo almacena localmente. /// </summary> /// <param name="result">La Uri de resultados.</param> /// <returns>true si correcto, false si hay algún error.</returns> protected bool ProcessResult(Data.DataUri result) { Console.WriteLine("Processing Result " + result.Id + "(" + result.Parent + ") : " + result.AbsoluteUri); try { // Utilizamos una estructura con StreamWriter para almacenar en ficheros los contenidos de las uris de resultados String file = CreateLocalFile(); System.IO.StreamWriter fileSW = new StreamWriter(file); // Descargamos el uri resultado String uriData = Download(result.AbsoluteUri); fileSW.Write(uriData); fileSW.Close(); //Para guardar el fichero se usa: result.Cache = System.IO.Path.GetFileNameWithoutExtension(file); // Si la descarga es correcta Console.WriteLine(" : " + result.Cache); return(true); } catch { } // Si no es correcta (ha saltado excepcion en el try), error Console.WriteLine(" : failure"); return(false); }
/// <summary> /// Procesa una Uri semilla. Navega por los resultados e inserta nuevas Uris de resultados en la base de datos. /// </summary> /// <param name="seed">La Uri semilla.</param> /// <returns>true si correcto, false si hay algún error</returns> protected bool ProcessSeed(RAI.Crawler.Data.DataUri seed) { Console.WriteLine("Processing Seed " + seed.Id + " : " + seed.AbsoluteUri); Uri uriPaginacion = new Uri(seed.AbsoluteUri); try { // Mientras haya más resultados y no haya error while (uriPaginacion != null) { // Extraer Uris de resultados e insertar en la base de datos // Descargamos el contenido de la Uri semilla String content = Download(uriPaginacion.AbsoluteUri); // Buscamos coincidencias en el contenido descargado con la expresion regular que busca uris de resultados MatchCollection seedUris = GoogleCrawler._resultRegex.Matches(content); // Para cada uri obtenida en el match insertamos un nuevo registro en la base de datos. foreach (Match uri in seedUris) { // Insertamos la uri resultado nueva con el valor de padre inicializado a nuestra semilla RAI.Crawler.Data.DataUri newUri = new Data.DataUri(uri.Groups["uri"].Value.Replace("&", "&"), seed, null, null); // Submit para la base de datos this._context.DataUri.InsertOnSubmit(newUri); } // Extraer siguiente página de resultados Match next = GoogleCrawler._nextRegex.Match(content); // Si encuentra siguiente pagina aumentamos el contador de paginas en 1 y sustituimos uriPaginacion con la nueva if (next.Success) { uriPaginacion = new Uri(uriPaginacion, next.Groups["uri"].Value.Replace("&", "&")); } // Si no uriPaginacion toma valor null else { uriPaginacion = null; // No hay más resultados } } //Si todo es correcto return(true); } catch { } //Si se produce alguna excepcion en el try, error return(false); }
/// <summary> /// Añade una nueva semilla a la base de datos. /// </summary> /// <param name="uriString">La Uri de la semilla.</param> public void AddSeed(string uriString) { Uri uri = null; if (Uri.TryCreate(uriString, UriKind.Absolute, out uri)) { // Crear DataUri e insertar en la base de datos RAI.Crawler.Data.DataUri newUri = new Data.DataUri(uri.AbsoluteUri, null, null, null); this._context.DataUri.InsertOnSubmit(newUri); try{ // Submit para la base de datos this._context.SubmitChanges(); } catch { } } else { // La Uri proporcionada no está bien formada } }
partial void DeleteDataUri(DataUri instance);
partial void UpdateDataUri(DataUri instance);
partial void InsertDataUri(DataUri instance);
private void detach_DataUri1(DataUri entity) { this.SendPropertyChanging(); entity.ParentUri = null; }
private void attach_DataUri1(DataUri entity) { this.SendPropertyChanging(); entity.ParentUri = this; }