【问题标题】:PHP function to scrape first image用于抓取第一张图像的 PHP 函数
【发布时间】:2012-04-03 18:11:09
【问题描述】:

在一个 Wordpress 博客中,我使用以下函数来抓取页面(单个帖子视图)并找到第一张图片,如果没有找到,则使用默认图片:

    function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){ //Defines a default image
    $first_img = "http://custome_url_for_default_image.png";
  }
  return $first_img;
}

我尝试将它按原样粘贴到 Tumblr 主题中,但遇到了一些问题(它不会作为 PHP 函数加载)。我肯定错过了一些东西。如果有人有解决此问题的想法,我很乐意尝试。

谢谢,

P.

【问题讨论】:

  • 是的,抱歉:网络抓取、抓取、收获……我还意识到我需要 PHP 脚本的开始和结束标记,但添加它们也不能使函数正常工作。

标签: php image wordpress tumblr


【解决方案1】:

最好的方法是avoid using regexes to parse HTML

尝试使用 DOMDocument:

function catch_that_image() {
    global $post;
    $dom = new DOMDocument();
    $dom->loadHtml($post->post_content);
    $imgTags = $dom->getElementsByTagName('img');
    if ($imgTags->length > 0) {
        $imgElement = $imgTags->item(0);
        return $imgElement->getAttribute('src');
    } else {
        return 'http://custome_url_for_default_image.png';
    }
}

【讨论】:

  • 这也是我用来解决这个问题的确切策略。 DOMDocument 可以非常优雅地解决这个问题。太棒了。
  • 它确实看起来更简洁,我很高兴了解编写此类函数的“正统”或正确方法。我一定还是做错了什么,因为代码不能作为 PHP 代码工作:它的一部分实际上出现在我的网站上(它是可见的),即使我使用了打开和关闭 PHP 标记并确保在&lt;body&gt;。我会做更多的测试并试图弄清楚。谢谢你的建议。
  • [更新] 显然(如果我没记错的话)Tumblr 的主题不支持 PHP 代码......我对这个不好。尽管可能有一种解决方法:将 PHP 脚本托管在自托管服务器上并在主题中调用它。但那是全新的球赛。感谢您的支持!
猜你喜欢
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2011-11-20
  • 2012-11-23
相关资源
最近更新 更多