/ / PHP OOP: Métodos de almacenamiento en base de datos - php, oop, goutte

PHP OOP: Métodos de almacenamiento en base de datos - php, oop, goutte

Soy bastante nuevo en OOP, así que ten piedad; (. Ni siquiera estoy seguro de que el título de esta publicación sea correcto.

Estoy rastreando algunos sitios con Goutte, Me gusta esto

$ad["title"] = $crawler->filter("#subject")->text();
$ad["image"] = $crawler->filter(".images")->filter("meta")->eq(0)->attr("content");

Esto no es demasiado difícil, pero quiero tener un código reutilizable. Así que por cada sitio que raspo hay una $ad["title"] y un $ad["image"] Los métodos de $ crawler usados ​​difieren por sitio, por lo que me gustaría tener algo como

$crawler->$filter

Donde contiene el filtro

"filter("#subject")->text()"

De esa manera puedo almacenar los filtros en la base de datos por sitio. No sé si esto es posible incluso si es un buen enfoque.

Respuestas

3 para la respuesta № 1

Una forma de resolver su problema es usar OOP polimorfismo concepto. Para PHP, esto se explica. aquí y en su caso se puede utilizar de esta manera (muy simplificado):

Defina una clase abstracta para sus rastreadores. Cada rastreador debe implementar la extensión y proporcionar su propia implementación. Por supuesto, la clase rastreador se incrusta $crawler objeto.

abstract class BaseCrawler
{
protected $crawler;

abstract protected function getTitleElement();
abstract protected function getImageElement();

// initialize the crawler etc.
}

class CrawlerOne extends BaseCrawler
{
public function getTitleElement()
{
// get the title for crawler one
}

public function getImageElement()
{
// get the image for crawler one
}

// other functionality may come here
}

class CrawlerTwo extends BaseCrawler
{
public function getTitleElement()
{
// get the title for crawler two
}

public function getImageElement()
{
// get the image for crawler two
}

// other functionality may come here
}

Por lo tanto, su estructura es flexible, pero tiene una funcionalidad común.

La base de datos es para almacenar datos, no lógica. Por lo tanto, si el título y la imagen se pueden recuperar mediante una expresión regular simple, se pueden almacenar en la base de datos para cada rastreador. En este caso, cada rastreador puede definir un código constante que se puede usar para realizar una búsqueda de expresiones regulares de título e imagen.