0

以下のコードを使用して、Windows Azureの新しいBingベースのAPIを使用して新しいAPIリクエストを作成しようとすると、

$url= 'https://'.$this->m_host.'/Web?Query={keyword}&Adult=%27Off%27&$top=50&$format=Atom';     

        $url=str_replace('{keyword}', urlencode($this->m_keywords), $url);

        // Replace this value with your account key
                    $accountKey = $this->key;

                    $WebSearchURL = $url;

                    $context = stream_context_create(array(
                        'http' => array(
                            'proxy' => 'tcp://127.0.0.1:8888',
                            'request_fulluri' => true,
                            'header'  => "Authorization: Basic " . base64_encode($accountKey . ":" . $accountKey)
                        )
                    ));

                    $request = $WebSearchURL;
                    $response = file_get_contents($request, 0, $context);

        print_r($response);

次のエラーが発生します。

Warning: file_get_contents() [function.file-get-contents]: 
Couldn't connect to server in /home/xxxxx on line 43

Warning: file_get_contents(https://api.datamarket.azure.com/ 
failed to open stream: operation failed in /home/xxxx/ bing_search.php on line 43

これが失敗する理由はありますか?または、file_get_contents()よりもCURLライブラリを使用するのが最善ですか?

4

4 に答える 4

1

以下のコードは私にとっては機能します。ニュースを検索するためのものですが、Web検索でも機能します。

appkeyを自分のものに置き換えるだけでusername、サーバーによって無視されるため、usernameはそのままにします(つまり)

function getBingResult($keyword)
{
    $credentials = "username:appkey";
    $url= "https://api.datamarket.azure.com/Data.ashx/Bing/Search/v1/News?Query=%27{keyword}%27". "&\$format=json";        
    $url=str_replace('{keyword}', urlencode($keyword), $url);
    $ch = curl_init();
    $headers = array(
       "Authorization: Basic " . base64_encode($credentials)
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($session, CURLOPT_VERBOSE, TRUE); 

    $rs = curl_exec($ch);
    $jsonobj = json_decode($rs);
    curl_close($ch);    
    return $jsonobj;
}

機能のテスト:

$bingResult = getBingResult("John");
foreach($bingResult->d->results as $value)
{   
    echo '<pre>'."URL:". $value->Url.'</pre>';
    echo '<pre>'."Title:". $value->Title.'</pre>';
    echo '<pre>'."Description:". $value->Description.'</pre>';   
    echo '<pre>'."Source:". $value->Source.'</pre>';   
    echo '<pre>'."Date:". $value->Date.'</pre>';   
}
于 2012-10-11T09:43:23.210 に答える
0

Bing APIで機能するか、機能するかに関わらず、システムで機能するものと使い慣れたものを使用できますfile_get_contentsCURL

まず、サーバーがWindowsAzureサーバーに接続できることを確認します。pingコマンドラインからaを実行してから、を実行して、実行wgetできるかどうかを確認してください。代理人を経由しますか?ストリームコンテキストでこれらの詳細を設定する必要があります。

何を設定したかはわかりませんが、新しいBingAPIはhttps://api.datamarket.azure.com/Bing/Search/またはhttps://api.datamarket.azure.com/$this->m_hostのいずれかにあるはずです 。 Bing /SearchWeb/。URLhttps ://api.datamarket.azure.com/Webが無効として返されます。

于 2012-07-03T05:47:15.010 に答える
0

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

$process = curl_init('https://api.datamarket.azure.com/Bing/Search/Web?Query=%27xbox%27');
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-17T12:56:57.877 に答える
0

1.)str_replace()は必要ありません。URL内で直接varを使用します。
$url= 'https://'.$this->m_host.'/Web?Query='.urlencode($this->m_keywords).'&Adult=%27Off%27&$top=50&$format=Atom';

2.)同じ値で3つの異なる変数を定義しました。
$WebSearchURL = $url;
$request = $WebSearchURL;

使用$urlのみ。

3.)base64_encode($accountKey . ":" . $accountKey)に減らすことができますbase64_encode(":" . $accountKey)

4.)Accept-Encoding: gzipヘッダーに追加して、トラフィックを減らし、速度を上げます。

5.)問題は次の行になります。
'proxy' => 'tcp://127.0.0.1:8888',

削除するか、正しい値に変更してください。

于 2015-02-24T09:33:04.150 に答える