我试图以编程方式在Microsoft Bing搜索引擎上执行搜索.
这是我的理解:
在旧API(Bing Search API 2.0)中,您在URL中指定密钥(应用程序ID),此类密钥将用于对请求进行身份验证.只要您将密钥作为URL中的参数,就可以获得结果.
在新API(Windows Azure Marketplace)中,您不在URL中包含密钥(帐户密钥).相反,您输入查询URL,然后服务器将要求您的凭据.使用浏览器时,会弹出一个要求输入名称和密码的弹出窗口.说明是将帐户名留空,并将密钥插入密码字段.
好的,我已经做了所有这些,我可以在浏览器页面上看到我的搜索的JSON格式结果.
如何在PHP中以编程方式执行此操作?我尝试从Microsoft MSDN库中搜索文档和示例代码,但我要么在错误的位置搜索,要么资源非常有限.
有人能告诉我你怎么做"在弹出的密码字段输入密钥"部分在PHP中?
非常感谢提前.
Joh*_*n C 37
新服务的文档可能会有点有趣 - 特别是在MSDN的兔子中.最清晰的解释我能找到的是在迁移指南从这个Bing搜索API页面.最好的迁移指南在PHP中有一个很好的简单示例.
编辑:好的,迁移指南是一个起点,但它不是最好的例子.以下是两种适用于我的方法(无代理,防火墙等干扰):
注意:需要启用' allow_url_fopen '才能使其正常工作.如果不是,你可以使用ini_set(或更改php.ini等).
if (isset($_POST['submit']))
{
// Replace this value with your account key
$accountKey = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=';
$ServiceRootURL = 'https://api.datamarket.azure.com/Bing/Search/';
$WebSearchURL = $ServiceRootURL . 'Web?$format=json&Query=';
$cred = sprintf('Authorization: Basic %s',
base64_encode($accountKey . ":" . $accountKey) );
$context = stream_context_create(array(
'http' => array(
'header' => $cred
)
));
$request = $WebSearchURL . urlencode( '\'' . $_POST["searchText"] . '\'');
$response = file_get_contents($request, 0, $context);
$jsonobj = json_decode($response);
echo('<ul ID="resultList">');
foreach($jsonobj->d->results as $value)
{
echo('<li class="resultlistitem"><a href="'
. $value->URL . '">'.$value->Title.'</a>');
}
echo("</ul>");
}
Run Code Online (Sandbox Code Playgroud)
如果安装了cURL,这几天是正常的:
<?php
$query = $_POST['searchText'];
$accountKey = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
$serviceRootURL = 'https://api.datamarket.azure.com/Bing/Search/';
$webSearchURL = $serviceRootURL . 'Web?$format=json&Query=';
$request = $webSearchURL . "%27" . urlencode( "$query" ) . "%27";
$process = curl_init($request);
curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($process, CURLOPT_USERPWD, "$accountKey:$accountKey");
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($process);
$response = json_decode($response);
echo "<ol>";
foreach( $response->d->results as $result ) {
$url = $result->Url;
$title = $result->Title;
echo "<li><a href='$url'>$title</a></li>";
}
echo "</ol>";
?>
Run Code Online (Sandbox Code Playgroud)
[WTS]将SearchWeb更改为搜索.
以上都不适合我.我正在运行MAMP,这可能是相关的.试试以下内容:
$accountKey = '=';
function sitesearch ($query, $site, $accountKey, $count=NULL){
// code from http://go.microsoft.com/fwlink/?LinkID=248077
$context = stream_context_create(array(
'http' => array(
'request_fulluri' => true,
'header' => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
)
));
$ServiceRootURL = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/News?Market=%27en-GB%27&';
$WebSearchURL = $ServiceRootURL . '$format=json&Query=';
$request = $WebSearchURL . urlencode("'$query'"); // note the extra single quotes
if ($count) $request .= "&\$top=$count"; // note the dollar sign before $top--it's not a variable!
return json_decode(file_get_contents($request, 0, $context), true);
}
$q = "query";
if ($q){
// get search results
$articles = sitesearch ($q, $_SERVER['HTTP_HOST'], $accountKey , 100);
foreach($articles['d']['results'] as $article) {
echo " <p>".$article['Title'].'</p>';
echo " <p>".$article['Description'].'</p>';
echo " <p>".$article['Source'].'</p>';
echo " <p>".strtotime($article['Date']).'</p>';
}
}
Run Code Online (Sandbox Code Playgroud)
来自:http: //bililite.com/blog/2012/06/05/new-bing-api/
您可以使用以下代码来获取搜索结果
$acctKey = 'Your account key here';
$rootUri = 'https://api.datamarket.azure.com/Bing/Search';
$query = 'Kitchen';
$serviceOp ='Image';
$market ='en-us';
$query = urlencode("'$query'");
$market = urlencode("'$market'");
$requestUri = "$rootUri/$serviceOp?\$format=json&Query=$query&Market=$market";
$auth = base64_encode("$acctKey:$acctKey");
$data = array(
'http' => array(
'request_fulluri' => true,
'ignore_errors' => true,
'header' => "Authorization: Basic $auth"
)
);
$context = stream_context_create($data);
$response = file_get_contents($requestUri, 0, $context);
$response=json_decode($response);
echo "<pre>";
print_r($response);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33066 次 |
| 最近记录: |