1

我正在尝试使用雅虎的内容分析,从这里看起来真的很容易使用

但是每当我执行我的代码时,我都会得到以下输出:

Italian sculptors the Virgin Mary painters http://en.wikipedia.com/wiki/Painting http://en.wikipedia.com/wiki/Adobe_Photoshop http://en.wikipedia.com/wiki/Still_life http://en.wikipedia.com/wiki/Avant-garde http://en.wikipedia.com/wiki/In_the_Sky http://en.wikipedia.com/wiki/Potato 1

我想要的是看到一个带有 XML 标记的 XML 文档,就像单击链接时它的显示方式一样

此外,我看到的输出的源代码(来自浏览器..右键单击>查看源代码)是:

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2012-11-24T05:54:55Z" yahoo:lang="en-US"><results><entities xmlns="urn:yahoo:cap">
    <entity score="0.784327">
      <text end="16" endchar="16" start="0" startchar="0">Italian sculptors</text>
    </entity>
    <entity score="0.78097">
      <text end="72" endchar="72" start="58" startchar="58">the Virgin Mary</text>
    </entity>
    <entity score="0.509566">
      <text end="29" endchar="29" start="22" startchar="22">painters</text>
      <wiki_url>http://en.wikipedia.com/wiki/Painting</wiki_url>
      <related_entities>
        <wikipedia>
          <wiki_url>http://en.wikipedia.com/wiki/Adobe_Photoshop</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/Still_life</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/Avant-garde</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/In_the_Sky</wiki_url>
          <wiki_url>http://en.wikipedia.com/wiki/Potato</wiki_url>
        </wikipedia>
      </related_entities>
    </entity>
  </entities></results></query><!-- total: 191 -->
<!-- engine6.yql.ac4.yahoo.com -->
1

以下是我的代码:

<?php
$c = curl_init();
curl_setopt($c, CURLOPT_URL, 'http://query.yahooapis.com/v1/public/yql');
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, "q=select * from contentanalysis.analyze where text='Italian sculptors and painters of the renaissance favored the Virgin Mary for inspiration';");
curl_setopt($c,CURLOPT_HEADER,0);
$op=curl_exec ($c);
curl_close ($c); 
echo $op;
?>
4

3 回答 3

4

这就是当发送的标头是Content-type: text/html. 您链接到的演示示例显示了格式化的 XML,它使用了一些特殊的格式来使其看起来像这样。您需要将标题设置为 text/xml 之类header('Content-type: text/xml');的,然后输出应显示格式。

header('Content-type: text/xml');
echo $op;

您还可以像这样输出您的内容:

echo '<pre>';
echo htmlentities($op);
echo '</pre>';

上面解释了为什么 XML 在浏览器中显示为未格式化并演示了如何解决该问题。OP 的主要问题是由于输出末尾的杂散字符串,他的 XML 格式不正确。以下处理:

$r = 'http://query.yahooapis.com/v1/public/yql';
$p = "q=select * from contentanalysis.analyze where text='Italian sculptors and painters of the renaissance favored the Virgin Mary for inspiration'"; 

$c = curl_init($r);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $p);
curl_setopt($c, CURLOPT_HEADER, true);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$op = curl_exec ($c);
curl_close ($c); 

if (!($xml = strstr($op, '<?xml'))) {
    $xml = null;
}

header('Content-type: text/xml');
echo $xml;
于 2012-11-24T06:06:45.060 回答
1

如果您在浏览器中看到该结果。你应该只是查看源代码。这将显示包括标签在内的所有内容。由于 brousr 不会显示标签,只会显示内容。

于 2012-11-24T06:05:35.413 回答
0

您尚未使用该header方法指定Content-TypeHTTP 标头。因此,PHP 正在输出其默认的 Content-Typetext/html并且浏览器将 XML 标记视为无效 HTML。

为您的数据输出正确的内容类型。

header("Content-Type: application/xml");
于 2012-11-24T06:08:19.750 回答