Искал thru serverfault.com, stackoverflow.com, apple.stackexchange.com, googled и до сих пор не уходит далеко. Нужна помощь кому-то.Получение vCards из iCloud с использованием PHP
Я пытаюсь получить все vCards из учетных записей iCloud.
Я начинаю с плагина из Roundcube/CardDav.
Из статей, таких как:
stackoverflow.com/questions/24202551/manipulate-groups-in-icloud-with-carddav-protocol sabre.io/dav/building-a-carddav- клиент/ sabre.io/dav/clients/osx-addressbook/ stackoverflow.com/questions/15111887/how-to-import-icloud-contacts-in-php# tools.ietf.org/html/rfc6352#section -8.7.1
Мне удалось получить Принципала, адрес Принципала. Но последний шаг получения возвращает карты ContentLength 0.
Вот что я делаю:
- use icloud email as username
- use icloud password
Чтобы получить принципала, используя «https:// contacts.icloud.com/», как URL , PROPFIND, ГЛУБИНА 0:
<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:">
<d:prop>
<d:current-user-principal/>
</d:prop>
</d:propfind>
Ответ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<multistatus xmlns="DAV:">
<response>
<href>/</href>
<propstat>
<prop>
<current-user-principal>
<href>/1331115018/principal/</href>
</current-user-principal>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
Далее, вот что мне делать, чтобы получить дом, USI нг "HTTPS://contacts.icloud.com/1331115018/principal/", PROPFIND, глубина 0:
<?xml version="1.0" encoding="UTF-8"?>
<d:propfind xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav">
<d:prop>
<card:addressbook-home-set/>
</d:prop>
</d:propfind>
Ответ:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<multistatus xmlns="DAV:">
<response>
<href>/1331115018/principal/</href>
<propstat>
<prop>
<addressbook-home-set xmlns="urn:ietf:params:xml:ns:carddav">
<href xmlns="DAV:">https://p44-contacts.icloud.com:443/1331115018/carddavhome/</href>
</addressbook-home-set>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
Наконец, вот что я делаю, чтобы попытаться получить все VCards, используя HTTPS:// p44-contacts.icloud.com:443/1331115018/carddavhome/, Отчет, глубина 1:
<?xml version="1.0" encoding="utf-8" ?>
<C:addressbook-multiget xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:prop>
<D:getetag/>
<C:address-data>
<C:prop name="UID"/>
<C:prop name="EMAIL"/>
<C:prop name="FN"/>
</C:address-data>
</D:prop>
</C:addressbook-multiget>
Ответ:
<?xml version="1.0" encoding="UTF-8"?>
<multistatus xmlns="DAV:" xmlns:CD="urn:ietf:params:xml:ns:carddav" xmlns:CS="http://calendarserver.org/ns/">
</multistatus>
или
<?xml version="1.0" encoding="utf-8" ?>
<C:addressbook-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:prop>
<D:getetag/>
<C:address-data>
<C:prop name="UID"/>
<C:prop name="EMAIL"/>
<C:prop name="FN"/>
</C:address-data>
</D:prop>
</C:addressbook-query>
Ответ:
<?xml version="1.0" encoding="UTF-8"?>
<multistatus xmlns="DAV:" xmlns:CD="urn:ietf:params:xml:ns:carddav" xmlns:CS="http://calendarserver.org/ns/">
<response>
<href>/1331115018/carddavhome/</href>
<propstat>
<prop> <getetag>"[email protected]=9123588c-8038-439c-a547-19c866d1ed06"</getetag>
<address-data xmlns="urn:ietf:params:xml:ns:carddav">
</address-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
или
<?xml version="1.0" encoding="utf-8" ?>
<C:addressbook-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:carddav">
<D:prop>
<D:getetag/>
<C:address-data>
<C:prop name="UID"/>
<C:prop name="EMAIL"/>
<C:prop name="FN"/>
</C:address-data>
</D:prop>
<C:prop-filter name="EMAIL">
<C:text-match collation="i;unicode-casemap" match-type="equals">me</C:text-match>
</C:prop-filter>
</C:filter>
</C:addressbook-query>
Ответ:
"Didn't understand the report"
Что д o Мне нужно делать?
Thx для ответа. Но я до сих пор не знаю, какой XML я должен использовать. Можете ли вы поделиться больше? – charleslcso