performScrape method

Future<void> performScrape(
  1. ScrapeRequest request
)

Performs a web scraping operation based on the provided request

Implementation

Future<void> performScrape(ScrapeRequest request) async {
  _setLoading(true);
  _clearError();

  try {
    // Create new scraper instance
    _currentScraper = MobileScraper(url: request.url);

    // Load HTML content
    await _currentScraper!.load();

    List<String> results;
    ScrapeType scrapeType;

    // Execute scraping based on request type
    switch (request.type) {
      case ScrapeRequestType.tagBased:
        final tagReq = request.tagRequest!;
        results = _currentScraper!.queryAll(
          tag: tagReq.tag,
          className: tagReq.className,
          id: tagReq.id,
        );
        scrapeType = ScrapeType.tagBased;
        break;

      case ScrapeRequestType.regexBased:
        final regexReq = request.regexRequest!;
        results = _currentScraper!.queryWithRegex(
          pattern: regexReq.pattern,
          group: regexReq.group,
        );
        scrapeType = ScrapeType.regexBased;
        break;
    }

    // Create successful result
    final result = ScrapeResult.success(
      data: results,
      url: request.url,
      type: scrapeType,
    );

    _setCurrentResult(result);
    _addToHistory(result);
  } catch (e) {
    // Create failure result
    final result = ScrapeResult.failure(
      url: request.url,
      error: e.toString(),
      type: request.type == ScrapeRequestType.tagBased
          ? ScrapeType.tagBased
          : ScrapeType.regexBased,
    );

    _setError(e.toString());
    _setCurrentResult(result);
    _addToHistory(result);
  } finally {
    _setLoading(false);
  }
}