2016-03-01 5 views
1

Я использовал базовый пример/учебник, описанный в «https://github.com/jasonjoh/php-tutorial» и пытался добавить параметр «$ поиск» в GetMessages() функцияПараметр поиска не работает с Outlook, restapi

$getMessagesParameters = array (
     // Message Search Conditions 
     "\$search" => 'subject:"pizza"', 
     // Only return Subject, ReceivedDateTime, and From fields 
     "\$select" => "Subject,Body", 
     // Return at most 10 results 
     "\$top" => "10" 
    ); 
    $getMessagesUrl = self::$outlookApiUrl."/Me/Messages?".http_build_query($getMessagesParameters); 
    $response = $this->makeApiCall($access_token, $user_email, "GET", $getMessagesUrl); 

в запрос возвращает ошибку 400

Интересно, что может быть правильный синтаксис

Я передал следующие ссылки

https://msdn.microsoft.com/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests

https://msdn.microsoft.com/en-us/library/cc513841%28v=office.12%29.aspx

https://support.office.com/en-us/article/Learn-to-narrow-your-search-criteria-for-better-searches-in-Outlook-d824d1e9-a255-4c8a-8553-276fb895a8da

Если кто-то есть лучшая идея сделать поиск по почте, пожалуйста, предложите ...

+0

Какой версии API вы используете? Возможно ли, что вы показываете окончательный URL-адрес запроса (вы можете захватить его через скрипач или ваш отладчик браузера - раздел сети)? –

+0

@BenoitPatra мы не можем использовать отладчик браузера для захвата url ... запрос сделан с сервера ... вы могли бы получить идею так или иначе ... код использует 'http_build_query()' и '$ outlookApiUrl = «https://outlook.office.com/api/v2.0». Результат url будет выглядеть примерно так: https://outlook.office.com/api/v2.0/Me/Messages?$search=subject:"pizza"&$select=Subject,Body&$orderby=ReceivedDateTime DESC & $ top = 10', а специальные символы могут быть закодированы в url ... точка - это когда я удаляю параметр '$ search', ошибка не возвращается –

ответ

0

Я понял, точный вопрос ...

Проблема не с спецификацией параметров поиска/сервер REST Endpoints ...

Но проблема в том, как мы отправляем параметры запроса на сервер ...

Мы не должны кодировать данные по URL.

, но нам нужно заменить пространства с + в Result URL

Это решение, которое я придумал ...

$search_AQS = '"Subject:(pizza+OR+hamburger+OR+tacos)+AND+subject:(NOT+beef+NOT+pork)"'; 
    $getMessagesParameters = array (
     "\$search" => $search_AQS, 
     "\$select" => "Subject,Body", 
     "\$top" => "10" 
    ); 
    $tmp_uripiece = http_build_query($getMessagesParameters); 
    $tmp_uripiece = urldecode($tmp_uripiece); 
    $getMessagesUrl = self::$outlookApiUrl.'/Me/Messages?'.$tmp_uripiece; 
    $response = $this->makeApiCall($access_token, $user_email, "GET", $getMessagesUrl); 

Yay! Microsoft также поддерживает функцию поиска в конечных точках ..., но они должны уже задокументированы с большим количеством примеров ...

Everybody спасибо за вашу поддержку ...

0

Вы не можете использовать OrderBy в результатах поиска. см. https://msdn.microsoft.com/en-us/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests $ search = subject: "пицца" должна быть $ search = subject: pizza. Но это тоже не работает. Я использую $ поиск = пиццу и работает (без OrderBy)

+0

Хотя это теоретически может ответить на вопрос, [было бы желательно] (// meta .stackoverflow.com/q/8259), чтобы включить основные части ответа здесь и предоставить ссылку для справки. – manetsus

+0

@max, Извините за ошибку, я удалил '$ orderby' из параметров ... Но проблема такая, как вы говорите, когда я включаю оператор': 'в поисковый запрос,' $ search = subject : pizza' Я получаю ошибку http 400 ... Это из 'curl()' или из результата конечной точки API REST API? Я не уверен... –

Смежные вопросы