php - name - seo meta tags
Obtener el título del sitio web a través del enlace (10)
Alternativamente, puede usar Simple Html Dom Parser :
<?php
require_once(''simple_html_dom.php'');
$html = file_get_html(''http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/'');
echo $html->find(''title'', 0)->innertext . "<br>/n";
echo $html->find(''div[class=entry-content]'', 0)->innertext;
Observe cómo Google News tiene fuentes en la parte inferior de cada extracto del artículo.
The Guardian - Noticias de ABC - Reuters - Bloomberg
Estoy tratando de imitar eso.
Por ejemplo, al enviar la URL http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/
Quiero volver The Washington Times
¿Cómo es esto posible con php?
Intento evitar las expresiones regulares cuando no es necesario, he creado una función para obtener el título del sitio web con curl y DOMDocument a continuación.
function website_title($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// some websites like Facebook need a user agent to be set.
curl_setopt($ch, CURLOPT_USERAGENT, ''Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'');
$html = curl_exec($ch);
curl_close($ch);
$dom = new DOMDocument;
@$dom->loadHTML($html);
$title = $dom->getElementsByTagName(''title'')->item(''0'')->nodeValue;
return $title;
}
echo website_title(''https://www.facebook.com/'');
Más arriba se muestra lo siguiente: Bienvenido a Facebook: inicie sesión, regístrese o aprenda más.
Mi respuesta se expande en la respuesta de @AI W al usar el título de la página. A continuación está el código para lograr lo que dijo.
<?php
function get_title($url){
$str = file_get_contents($url);
if(strlen($str)>0){
$str = trim(preg_replace(''//s+/'', '' '', $str)); // supports line breaks inside <title>
preg_match("//<title/>(.*)/<//title/>/i",$str,$title); // ignore case
return $title[1];
}
}
//Example:
echo get_title("http://www.washingtontimes.com/");
?>
SALIDA
Washington Times - Política, noticias de última hora, EE. UU. Y noticias mundiales
Como puede ver, no es exactamente lo que Google está usando, así que esto me lleva a creer que obtienen el nombre de host de una URL y lo asocian a su propia lista.
http://www.washingtontimes.com/ => The Washington Times
Obtenga el título del sitio web a través del enlace y convierta el título a la codificación de caracteres utf-8:
https://gist.github.com/kisexu/b64bc6ab787f302ae838
function getTitle($url)
{
// get html via url
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($ch);
curl_close($ch);
// get title
preg_match(''/(?<=<title>).+(?=<//title>)/iU'', $html, $match);
$title = empty($match[0]) ? ''Untitled'' : $match[0];
$title = trim($title);
// convert title to utf-8 character encoding
if ($title != ''Untitled'') {
preg_match(''/(?<=charset/=).+(?=/")/iU'', $html, $match);
if (!empty($match[0])) {
$charset = str_replace(''"'', '''', $match[0]);
$charset = str_replace("''", '''', $charset);
$charset = strtolower( trim($charset) );
if ($charset != ''utf-8'') {
$title = iconv($charset, ''utf-8'', $title);
}
}
}
return $title;
}
Puede buscar los contenidos de la URL y hacer una búsqueda de expresiones regulares para el contenido del elemento de title
.
<?php
$urlContents = file_get_contents("http://example.com/");
preg_match("/<title>(.*)<//title>/i", $urlContents, $matches);
print($matches[1] . "/n"); // "Example Web Page"
?>
O bien, si no desea usar una expresión regular (para hacer coincidir algo muy cerca de la parte superior del documento), podría usar un objeto DOMDocument :
<?php
$urlContents = file_get_contents("http://example.com/");
$dom = new DOMDocument();
@$dom->loadHTML($urlContents);
$title = $dom->getElementsByTagName(''title'');
print($title->item(0)->nodeValue . "/n"); // "Example Web Page"
?>
Dejo en tus manos decidir qué método te gusta más.
Si está dispuesto a utilizar un servicio de terceros para esto, acabo de www.runway7.net/radar uno en www.runway7.net/radar
Te da título, descripción y mucho más. Por ejemplo, prueba tu ejemplo en Radar . ( http://radar.runway7.net/?url=http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/ )
Usando get_meta_tags () desde la página de inicio del dominio, NYT recupera algo que podría necesitar truncamiento, pero podría ser útil.
$b = "http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/" ;
$url = parse_url( $b ) ;
$tags = get_meta_tags( $url[''scheme''].''://''.$url[''host''] );
var_dump( $tags );
incluye la descripción ''The Washington Times ofrece noticias de última hora y comentarios sobre los problemas que afectan el futuro de nuestra nación''.
escribí una función para manejarlo:
function getURLTitle($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$charset = '''';
if($contentType && preg_match(''//bcharset=(.+)/b/i'', $contentType, $matches)){
$charset = $matches[1];
}
curl_close($ch);
if(strlen($content) > 0 && preg_match(''//<title/b.*/>(.*)/<//title/>/i'', $content, $matches)){
$title = $matches[1];
if(!$charset && preg_match_all(''//<meta/b.*/>/i'', $content, $matches)){
//order:
//http header content-type
//meta http-equiv content-type
//meta charset
foreach($matches as $match){
$match = strtolower($match);
if(strpos($match, ''content-type'') && preg_match(''//bcharset=(.+)/b/'', $match, $ms)){
$charset = $ms[1];
break;
}
}
if(!$charset){
//meta charset=utf-8
//meta charset=''utf-8''
foreach($matches as $match){
$match = strtolower($match);
if(preg_match(''//bcharset=([/'"])?(.+)/1?/'', $match, $ms)){
$charset = $ms[1];
break;
}
}
}
}
return $charset ? iconv($charset, ''utf-8'', $title) : $title;
}
return $url;
}
recupera el contenido de la página web e intenta obtener la codificación del conjunto de caracteres del documento por (de la prioridad más alta a la más baja):
- Un parámetro HTTP "charset" en un campo "Content-Type".
- Una declaración META con "http-equiv" establecido en "Content-Type" y un valor establecido para "charset".
- El atributo charset establecido en un elemento que designa un recurso externo.
(ver http://www.w3.org/TR/html4/charset.html )
y luego usa iconv
para convertir el título a codificación utf-8
.
<?php
$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
?>
Manual de PHP sobre coincidencia de expresiones regulares de Perl
<?php
$subject = "abcdef";
$pattern = ''/^def/'';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>
Y uniendo esos dos:
<?php
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, "example.com");
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
$pattern = ''/[<]title[>]([^<]*)[<][//]titl/i'';
preg_match($pattern, $output, $matches);
print_r($matches);
// close curl resource to free up system resources
curl_close($ch);
?>
No puedo prometer que este ejemplo funcionará, ya que no tengo PHP aquí, pero debería ayudarlo a comenzar.
$doc = new DOMDocument();
@$doc->loadHTMLFile(''http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/'');
$xpath = new DOMXPath($doc);
echo $xpath->query(''//title'')->item(0)->nodeValue."/n";
Salida:
La comisión de la deuda se queda corta en el voto de prueba - Washington Times
Obviamente, también debe implementar el manejo básico de errores.