通过链接获取网站标题

Noo*_*oob 37 php url function hyperlink page-title

请注意Google新闻如何在每篇文章摘录的底部提供来源.

卫报 - 美国广播公司新闻 - 路透社 - 彭博社

我想模仿那个.

例如,在提交http://www.washingtontimes.com/news/2010/dec/3/debt-panel-fails-test-vote/我想要返回的URL时The Washington Times

这怎么可能用PHP?

Jos*_*ega 61

我的答案是扩展@AI W使用页面标题的答案.以下是完成他所说的代码.

<?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/");

?>
Run Code Online (Sandbox Code Playgroud)

OUTPUT

华盛顿时报 - 政治,突发新闻,美国和世界新闻

正如您所看到的,这并不是Google正在使用的内容,因此这让我相信他们会获得一个URL的主机名并将其与自己的列表相匹配.

http://www.washingtontimes.com/ =>华盛顿时报

  • 正则表达式匹配应该是:`preg_match("/\<title \>(.*)\ <\/title \>/i",$ str,$ title);`有些网站的所有大写都有<title> ,所以检查应该忽略大小写. (6认同)

Mat*_*hew 33

$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";
Run Code Online (Sandbox Code Playgroud)

输出:

债务委员会未能通过测试投票 - 华盛顿时报

显然,您还应该实现基本的错误处理.


Jam*_*ers 5

您可以获取URL的内容并执行正则表达式搜索title元素的内容.

<?php
$urlContents = file_get_contents("http://example.com/");
preg_match("/<title>(.*)<\/title>/i", $urlContents, $matches);

print($matches[1] . "\n"); // "Example Web Page"
?>
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想使用正则表达式(以匹配文档顶部附近的内容),则可以使用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"
?>
Run Code Online (Sandbox Code Playgroud)

我决定你最喜欢哪种方法.

  • Aaargh!Regexp ...用于......获取...数据......来自... HTML (10认同)

Cup*_*ups 5

使用域主页中的get_meta_tags(),为NYT带来了可能需要截断但可能有用的东西.

$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 );
Run Code Online (Sandbox Code Playgroud)

包括"华盛顿时报"对影响我们国家未来的问题提供突发新闻和评论的描述.