首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阅读空闲的calDAV iCloud iCloud

阅读空闲的calDAV iCloud iCloud
EN

Stack Overflow用户
提问于 2014-11-26 11:57:55
回答 1查看 1.4K关注 0票数 0

我正在尝试从iCloud日历中读取空闲的信息。

我的解决方案是基于这个php客户机https://github.com/muhlba91/icloud/blob/master/PHP/icloud.php的。

到目前为止的工作情况:使用凭据从苹果ID获取苹果用户号,这是访问calDAV URL所必需的

从用户那里获取可用日历的列表(例如。家,工作,)

不起作用的我无法从苹果calDAV服务器获得有效的响应。

请求(编辑):

代码语言:javascript
复制
$ctag_request="<A:propfind xmlns:A='DAV:' xmlns:cs='https://p01-caldav.icloud.com/**USERID**/calendars/home/'>
    <A:prop>
       <cs:getctag />
    </A:prop>
</A:propfind>";


    $response=simplexml_load_string($this->doPropfindRequest($user['appleID'], $user['applepass'], $url, $ctag_request));

这是DoRequest函数。这与我用来获取userID &日历列表的propfind函数完全相同,除了设置为PROPFIND或REPORT的CURLOPT_CUSTOMREQUEST之外。我的结论是,我的解决方案的cURL部分是正确构建的。

代码语言:javascript
复制
function doReportRequest($user, $pw, $url, $xml)
{
    //Init cURL
    $c=curl_init($url);
    //Set headers
    curl_setopt($c, CURLOPT_HTTPHEADER, array("Depth: 1", "Content-Type: text/xml; charset='UTF-8'", "User-Agent: DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)"));
    curl_setopt($c, CURLOPT_HEADER, 0);
    //Set SSL
    curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0);
    //Set HTTP Auth
    curl_setopt($c, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($c, CURLOPT_USERPWD, $user.":".$pw);
    //Set request and XML
    curl_setopt($c, CURLOPT_CUSTOMREQUEST, 'PROPFIND');
    curl_setopt($c, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    //Execute
    $data=curl_exec($c);
    //Close cURL
    curl_close($c);

    return $data;
}

然而,苹果在此请求中返回的内容如下:

代码语言:javascript
复制
object(SimpleXMLElement)#259 (1) {
  ["response"]=>
  object(SimpleXMLElement)#261 (2) {
    ["href"]=>
     string(27) "/8126574070/calendars/home/"
     ["propstat"]=>
     object(SimpleXMLElement)#262 (2) {
      ["prop"]=>
      object(SimpleXMLElement)#260 (1) {
        ["getctag"]=>
        object(SimpleXMLElement)#263 (0) {
        }
      }
      ["status"]=>
      string(22) "HTTP/1.1 404 Not Found"
    }
  }
}

我得到了404的回复。我认为问题是网址错了。然而,我在网上找不到正确的苹果caldav网址是什么。

我希望有一些calDAV专家可以帮助我在这个问题上。

编辑

好吧,我编辑了这个代码/问题,因为苹果不支持空闲,而且它是半工作的。

EN

回答 1

Stack Overflow用户

发布于 2014-11-28 15:20:32

报表方法上受支持的报表前提条件在这里有文档说明:http://www.webdav.org/specs/rfc3253.html#rfc.iref.d.17

这仅仅意味着这个iCloud日历不支持空闲查询。如果您创建一个事件并打开可用性面板,您可以在OS日历应用程序中看到同样的情况。它说‘这个日历不支持可用性’.

要扩展对编辑问题的回答:这是错误的:

代码语言:javascript
复制
$ctag_request="<A:propfind xmlns:A='DAV:' xmlns:cs='https://p01-caldav.icloud.com/**USERID**/calendars/home/'>
  <A:prop>
    <cs:getctag />
  </A:prop>
</A:propfind>";

getctag属性的命名空间为"http://calendarserver.org/ns/“。试试这个:

代码语言:javascript
复制
$ctag_request="<propfind xmlns='DAV:'>
  <prop>
    <getctag xmlns='http://calendarserver.org/ns/' />
  </prop>
</propfind>";

https://p01-caldav.icloud.com/USERID/calendars/home/是日历集合的URL。它不是XML命名空间。

是的,如果您得到一个404,您的URL是错误的/不存在。

另一个问题可能是您的身份验证凭据错误。您是否在您的基本服务中提供应用密码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27148606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档