Flutter元数据提取插件metadata_extract的使用

Flutter元数据提取插件metadata_extract的使用

metadata_extract 是一个用于从网页中提取元数据的 Dart 库。它支持提取 OpenGraph、Meta、Twitter Cards 和结构化数据(Json-LD)。

使用

提取给定URL的元数据

你可以使用 extract() 函数从指定的 URL 中提取元数据。

import 'package:metadata_extract/metadata_extract.dart';

main() async {
  var data = extract("https://flutter.dev/"); // 使用 extract() 函数从 URL 获取数据

  print(data.title); // 输出: Flutter - Beautiful native apps in record time
  print(data.description); // 输出: Flutter is Google's UI toolkit for crafting beautiful...
  print(data.image); // 输出: https://flutter.dev/images/flutter-logo-sharing.png

  var dataAsMap = data.toMap(); // 将元数据对象转换为 Map
}

手动解析

从文档中获取聚合元数据

此方法优先处理 Open Graph 数据,其次是 Twitter Card、JSON-LD,最后退回到 HTML 元数据。

import 'package:metadata_extract/metadata_extract.dart';
import 'package:http/http.dart' as http;

void main() async {
  // 发起请求
  var response = await http.get('https://flutter.dev');

  // 将响应转换为文档。提供了实用函数 `responseToDocument` 或者可以使用自己的解码器/解析器。
  var document = responseToDocument(response);

  // 获取元数据
  var data = MetadataParser.parse(document);
  print(data);
}

获取 Open Graph 元数据

import 'package:metadata_extract/metadata_extract.dart';
import 'package:http/http.dart' as http;

void main() async {
  // 发起请求
  var response = await http.get('https://flutter.dev');

  // 将响应转换为文档。提供了实用函数 `responseToDocument` 或者可以使用自己的解码器/解析器。
  var document = responseToDocument(response);

  // 获取 Open Graph 元数据
  var data = MetadataParser.OpenGraph(document);
  print(data);
}

获取 HTML 元数据

import 'package:metadata_extract/metadata_extract.dart';
import 'package:http/http.dart' as http;

void main() async {
  // 发起请求
  var response = await http.get('https://flutter.dev');

  // 将响应转换为文档。提供了实用函数 `responseToDocument` 或者可以使用自己的解码器/解析器。
  var document = responseToDocument(response);

  // 获取 HTML 元数据
  var data = MetadataParser.HtmlMeta(document);
  print(data);
}

获取结构化数据(Json-LD)

import 'package:metadata_extract/metadata_extract.dart';
import 'package:http/http.dart' as http;

void main() async {
  // 发起请求
  var response = await http.get('https://flutter.dev');

  // 将响应转换为文档。提供了实用函数 `responseToDocument` 或者可以使用自己的解码器/解析器。
  var document = responseToDocument(response);

  // 获取 Json-LD 结构化数据
  var data = MetadataParser.JsonLdSchema(document);
  print(data);
}

获取 Twitter Cards 元数据

import 'package:metadata_extract/metadata_extract.dart';
import 'package:http/http.dart' as http;

void main() async {
  // 发起请求
  var response = await http.get('https://www.epicurious.com/expert-advice/best-soy-sauce-chefs-pick-article');

  // 将响应转换为文档。提供了实用函数 `responseToDocument` 或者可以使用自己的解码器/解析器。
  var document = responseToDocument(response);

  // 获取 Twitter Cards 元数据
  var data = MetadataParser.TwitterCard(document);
  print(data);
}

示例代码

以下是完整的示例代码:

import 'package:metadata_extract/metadata_extract.dart';
import 'package:http/http.dart' as http;

class Examples {
  static Future<void> basicExtract() async {
    var data = await extract('https://flutter.dev'); // 返回一个 Metadata 对象
    print(data); // 输出 Metadata 的字符串表示形式
    print(data!.title); // 输出 Metadata 的标题
    print(data.toMap()); // 将元数据对象转换为 Map
    print(data.toJson()); // 将元数据对象转换为 JSON
  }

  static Future<void> parseDocument() async {
    var url = 'https://flutter.dev';
    var response = await http.get(Uri.parse(url));
    var document = responseToDocument(response);

    var data = MetadataParser.parse(document);
    print(data);

    // 只获取 Open Graph 元数据
    var og = MetadataParser.openGraph(document);
    print(og);

    var hm = MetadataParser.htmlMeta(document);
    print(hm);

    var js = MetadataParser.jsonLdSchema(document);
    print(js);

    var twitter = MetadataParser.twitterCard(document);
    print(twitter);
  }
}

void main() async {
  await Examples.basicExtract();
  await Examples.parseDocument();
}

更多关于Flutter元数据提取插件metadata_extract的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter元数据提取插件metadata_extract的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用metadata_extract插件来提取元数据的基本示例。假设你已经有一个Flutter项目,并且已经添加了metadata_extract插件到你的pubspec.yaml文件中。

1. 添加依赖

首先,确保你的pubspec.yaml文件中包含以下依赖:

dependencies:
  flutter:
    sdk: flutter
  metadata_extract: ^最新版本号 # 请替换为实际最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你需要使用metadata_extract的Dart文件中导入插件:

import 'package:metadata_extract/metadata_extract.dart';

3. 使用插件提取元数据

以下是一个简单的示例,展示如何使用metadata_extract插件从一个文件(例如图像)中提取元数据:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:metadata_extract/metadata_extract.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Metadata Extract Example'),
        ),
        body: Center(
          child: MetadataExtractExample(),
        ),
      ),
    );
  }
}

class MetadataExtractExample extends StatefulWidget {
  @override
  _MetadataExtractExampleState createState() => _MetadataExtractExampleState();
}

class _MetadataExtractExampleState extends State<MetadataExtractExample> {
  String? metadataInfo;

  void _extractMetadata() async {
    // 假设你有一个图像文件路径
    String filePath = 'path/to/your/image.jpg'; // 请替换为你的图像文件路径

    File file = File(filePath);
    if (await file.exists()) {
      try {
        // 读取文件并提取元数据
        var metadata = await MetadataExtractor().extractMetadata(file);

        // 将元数据转换为字符串显示
        String metadataString = metadata.entries
            .map((entry) => "${entry.tag}: ${entry.description ?? entry.value}")
            .join("\n");

        setState(() {
          metadataInfo = metadataString;
        });
      } catch (e) {
        setState(() {
          metadataInfo = 'Error: ${e.message}';
        });
      }
    } else {
      setState(() {
        metadataInfo = 'File does not exist';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: _extractMetadata,
          child: Text('Extract Metadata'),
        ),
        if (metadataInfo != null)
          Text(
            metadataInfo!,
            style: TextStyle(fontSize: 16),
            maxLines: null, // 允许文本换行
          ),
      ],
    );
  }
}

注意事项

  1. 文件路径:确保提供的文件路径是正确的,并且文件存在。
  2. 错误处理:在实际应用中,你可能需要更复杂的错误处理逻辑。
  3. 权限:如果你的应用需要访问设备存储中的文件,确保你已经在AndroidManifest.xmlInfo.plist中添加了相应的权限。

以上代码提供了一个基本的示例,展示了如何在Flutter中使用metadata_extract插件来提取文件的元数据。你可以根据实际需求进行扩展和修改。

回到顶部