franzip/serp-page-serializer

将搜索引擎结果页面序列化为JSON和XML(JMS/Serializer包装器)。

1.0.0 2024-05-14 14:07 UTC

This package is auto-updated.

Last update: 2024-09-14 14:55:42 UTC


README

Build Status Coverage Status

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);

其中

  1. $engine - 字符串
    • 表示搜索引擎供应商(例如,Google、Bing等)。
  2. $keyword - 字符串
    • 表示与搜索引擎页面关联的关键字。
  3. $pageUrl - 字符串
    • 表示给定关键字/页面编号的搜索引擎URL。
  4. $pageNumber - 整数
    • 表示给定搜索引擎关键字搜索的页面编号。
  5. $age - DateTime对象
    • 表示数据提取的时间。
  6. $entries - 数组
    • 表示核心数据(见下文)。

每个搜索引擎结果页面条目都有三分结构

  1. 一个标题,通常以蓝色突出显示。
  2. 一个URL。
  3. 一个文本片段。

Typical SERP entry structure

$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作为参数,返回一个SerpPageJSONSerpPageXML对象。

使用(序列化数据)

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 公共许可证。