【问题标题】:The Search parameter does not work with Outlook restapi搜索参数不适用于 Outlook rest api
【发布时间】:2016-06-14 00:40:45
【问题描述】:

我使用了“https://github.com/jasonjoh/php-tutorial”中描述的基本示例/教程,并尝试在 getMessages() 函数中添加“$search”参数

    $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

如果有人有更好的想法来搜索邮件,请建议...

【问题讨论】:

  • 你用的是哪个版本的api?是否有可能显示最终请求 url(您可以通过 fiddler 或浏览器调试器 - 网络部分获取它)?
  • @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 参数时,没有返回错误

标签: php rest oauth-2.0 outlook-restapi


【解决方案1】:

我已经弄清楚了确切的问题...

问题不在于搜索参数规范/服务器 REST 端点...

但问题在于我们如何将查询参数发送到服务器......

我们不应该对数据进行 url 编码。

但我们需要将结果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);

耶! microsoft 还支持其端点中的搜索功能...但他们应该记录更多示例...

感谢大家的支持...

【讨论】:

    【解决方案2】:

    您不能在搜索结果中使用 orderby。 见https://msdn.microsoft.com/en-us/office/office365/api/complex-types-for-mail-contacts-calendar#UseODataqueryparametersSearchrequests $search=subject:"pizza" 应该是 $search=subject:pizza。但这也行不通。 我使用 $search=pizza 并且有效(无需 orderby)

    【讨论】:

    • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    • @max,对不起,我已经从参数中删除了$orderby...但是问题正如你所说,当我在搜索查询中包含运算符: , $search=subject:pizza 我收到 http 400 错误...是来自 curl() 还是来自 Outlook REST API Server Endpoint 结果?我不确定……
    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多