2012-08-16 40 views
5

Gần đây tôi đã nhận được email từ Microsoft nói rằng API Bing đã chuyển sang Windows Azure Marketplace. Dường như sự khác biệt chính giữa yêu cầu mới là xác thực.Ủy quyền API Bing không hoạt động

Sau khi đọc nhiều bài viết trên các diễn đàn, tôi thấy điều này:

$accountKey = '#########'; 
$api = 'https://api.datamarket.azure.com/Bing/Search/Web?$format=json&$top=8&Query='; 
$context = stream_context_create(array(
    'http' => array(
     'request_fulluri' => true, 
     'header' => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey) 
    ) 
)); 
$request = $api.'%27'.$q.'%27&$skip='.$start; 
$result = file_get_contents($request, 0, $context); 

Tuy nhiên, tôi vẫn nhận được lỗi "Các loại giấy phép mà bạn cung cấp không được hỗ trợ Chỉ Basic và OAuth được hỗ trợ.".

Có ai biết cách khắc phục sự cố này không. Tôi cũng đã thử cURL và nó không hoạt động. Nhờ bất cứ ai có thể tìm thấy tôi một giải pháp.

+0

bạn có URLEncode biến $ q của bạn –

+0

Microsoft đã không thể cung cấp cái nhìn sâu sắc – Matt

+0

@Sandrino Di Mattia tôi đã cố gắng urlencode nhưng điều đó đã không giúp. Tôi đã nhận được mã ở trên từ Hướng dẫn di chuyển của Microsoft: www.bing.com/webmaster/content/developers/ADM_MIGRATION_GUIDE.docx Tôi tìm thấy cùng một mã trên một bài đăng khác trên StackOverflow nhưng cả hai dường như cung cấp cùng một lỗi –

Trả lời

3

Tôi nghĩ rằng URL đã thay đổi. Mã này hoạt động. Lưu ý URL trong dòng đầu tiên:

$api = 'https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/Web?$format=json&$top=8&Query='; 
$context = stream_context_create(array(
    'http' => array(
     'request_fulluri' => true, 
     'header' => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey) 
    ) 
)); 
$q = 'test'; 
$request = $api.'%27'.$q.'%27'; 

echo file_get_contents($request, 0, $context); 
+0

Đáng buồn thay, mã đó cũng không hoạt động - vẫn đưa ra cùng một lỗi. Tôi tự hỏi liệu nó có thể liên quan đến máy chủ của tôi hay không nhưng tôi không nghĩ vậy. –

+0

Thú vị. Có lẽ có một proxy nào đó đang can nhiễu? Ngoài một dòng '$ accountKey = ...' còn thiếu ở trên đầu, mã đó là nguyên văn những gì tôi vừa chạy thành công. – smarx

+0

Khóa tài khoản của bạn có thể sai không? Hãy kiểm tra kỹ tại https://datamarket.azure.com/account/keys? – smarx

-1

Tôi gặp vấn đề tương tự xảy ra khi tôi triển khai trang web đến máy chủ mới. Tôi nghĩ rằng công ty lưu trữ của tôi đã vô hiệu hóa một số chức năng với file_get_contents đến các liên kết bên ngoài.

$url = 'https://api.datamarket.azure.com/Data.ashx/Bing/MicrosoftTranslator/v1/Translate?Text=%27'.urlencode($text).'%27&To=%27' . $to . '%27&From=%27' . $from . '%27&$top=100&$format=json'; 

    $accountKey = 'APIKEY'; 
    $handle = curl_init ($url); 
    if ($handle) { 
     $curlOptArr = array(
      CURLOPT_HTTPAUTH => CURLAUTH_BASIC, 
      CURLOPT_USERPWD => $accountKey . ':' . $accountKey, 
      CURLOPT_RETURNTRANSFER => TRUE 

     ); 
     curl_setopt_array($handle, $curlOptArr); 
     $response = curl_exec($handle); 
     $data = json_decode($response,true); 
     if (is_array($data)) { 
      if (isset($data['d']['results'][0]['Text'])) { 
       print $data['d']['results'][0]['Text']; 
      } else { 
       print false; 
      } 
     } else { 
      print $text; 
     } 
     $errRet = curl_error($handle); 
     curl_close($handle); 
    } 

Điều này phù hợp với tôi khi sử dụng cURL.

2

Dưới đây là ví dụ hoạt động của API tìm kiếm chỉ thay thế khóa truy cập của bạn bằng "XXXX". Ngay cả khi tôi lãng phí khá một vài giờ để có được nó hoạt động sử dụng cURL nhưng nó đã thất bại trong sự nghiệp "CURLOPT_SSL_VERIFYPEER" trên địa phương :(

$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, "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); 
+1

Tôi đã có thể khắc phục vấn đề tương tự này nhờ mã CURL của bạn. Cảm ơn bạn. – woodgate

+1

Ảnh tĩnh này hoạt động. Có thể xác nhận nó. –

Các vấn đề liên quan