2012-07-30 7 views
6

He visto this question, pero en realidad no satisface lo que estoy buscando. Las respuestas de esa pregunta fueron: levantar de la etiqueta de metadescripción, y la segunda generar un extracto de un artículo del que ya tienes el cuerpo.PHP Scrape Artículo Extracto como Legibilidad

Lo que quiero hacer es realmente obtener las primeras oraciones de un artículo, como lo hace la legibilidad. ¿Cuál es el mejor método para esto? Análisis de HTML? Esto es lo que estoy usando actualmente, pero esto no es muy confiable.

function guessExcerpt($url) { 
    $html = file_get_contents_curl($url); 

    $doc = new DOMDocument(); 
    @$doc->loadHTML($html); 

    $metas = $doc->getElementsByTagName('meta'); 

    for ($i = 0; $i < $metas->length; $i++) 
    { 
     $meta = $metas->item($i); 
     if($meta->getAttribute('name') == 'description') 
      $description = $meta->getAttribute('content'); 

    } 

    return $description; 
} 

function file_get_contents_curl($url) { 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

    $data = curl_exec($ch); 
    curl_close($ch); 

    return $data; 
} 
+0

También puede consultar [php-legibilidad] (http://code.fivefilters.org/php-readability/) – j0k

Respuesta

8

Aquí es un puerto de legibilidad en PHP: https://github.com/feelinglucky/php-readability. Solo inténtalo. El resultado de la extracción será similar a la legibilidad (porque implementa el algoritmo de legibilidad).

require 'lib/Readability.inc.php'; 

$html = file_get_contents_curl($url); 

$Readability  = new Readability($html, $html_input_charset); // default charset is utf-8 
$ReadabilityData = $Readability->getContent(); 

$title = $ReadabilityData['title']; 
$content = $ReadabilityData['content']; 

continuación, puede utilizar algunas frases de $content como el extracto.

+1

¿Alguien sabe cómo raspar una imagen/imagen en cuestión también? La legibilidad hace exactamente lo que estaba buscando. – Swivel

+1

@Swivelgames ¿Has descubierto cómo obtener una miniatura? Me gustaría hacer algo similar – hellomello

+2

@andrewliu El método que utilicé para obtener una miniatura es un poquito más código. Usé 'preg_match_all' con'//i' y construí una matriz con todas las imágenes. Al analizar el '$ url' en el ejemplo anterior, pude convertir rutas de imagen relativas en rutas absolutas determinando el baseurl. Luego presento una matriz con rutas de imagen absolutas para que el usuario pueda elegir. Puede usar un script simple para crear miniaturas y guardarlo en el servidor web para que se muestre al usuario, o escalar utilizando HTML. ** Publique una nueva pregunta y pegue el enlace aquí, y luego puedo darle un código específico. ** – Swivel