keek.com API、特に「検索キーク」機能 ( https://developers.keek.com/api/commands/search_keek ) を実装しようとしています。1 つの検索語に対してはすべて正常に機能しますが、2 つ以上の語句を検索語として使用しようとすると、「4006 署名が無効です」というエラーが表示されます。私が理解したように、これは、スペースまたはその他のアルファベット以外の文字の間違った URL エンコードが原因です。これは私のコードです。これは、1 単語のフレーズでは機能しますが、複数の単語のフレーズでは機能しません。
$apiKey = Yii::app()->params['keek']['api_key'];
$apiSecret = Yii::app()->params['keek']['api_secret'];
$timestamp = time();
$paramsArr = array(
'auth_api' => $apiKey,
'auth_timestamp' => $timestamp,
'term' => $searchPhrase,
'number' => Yii::app()->params['keek']['keeks_per_page'],
);
// calculate min id (for pagination)
if(isset($socialPageParam[Yii::app()->params['searchEngines']['enginesUrls']['keek']])
&& !empty($socialPageParam[Yii::app()->params['searchEngines']['enginesUrls']['keek']]))
{
$sinceId = min(
$socialPageParam[Yii::app()->params['searchEngines']['enginesUrls']['keek']]
);
if($sinceId)
$paramsArr['since_id'] = $sinceId;
}
// sort alphabeticaly
ksort($paramsArr);
$paramsOfQueryStr = http_build_query($paramsArr);
$paramsOfQueryStr = str_replace(
array('+', '%7E'),
array('%20', '~'),
$paramsOfQueryStr
);
$urlEncodedRequest = rawurlencode($paramsOfQueryStr);
$apiUrl = Yii::app()->params['keek']['api_search_keeks_url'];
$initalAPIurl = rawurlencode($apiUrl);
// forming signature base
$signatureBase = 'GET&' . $initalAPIurl . '&' . $urlEncodedRequest;
// forming signing token
$signingToken = $apiKey . '&' . $timestamp . '&' . $apiSecret;
// forming signature as hashed by sha1 string in binary
$signature = base64_encode(hash_hmac('sha1', $signatureBase, $signingToken, true));
// add signature to headers
$headersArr = array(
"API: $apiKey",
"Timestamp: $timestamp",
"Signature: $signature",
);
// forming full url to call
$fullUrl = $apiUrl . '?' . $paramsOfQueryStr;
// make call to keek's API
$apiRes = Yii::app()->utils->curlGetContent($fullUrl, $headersArr);
var_dump($apiRes);die;
この問題を解決する方法を知っていれば、私を助けてください。前もって感謝します。