Bing search API and Azure

后端 未结 7 902
滥情空心
滥情空心 2020-12-01 04:31

I am trying to programatically perform a search on Microsoft Bing search engine.

Here is my understanding:

  • There was a Bing Search API 2.0 , which will
相关标签:
7条回答
  • 2020-12-01 04:58

    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>';
      }
    
    
    
    }
    

    FROM: http://bililite.com/blog/2012/06/05/new-bing-api/

    0 讨论(0)
  • 2020-12-01 04:59

    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>";
    
    0 讨论(0)
  • 2020-12-01 05:04

    Don't forget to put this:

    base64_encode("ignored:".$accountKey)
    

    instead of:

    base64_encode($accountKey . ":" . $accountKey)
    
    0 讨论(0)
  • 2020-12-01 05:06

    http://www.guguncube.com/2771/python-using-the-bing-search-api

    it contains python code to query the bing and this is according to latest new API (Windows Azure Marketplace)

    # -*- coding: utf-8 -*-
    import urllib
    import urllib2
    import json
    
    def main():
        query = "sunshine"
        print bing_search(query, 'Web')
        print bing_search(query, 'Image')
    
    def bing_search(query, search_type):
        #search_type: Web, Image, News, Video
        key= 'YOUR_API_KEY'
        query = urllib.quote(query)
        # create credential for authentication
        user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FDM; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)'
        credentials = (':%s' % key).encode('base64')[:-1]
        auth = 'Basic %s' % credentials
        url = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/'+search_type+'?Query=%27'+query+'%27&$top=5&$format=json'
        request = urllib2.Request(url)
        request.add_header('Authorization', auth)
        request.add_header('User-Agent', user_agent)
        request_opener = urllib2.build_opener()
        response = request_opener.open(request) 
        response_data = response.read()
        json_result = json.loads(response_data)
        result_list = json_result['d']['results']
        print result_list
        return result_list
    
    if __name__ == "__main__":
        main()
    
    0 讨论(0)
  • 2020-12-01 05:14

    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.

    0 讨论(0)
  • 2020-12-01 05:19

    Here is a working example of the Search API just replace "XXXX" with your access key. Even I wasted quite a few hours trying to get it to work using cURL but it was failing because of "CURLOPT_SSL_VERIFYPEER" on local :( - so make sure your cURL opts are set properly.

    $url = 'https://api.datamarket.azure.com/Bing/Search/Web?Query=%27xbox%27';
    $process = curl_init($url);
    curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($process, CURLOPT_USERPWD, base64_encode("username:XXXX"));
    curl_setopt($process, CURLOPT_TIMEOUT, 30);
    curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($process);
    
    # Deliver
    return $response;
    
    # Have a great day!
    curl_close($process);
    
    0 讨论(0)
提交回复
热议问题