6

最近、Microsoft から、Bing API が Windows Azure Marketplace に移行するというメールを受け取りました。新しいリクエストの主な違いは認証にあるようです。

フォーラムで多くの投稿を読んだ後、私はこれを見つけました:

$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);

ただし、「指定した認証タイプはサポートされていません。Basic と OAuth のみがサポートされています」というエラーが表示されます。

これを修正する方法を知っている人はいますか。cURL も試しましたが、うまくいきません。私に解決策を見つけることができる人に感謝します。

4

4 に答える 4

3

URLが変わっていると思います。このコードは機能します。最初の行の URL に注意してください。

$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);
于 2012-08-16T15:07:41.277 に答える
2

アクセスキーを「XXXX」に置き換えるだけの検索APIの動作例を次に示します。cURLを使用して動作させるのにかなりの時間を無駄にしましたが、ローカルで「CURLOPT_SSL_VERIFYPEER」の原因で失敗していました:(

$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);
于 2013-04-17T13:21:36.697 に答える
-1

Web サイトを新しいサーバーにデプロイしたときに発生したのと同じ問題がありました。私のホスティング会社は、外部リンクへの file_get_contents を使用して一部の機能を無効にしていると思います。

    $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);
    }

これは、cURL を使用する場合に機能します。

于 2013-01-26T11:34:37.810 に答える