[flutter] get_it를 사용하여 플러터 앱에서 웹 스크래핑을 어떻게 구현하는가?

이번에는 Flutter 앱에서 get_it 패키지를 사용하여 간단한 웹 스크래핑 기능을 구현하는 방법에 대해 알아보겠습니다. get_it은 종속성 주입을 위한 패키지로, 앱 내에서 인스턴스화된 객체를 쉽게 참조할 수 있도록 도와줍니다. 이를 활용하여 웹 스크래핑을 구현해보겠습니다.

1. get_it 패키지 추가

먼저, pubspec.yaml 파일에 get_it 패키지를 추가해야 합니다. 아래와 같이 dependencies 섹션에 추가해주세요.

dependencies:
  flutter:
    sdk: flutter
  get_it: ^7.2.0

이후, 터미널에서 flutter pub get 명령을 실행하여 패키지를 다운로드 받습니다.

2. 스크랩퍼 클래스 생성

다음으로, 웹 스크랩퍼 기능을 구현할 클래스를 생성합니다. 아래는 예시 코드입니다.

import 'package:html/parser.dart' as parser;
import 'package:http/http.dart' as http;

class WebScraper {
  Future<String> getTitle(String url) async {
    final response = await http.get(Uri.parse(url));
    if (response.statusCode == 200) {
      final document = parser.parse(response.body);
      final titleElement = document.querySelector("title");
      return titleElement?.text ?? "";
    } else {
      throw Exception("Failed to get title from $url");
    }
  }
}

위 코드에서는 http 패키지를 사용하여 웹 페이지의 HTML을 가져오고, parser 패키지를 사용하여 HTML 에서 원하는 정보를 추출합니다. getTitle 함수는 주어진 URL의 웹 페이지에서 <title> 태그의 내용을 추출하여 반환합니다.

3. get_it을 사용하여 스크랩퍼 인스턴스 참조

이제, get_it을 사용하여 스크랩퍼 인스턴스를 참조하는 방법에 대해 알아보겠습니다.

import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';

import 'web_scraper.dart';

void main() {
  GetIt.instance.registerSingleton<WebScraper>(WebScraper());

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Web Scraper Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  final _webScraper = GetIt.instance<WebScraper>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Web Scraper Demo'),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () async {
            final url = 'https://www.example.com';
            final title = await _webScraper.getTitle(url);
            print('Title: $title');
          },
          child: Text('Scrape Title'),
        ),
      ),
    );
  }
}

위 코드에서는 GetIt.instance.registerSingleton() 함수를 사용하여 WebScraper 클래스의 인스턴스를 get_it에 등록합니다. 이렇게 하면 앱 전체에서 동일한 인스턴스를 사용할 수 있습니다. 그리고 _webScraper 변수를 사용하여 등록한 스크랩퍼 인스턴스를 참조합니다. RaisedButton을 누를 때마다 스크랩퍼 인스턴스를 사용하여 webScraper.getTitle() 함수를 호출하고, 반환된 결과를 출력합니다.

이제 앱을 실행하고 “Scrape Title” 버튼을 클릭하면, 지정된 URL의 웹 페이지에서 타이틀을 가져와 출력되는 것을 확인할 수 있습니다.

결론

get_it 패키지를 사용하여 플러터 앱에서 웹 스크래핑 기능을 구현하는 방법에 대해 알아보았습니다. get_it을 활용하면 주입할 인스턴스에 쉽게 접근할 수 있기 때문에, 앱에서 다양한 종속성을 관리하고 재사용하기에 용이합니다. get_it을 사용하여 플러터 앱을 더 모듈화하고 확장성 있게 만들어보세요.

참고 자료