2014-11-26 4 views
0

iCloud 캘린더에서 약속 있음/없음 정보를 읽으려고합니다.free-busy calDAV 읽기 iCloud PHP

지금까지 어떤 작품이 PHP 클라이언트 https://github.com/muhlba91/icloud/blob/master/PHP/icloud.php

에 내 솔루션을 기반으로 : 가 자격 증명을 사용하여, 사과 ID에서 애플 사용자 수를 얻기를,이는 CalDAV를의 URL

를 액세스하기 위해 필요한

작동하지 않습니다 어떤 사용자 (예 : 집, 직장, ....)

에서 사용할 수있는 달력의 목록을 얻기 : 나는 유효한 응답 f를 얻을 수 없다 ROM에있는 calDAV 서버.

요청 (편집 됨)

$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 함수이다. 이것은 PROPFIND 또는 REPORT로 설정된 CURLOPT_CUSTOMREQUEST를 제외하고 사용자 ID & 캘린더 목록을 얻으려는 propfind 함수와 정확히 동일합니다. 내 솔루션의 cURL 부분이 올바르게 구축되었다고 결론 짓습니다.

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 응답을 얻을 :

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; 
} 

그러나,이 요청에 저를 반환 무엇을 사과 다음이다. 문제는 URL이 잘못되었다고 생각합니다. 그러나 나는 올바른 사과 caldav URL이 무엇인지를 온라인으로 찾을 수 없습니다.

저는이 문제와 관련하여 도움이 될만한 calDAV 전문가가 필요하다고 생각합니다. 애플에서 지원하고 반 일하고되지 않은 자유 바쁜 이후

편집

알려줘야, 내가 코드/질문을 편집했다. 보고서 방법에

답변

1

지원 - 보고서의 전제 조건은 여기에 설명되어 있습니다 : http://www.webdav.org/specs/rfc3253.html#rfc.iref.d.17

그것은 단순히이 아이 클라우드 달력의 freebusy 쿼리를 지원하지 않는다는 것을 의미한다. 이벤트를 생성하고 가용성 패널을 열면 OS X 캘린더 앱에서도 같은 것을 볼 수 있습니다. 이

가 편집 된 질문에 대한 답변을 확장하려면 ... '이 달력은 가용성을 지원하지 않습니다'라고 : 이것은 잘못된 것입니다 :

$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/"입니다. 이 시도 :

$ctag_request="<propfind xmlns='DAV:'> 
    <prop> 
    <getctag xmlns='http://calendarserver.org/ns/' /> 
    </prop> 
</propfind>"; 

https://p01-caldav.icloud.com/USERID/달력/가정/캘린더 모음의 URL입니다. XML 네임 스페이스가 아닙니다.

예, 404가 표시되면 URL이 잘못되었거나 존재하지 않습니다.

인증 자격 증명이 잘못되었을 수 있습니다. 기본 승인에 application password을 제공하고 있습니까?

+0

캘린더 쿼리를 시도하면 동일한 지원되는 보고서가 표시됩니다. iCloud가 캘린더 쿼리를 지원하지 않는다는 의미입니까? 그렇다면 어떻게 calDAV를 통해 이벤트 정보를 읽어야합니까? – Rbn

+0

AFAIK iCloud는 calendar-query의 하위 집합을 지원합니다. 즉, iOS에서 사용하는 시간 범위 쿼리를 지원합니다. 그러나 나는 당신의 요청에 잘못된 것이 있다고 생각합니다. 문제에 대한 HTTP 표현을 질문에 추가 할 수 있습니다. – hnh