franzip / serp-page-serializer
将搜索引擎结果页面序列化为JSON和XML(JMS/Serializer包装器)。
1.0.0
2024-05-14 14:07 UTC
Requires
- php: >=8.0.0
- doctrine/annotations: 2.x.*
- jms/serializer: 3.x.*
Requires (Dev)
- mustangostang/spyc: 0.6.*@dev
- phpunit/phpunit: 11.x.*
This package is auto-updated.
Last update: 2024-09-14 14:55:42 UTC
README
SerpPageSerializer
将搜索引擎结果页面序列化为JSON和XML(JMS/Serializer包装器)。
通过Composer安装(推荐)
在项目中安装composer
curl -s http://getcomposer.org/installer | php
在项目根目录下创建一个composer.json文件
{
"require": {
"franzip/serp-page-serializer": "1.0.*"
}
}
通过composer安装
php composer.phar install
构造函数
$serpSerializer = new SerpPageSerializer($cacheDir = "serializer_cache");
数据类型约束
序列化
SerpPageSerializer->serialize()
方法只接受一个SerializableSerpPage
对象,并返回一个SerializedSerpPage
对象。序列化内容可通过SerializedSerpPage->getContent()
方法获取。在开始使用序列化器之前,请按以下方式规范化您的数据:
use Franzip\SerpPageSerializer\Models\SerializableSerpPage; // assuming you have extracted the data someway $serializableSerpPage = new SerializableSerpPage($engine, $keyword, $pageUrl, $pageNumber, $age, $entries);
其中
$engine
- 字符串- 表示搜索引擎供应商(例如,Google、Bing等)。
$keyword
- 字符串- 表示与搜索引擎页面关联的关键字。
$pageUrl
- 字符串- 表示给定关键字/页面编号的搜索引擎URL。
$pageNumber
- 整数- 表示给定搜索引擎关键字搜索的页面编号。
$age
- DateTime对象- 表示数据提取的时间。
$entries
- 数组- 表示核心数据(见下文)。
每个搜索引擎结果页面条目都有三分结构
- 一个标题,通常以蓝色突出显示。
- 一个URL。
- 一个文本片段。
$entries数组结构必须类似于上述提到的模式,其中顺序数组索引代表条目在页面中的位置。
array( array('url' => 'someurl', 'snippet' => 'somesnippet', 'title' => 'sometitle'), array('url' => 'someurl', 'snippet' => 'somesnippet', 'title' => 'sometitle'), array('url' => 'someurl', 'snippet' => 'somesnippet', 'title' => 'sometitle'), ... );
反序列化
SerpPageSerializer->deserialize()
只接受一个SerializedSerpPage
作为参数,返回一个SerpPageJSON
或SerpPageXML
对象。
使用(序列化数据)
use Franzip\SerpPageSerializer\SerpPageSerializer; use Franzip\SerpPageSerializer\Models\SerializableSerpPage; $engine = 'google'; $keyword = 'foobar'; $pageUrl = 'https://www.google.com/search?q=foobar'; $pageNumber = 1; $age = new \DateTime(); $age->setTimeStamp(time()); $entries = array(array('url' => 'www.foobar2000.org', 'title' => 'foobar2000', 'snippet' => 'blabla'), array(...), ...); $serpSerializer = new SerpPageSerializer(); $pageToSerialize = new SerializableSerpPage($engine, $keyword, $pageUrl, $pageNumber, $age, $entries); $serializedXMLData = $serpSerializer->serialize($pageToSerialize->getContent(), 'xml'); var_dump($serializedXMLData); /* * <?xml version="1.0" encoding="UTF-8"?> * <serp_page engine="google" page_number="1" page_url="https://www.google.com/search?q=foobar" keyword="foobar" age="2015-03-19"> * <entry position="1"> * <url>www.foobar2000.org</url> * <title>foobar2000</title> * <snippet>blabla</snippet> * </entry> * <entry position="2"> * ... * </entry> * </serp_page> */ $serializedJSONData = $serpSerializer->serialize($pageToSerialize->getContent(), 'json'); var_dump($serializedJSONData); /* * { * "engine": "google", * "page_number": 1, * "page_url": "https:\/\/www.google.com\/search?q=foobar", * "keyword":"foobar", * "age":"2015-03-19", * "entries":[ * { * "position": 1, * "url": "www.foobar2000.org", * "title": "foobar2000", * "snippet": "blabla" * }, * { * "position": 2, * ... * }, * ... * ] * } */
使用(反序列化数据)
use Franzip\SerpPageSerializer\SerpPageSerializer; $serpSerializer = new SerpPageSerializer(); $serpPageXML = $serpSerializer->deserialize($serializedXMLPage, 'xml'); var_dump($serializedXMLPage); // object(Franzip\SerpPageSerializer\Models\SerializedSerpPage) (1) { // ... var_dump($serpPageXML); // object(Franzip\SerpPageSerializer\Models\SerpPageXML) (6) { // ... $serpPageJSON = $serpSerializer->deserialize($serializedJSONPage, 'json'); var_dump($serializedJSONPage); // object(Franzip\SerpPageSerializer\Models\SerializedSerpPage) (1) { // ... var_dump($serpPageJSON); // object(Franzip\SerpPageSerializer\Models\SerpPageJSON) (6) { // ...
待办事项
- 将默认的$cacheDir添加到构造函数中。
- 一个合理的异常系统。
- 通过将序列化字符串包装在专用类中来允许反序列化时的类型检查。
- 修复序列化测试。
- 修复反序列化测试。
- 重写文档。
- 支持CSV序列化和反序列化。
- 修复杂乱的测试。
许可
MIT 公共许可证。