【发布时间】:2012-07-12 11:48:32
【问题描述】:
Microsoft 自己的新 Bing API 的 PHP 示例不起作用。我尝试了很多方法,它只是显示:
服务器错误
401 - 未经授权:由于凭据无效,访问被拒绝。
您无权查看此目录或页面 使用您提供的凭据。
官方文档中给出的示例编码如下,它在
处分解'proxy' => 'tcp://127.0.0.1:8888',
我 100% 确定我的密钥是正确的,当我在浏览器 url 中输入它时它工作正常,即
https://api.datamarket.azure.com/Bing/SearchWeb/Web?Query=%27love+message%27
(您需要将API密钥作为您的密码和用户名可以是任何东西)
<html>
<head>
<link href="styles.css" rel="stylesheet" type="text/css" />
<title>PHP Bing</title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Type in a search:
<input type="text" id="searchText" name="searchText"
value="<?php
if (isset($_POST['searchText']))
{
echo($_POST['searchText']);
}
else
{
echo('sushi');
}
?>"
/>
<input type="submit" value="Search!" name="submit" id="searchButton" />
<?php
if (isset($_POST['submit']))
{
// Replace this value with your account key
$accountKey = 'BKqC2hIKr8foem2E1qiRvB5ttBQJK8objH8kZE/WJVs=';
$ServiceRootURL = 'https://api.datamarket.azure.com/Bing/Search/';
$WebSearchURL = $ServiceRootURL . 'Image?$format=json&Query=';
$context = stream_context_create(array(
'http' => array(
//'proxy' => 'tcp://127.0.0.1:8888',
'request_fulluri' => true,
'header' => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
)
));
$request = $WebSearchURL . urlencode( '\'' . $_POST["searchText"] . '\'');
echo($request);
$response = file_get_contents($request, 0, $context);
print_r($response);
$jsonobj = json_decode($response);
echo('<ul ID="resultList">');
foreach($jsonobj->d->results as $value)
{
echo('<li class="resultlistitem"><a href="' . $value->MediaURL . '">');
echo('<img src="' . $value->Thumbnail->MediaUrl. '"></li>');
}
echo("</ul>");
}
?>
</form>
</body>
</html>
google API 和 Yahoo API 我都试过了,都没有这么难。
【问题讨论】:
-
别这么快责怪 MS。 很多人使用 API,如果它本身就被破坏了,我相信现在有人会注意到的。
-
您是否正在运行需要身份验证的本地代理?您的 BING api 密钥对本地代理毫无意义。
-
我不知道有多少人有这个问题,但是,google 中给出的示例编码,yahoo api 更干净并且工作完美.. 可能他们故意不想让 php 开发人员使用它。 . 无论如何..
-
所以如果这是一个本地代理服务器,那么我应该怎么做才能让它工作?文档根本没有回答任何问题..
-
我不认为我在运行代理,我在 VPS 和另一个完全不同的网络专用服务器上都测试过,都给了我同样的错误,还记得这个编码是来自 bing 的官方示例,我是除了类似的代理服务器连接之外没有改变任何东西..(两者都不起作用)