0

我有这个基于 wp 的小脚本,它可以抓取网页并使用 preg_match_all() 计算 4 个关键字的出现次数。

这是我知道包含关键字的 url 的代码:

<?php

$url ='http://www.leggioggi.it/2013/08/16/i-tre-amici-discutono-di-servizio-sanitario-casuale-e-differenze-nord-sud/';

$response = wp_remote_get($url);

    $the_body = wp_remote_retrieve_body($response);
    //echo htmlentities($the_body);

    $matches = array();

    $matches_count = preg_match_all("/gravidanz|preconcezional|prenatal|concepimento/i", $the_body, $matches);

var_dump ($matches_count);
var_dump ($matches);
?>

我遇到了一些奇怪的问题。在某些页面上我得到零匹配,即使我知道这些页面包含关键字。我注意到对于那些页面,取消注释该行echo htmlentities($the_body);可以解决问题。如果我再次评论它,那么奇怪又回来了。

我的猜测是涉及到一些缓存机制。

PS:代码不是写在模板文件上,而是写在 pods 框架页面中。

更新:我var_dump($the_body);在 htmlentities 行之后放了一个。行为很有趣。如果 echohtmlentities($the_body);被注释掉 var_dump($the_body); 返回一个空字符串;如果同一行处于活动状态,则 var_dump($the_body); 返回整个页面的 html。所以我真的不明白这是怎么回事!

已解决:我检查了 $response var(我没有考虑它),我发现当确实存在远程服务器错误时,wp_remote_get() 返回的响应中报告了错误。这是我回来的:

object(WP_Error)#30 (2) {
  ["errors"]=>
  array(1) {
    ["http_request_failed"]=>
    array(1) {
      [0]=>
      string(69) "Operation timed out after 5000 milliseconds with 25692 bytes received"
    }
  }
  ["error_data"]=>
  array(0) {
  }
}
4

1 回答 1

1

我检查了 $response var(我的不好没有考虑它),我发现确实存在远程服务器错误,该错误是在 wp_remote_get() 返回的响应中报告的。这是我回来的:

object(WP_Error)#30 (2) {
  ["errors"]=>
  array(1) {
    ["http_request_failed"]=>
    array(1) {
      [0]=>
      string(69) "Operation timed out after 5000 milliseconds with 25692 bytes received"
    }
  }
  ["error_data"]=>
  array(0) {
  }
}

所以解决了。我只需要检查 http 错误并重复请求有限的次数,如果没有给出正确的响应,则忽略该资源。

于 2013-11-08T22:17:18.743 回答