Flutter服务器侧广告插入(SSAI)解析插件reference_parser_ssai的使用
Flutter服务器侧广告插入(SSAI)解析插件reference_parser_ssai
的使用
reference_parser_ssai
是一个 Dart 包,用于解析字符串中的圣经引用。你可以从字符串中解析单个引用或多条引用,并且可以识别文本与圣经中的匹配项。
使用
要包含 reference_parser_ssai
的默认导出,请在你的导入语句中添加以下内容:
import 'package:reference_parser_ssai/reference_parser.dart';
解析引用
使用 parseReference
函数来获取单个引用:
var ref = parseReference("I like Mat 2:4-10 and John 3:1");
这将返回一个描述 “Matthew 2:4-10” 的引用对象。
使用 parseAllReferences
函数来获取字符串中的所有引用:
var refs = parseAllReferences(' Gen 5:7 is fun to read.');
注意:单词 “is” 不会被解析为以赛亚书。
你还可以使用 parseReferencesAndReplaceString
函数来替换字符串中的引用:
var refs = parseReferencesAndReplaceString('Gen 5:7 is fun to read.');
这将返回 “Genesis 5:7 is fun to read.”。
识别引用
导入识别库:
import 'package:reference_parser_ssai/identification.dart';
然后识别引用:
identifyReference("Come to me all ye").then((possibilities) => {
print(possibilities[0]), // 最可能的匹配将在索引 0 处
});
identifyReference
方法使用了 biblehub.com。它将返回一个包含引用对象、经文预览和原始查询的 PassageQuery
对象。
引用对象和引用
引用对象是最广泛的引用类型。你可以直接通过以下格式构造一个引用对象:
var ref = Reference(book, [startChp, startVer, endChp, endVer]);
(为了方便使用,Reference
类有多个命名构造函数。请查看 API 文档。)
引用对象最重要的字段包括:
ref.reference // 字符串表示形式(还有 osisReference, shortReference, 和 abbr 可用)
ref.startVerseNumber
ref.endVerseNumber
ref.startChapterNumber
ref.endChapterNumber
ref.referenceType // VERSE, CHAPTER, VERSE_RANGE, CHAPTER_RANGE
根据传递的内容,构造函数会确定某些字段。例如,如果你构造 Reference('James')
,则会在詹姆斯书中初始化最后的章节和节号。
构造引用
节引用
var ref = Reference("Mat", 2, 4);
var ref = Reference.verse("Mat", 2, 4);
var verse = Verse("Matt", 2, 4);
注意,verse
对象具有与 Reference
对象不同的字段。请检查 API 文档。
节范围引用
ref = Reference("Mat", 2, 4, null, 10);
ref = Reference.verseRange("Mat", 2, 4, 10);
这些等效于创建对 “Matthew 2:4-10” 的引用。
对于章节引用,相同的构造函数和类也适用。
无效引用
所有引用都有一个 isValid
字段,表示该引用是否在圣经中。
var ref = Reference("McDonald", 2, 4, 10);
print(ref.isValid); // false, 至少在我的了解中
注意:其他字段仍然被初始化!如果需要,请确保在使用引用之前检查其有效性。
ref.reference // "McDonald 2:4-10"
ref.book // "McDonald"
ref.startVerseNumber // 4
ref.osisBook // null,其他格式也是如此
对于章节和节号,相同的逻辑也适用。
其他有趣的功能
我让这个库膨胀,以便它可以做很多事情哈哈。
ref.verses // 返回此引用内的节对象列表。也有章节列表。
ref.chapters // 每一章
ref.osisReference // OSIS 表示(还有 short 和 abbr)
SSAI Fork 特定
这个 Fork 包含了一些对原始包的修改。
常见词的排除
默认情况下,将排除常见词。“is”, “am”, “song”, 和 “songs” 分别被标记为 “Isaiah”, “Song of Solomon”, “Amos”, 和 “Song of Solomon”。
替换字符串中的引用
var ref = parseReference("I like Mat 2:4-10 and John 3:1");
这将返回一个描述 “Matthew 2:4-10” 的引用对象。
使用 parseAllReferences
函数来获取字符串中的所有引用:
var refs = parseAllReferences(' Gen 5:7 is fun to read.');
注意:单词 “is” 不会被解析为以赛亚书。
var refs = parseReferencesAndReplaceString('Gen 5:7 is fun to read.');
这将返回 “Genesis 5:7 is fun to read.”。
你可以在函数中传入 excludeList: ['strings','to','ignore']
作为第二个参数来排除自定义字符串。
地点解析器
parsePlace('I visited Jerusalem and Damascus and Allammelech and Mississippi.'); // 返回 ['Jerusalem','Damascus','Allammelech']
示例代码
以下是完整的示例代码:
import 'package:reference_parser_ssai/reference_parser.dart';
void main() {
// 解析引用
var ref = parseReference('The most recited verse is Jn 3:16');
print(ref.book); // 'John'
print(ref.bookNumber); // 43
print(ref.startChapterNumber); // 3
print(ref.startVerseNumber); // 16
print(ref.isValid); // true
ref = parseReference('1john 4:5');
print(ref.book); // '1 John'
// 变体拼写
ref = parseReference('Songs 2:1');
print(ref.reference); // 'Song of Solomon 2:1'
// 引用范围
ref = parseReference('My name is Gen 4:5-10');
print(ref.reference); // 'Genesis 4:5-10'
print(ref.startVerseNumber); // 5
print(ref.endVerseNumber); // 10
// 书籍和章节引用
ref = parseReference('Ps 1');
print(ref.reference); // 'Psalms 1';
print(ref.startVerseNumber); // 1
print(ref.endVerseNumber); // 6
// 书籍引用
ref = parseReference('gn');
print(ref.reference); // 'Genesis'
// 验证
ref = parseReference('Joseph 2:4');
print(ref.book); // Joseph
print(ref.bookNumber); // null
print(ref.isValid); // false
ref = parseReference(' This is Genesis 1:100');
print(ref.isValid); // false
// 创建引用
ref = Reference('1Co', 3, 4, 5);
print(ref.book); //'1 Corinthians'
print(ref.startChapterNumber); // 3
print(ref.startVerseNumber); // 4
print(ref.endChapterNumber); // 5
// 排除常见词('is','song','am','songs')
var refs =
parseAllReferences('This is NOT going to get Gen 2:4 and another book');
print(refs); // ['Genesis 2:4'], 'is' 将不会被解析为以赛亚书
refs =
parseAllReferences('Ezekiel 37:1-14 and Ezek. 4 to Ezekiel is cool prophesy to the bones, and as he does, Israelite the bones come together, flesh and skin cover them, and breath enters them, bringing them to life (v. 5-10).');
print(refs);
}
更多关于Flutter服务器侧广告插入(SSAI)解析插件reference_parser_ssai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter服务器侧广告插入(SSAI)解析插件reference_parser_ssai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成并使用reference_parser_ssai
插件来解析服务器侧广告插入(SSAI)信息的示例代码。假设reference_parser_ssai
插件已经发布在pub.dev上并且你已经在你的pubspec.yaml
文件中添加了依赖。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加reference_parser_ssai
依赖:
dependencies:
flutter:
sdk: flutter
reference_parser_ssai: ^latest_version # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
2. 使用插件解析SSAI信息
以下是一个简单的示例,展示如何使用reference_parser_ssai
插件来解析SSAI参考信息。假设你有一个SSAI参考字符串,你需要解析它并获取广告插入点和其他相关信息。
import 'package:flutter/material.dart';
import 'package:reference_parser_ssai/reference_parser_ssai.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? ssaiReference;
List<AdBreak>? adBreaks;
@override
void initState() {
super.initState();
// 示例SSAI参考字符串(请替换为你的实际SSAI参考字符串)
String exampleSSAIReference = '{"adBreaks":[{"time":10,"adSources":[{"id":"pre-roll-ad-1","url":"http://example.com/ad1"}]},{"time":60,"adSources":[{"id":"mid-roll-ad-1","url":"http://example.com/ad2"}]}]}';
parseSSAIReference(exampleSSAIReference);
}
void parseSSAIReference(String reference) async {
try {
// 解析SSAI参考字符串
SSAIReference result = SSAIReference.fromJson(jsonDecode(reference));
// 获取广告断点列表
setState(() {
ssaiReference = reference;
adBreaks = result.adBreaks;
});
// 打印解析结果
print('Parsed SSAI Reference: $result');
print('Ad Breaks: $adBreaks');
} catch (e) {
print('Error parsing SSAI reference: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SSAI Reference Parser'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('SSAI Reference:'),
if (ssaiReference != null)
Text(ssaiReference!),
SizedBox(height: 16),
Text('Ad Breaks:'),
if (adBreaks != null)
Expanded(
child: ListView.builder(
itemCount: adBreaks!.length,
itemBuilder: (context, index) {
AdBreak adBreak = adBreaks![index];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Time: ${adBreak.time}s'),
Text('Ad Sources:'),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: adBreak.adSources.map((source) {
return Text('ID: ${source.id}, URL: ${source.url}');
}).toList(),
),
SizedBox(height: 8),
],
);
},
),
),
],
),
),
),
);
}
}
// 假设SSAIReference和AdBreak类如下(根据实际插件定义调整)
class SSAIReference {
List<AdBreak> adBreaks;
SSAIReference({required this.adBreaks});
factory SSAIReference.fromJson(Map<String, dynamic> json) {
return SSAIReference(
adBreaks: List<AdBreak>.from(json['adBreaks']!.map((x) => AdBreak.fromJson(x))),
);
}
}
class AdBreak {
int time;
List<AdSource> adSources;
AdBreak({required this.time, required this.adSources});
factory AdBreak.fromJson(Map<String, dynamic> json) {
return AdBreak(
time: json['time'] as int,
adSources: List<AdSource>.from(json['adSources']!.map((x) => AdSource.fromJson(x))),
);
}
}
class AdSource {
String id;
String url;
AdSource({required this.id, required this.url});
factory AdSource.fromJson(Map<String, dynamic> json) {
return AdSource(
id: json['id'] as String,
url: json['url'] as String,
);
}
}
注意事项
- 依赖版本:确保你使用的是
reference_parser_ssai
插件的最新版本。 - JSON结构:示例代码中的JSON结构和数据类(
SSAIReference
,AdBreak
,AdSource
)是假设的,你需要根据实际插件提供的JSON结构和数据类进行调整。 - 错误处理:在实际应用中,你应该添加更多的错误处理逻辑,以确保在解析失败时能够给用户适当的反馈。
这个示例展示了如何在Flutter中集成并使用reference_parser_ssai
插件来解析SSAI参考信息,并将解析结果显示在UI上。希望这对你有所帮助!