使用yql和php来抓取内容

时间:2012-03-22 23:30:53

标签: php json yql

YQL一直在试图更好地理解它。我已经设法从外部站点提取我想要的信息并在YQL控制台中获得结果节点,但因此在我的本地开发服务器上显示结果失败了。

我最终想要做的是尝试将其放入wordpress功能,以便我可以在页面上调用它(例如排名页面)。

我在php中使用的代码(编辑::我将代码改为此代码)

ini_set('display_errors', 1);
    ini_set('log_errors', 1);
    error_reporting(E_ALL);

    $yql_base_url ="http://query.yahooapis.com/v1/public/yql";
    $yql_query = 'SELECT * FROM html WHERE url="http://www.nwjhl.com/leagues/standingsTotals.cfm?leagueID=15654&clientID=4594" AND xpath=\'//table[@class="yuiboxscores"]/tbody/tr\'';

    $yql_query_url = $yql_base_url . "?q=" . urlencode($yql_query);
    $yql_query_url .= "&format=json";

    // set up the cURL
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $yql_query_url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_SSL_VERIFYHOST, false);

    // execute the cURL
    $rawdata = curl_exec($c);
    curl_close($c);

    // Convert the returned JSON to a PHP object
    $data = json_decode($rawdata);

我已经设法获取我正在寻找的数据我只是因为我假设它而无法提取数据,因为“tr”在一个数组中。

我可能已经盯着它看起来可能有点复杂,因为我想用YQL,我想要一个for循环是需要的,我只是不确定如何引用[内容]然后当然所有其他数字。我尝试使用

进行调试
$results = $data->query->results->td;
    echo '<pre>' . print_r($results) . '</pre>';

我不知道我怎么能循环遍历所有这些对象的数组来显示[内容](这是团队),当然还有统计数据。希望能继续努力,我可以搞清楚

1 个答案:

答案 0 :(得分:3)

您从该网址返回的json不是您所期望的。试试

echo $output

在curl_close($ ch)之后;

然后通过json格式化程序(google it)运行它。 $ data-&gt; query-&gt;结果有效,但没有名为Result的子项,它似乎只是某种类型的jsonified html表。

一旦您以更易读的格式看到JSON,您的问题可能对您更有意义。

根据您的编辑 - 在json_decode原始数据后尝试此操作。我不确定你究竟是什么样的数据,但我猜它会在你用var_dump转储的对象中

$topics = $data->query->results->table->tbody->tr;
foreach ($topics as $topic)
   {
   echo "row:";
   var_dump($topic);
   }

以下是如何循环查找

元素的更具体示例

$topics = $data->query->results->table->tbody->tr;
foreach ($topics as $topic)
   {
   $data = $topic->td;
   foreach ($data as $element)
      {
      if (array_key_exists('a', $element))
         {
         echo "Team Name: " . $element->a->content . "\n";
         }
      if (array_key_exists('p', $element))
         {
         echo "Found P: " . $element->p . "\n";
         }
      }
   }