Bing search API and Azure
Documentation for new services can get a bit interesting - especially in the rabbit-warren of MSDN. The most clear explanation I can find is on the Migration Guide from this Bing Search API page. Best of all the migration guide has a nice simple example in PHP towards the end.
EDIT: Alright, the migration guide is a starting point, but it isn't the best example. Here are two methods that work for me (no proxy, firewalls etc. interfering):
Using file_get_contents
Note: 'allow_url_fopen' needs to be enabled for this to work. You can use ini_set (or change php.ini etc.) if it isn't.
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>");}
Using cURL
If cURL is installed, which is normal these days:
<?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>";?>
[WTS] changed SearchWeb to Search.
None of the above worked for me. Im running MAMP, this may be relevant. Try the below:
$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>'; }}
you can use bellow code to get bing search results
$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>";