Форум » [x]Harbour » Облачные сервисы (WebDAV, CalDAV &Co) » Ответить

Облачные сервисы (WebDAV, CalDAV &Co)

Dr. Oldwarez: После некоторого разбирательства с прогой удалось организовать импорт из ICAL-файлов и экспорт в оные. Но тут шеф захотел, чтобы был прямой контакт с CalDav через интернет. Я знаю, что на питоне такое возможно. На дельфине и даже Xojo (RealBasic) тоже - через спецбиблиотеку. Но как реализовать подключение к облачному сервису в Harbour/Minigui? Возможно ли это вообще?

Ответов - 174, стр: 1 2 3 4 5 6 7 8 9 All

SergKis: Dr. Oldwarez пишет Теперь, как, собственно говоря, войти в календарь и просмотреть его содержимое? <d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/" xmlns:card="urn:ietf:params:xml:ns:carddav"> Похожее видел в той статье[pre2] <?xml version="1.0"?> <d:multistatus xmlns:d="DAV:" xmlns:s="https://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="https://calendarserver.org/ns/" xmlns:card="urn:ietf:params:xml:ns:carddav"> ... Но у нас также есть еще одна интересная информация, возвращенная в теле запроса, а именно другая коллекция, которую мы можем изучить: /calendars/user@demo.atmail.com/ Мы будем выполнять рекурсию, насколько это возможно, с глубиной, установленной на бесконечность, но передаем некоторые данные запроса, чтобы указать, что нас интересуют только объекты календаря, и чтобы вернуть только URL-адрес, тип ресурса и отображаемое имя коллекции: $ curl --user "user@demo.atmail.com:ThePassword" -sD /dev/stderr -H "Content-Type: application/xml" -X PROPFIND -H "Depth: infinity" --data '<d:propfind xmlns:d="DAV:" xmlns:cs="https://calendarserver.org/ns/"><d:prop><d:resourcetype /><d:displayname /></d:prop></d:propfind>' https://demo-server.atmail.com:8443/calendars/user@demo.atmail.com/ | xmllint -format - ... [/pre2] и т.д. по статье, наверно, так

Dr. Oldwarez: Петр пишет:  цитата: Вроде что-то получилось curl -k -o test.xml --user USERNAME:PASSWORD -X PROPFIND "https://webmail.kleeblatt.com/rpc.php/principals/illya@kleeblatt.com/" Куда этот url ссылается? Эту часть почему отбросили /calendar~GhGVum1xWexaffEfhiVkNN7 Добавил потерянную часть. И вот [pre2]<?xml version="1.0" encoding="utf-8"?> <d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/" xmlns:card="urn:ietf:params:xml:ns:carddav"><d:response> <d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/</d:href> <d:propstat><d:prop><d:resourcetype><d:collection/><cal:calendar/></d:resourcetype></d:prop> <d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response><d:response><d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/w7klsLDepGCBYAA7Gmr4GIe.ics</d:href> <d:propstat><d:prop><d:getlastmodified>Sat, 13 Mar 2021 16:58:11 GMT</d:getlastmodified> <d:getcontentlength>500</d:getcontentlength><d:resourcetype/><d:getetag>"bb0f09c6bf34469cad5f872725ed93b9"</d:getetag> <d:getcontenttype>text/calendar; charset=utf-8</d:getcontenttype></d:prop><d:status>HTTP/1.1 200 OK</d:status> </d:propstat></d:response> <d:response><d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/8gpZuoZBJQDnLlr-66brhHG.ics</d:href> <d:propstat><d:prop><d:getlastmodified>Thu, 04 Mar 2021 16:51:14 GMT</d:getlastmodified><d:getcontentlength>515</d:getcontentlength><d:resourcetype/> <d:getetag>"c1daa4a100ad72550dc468e539047aac"</d:getetag><d:getcontenttype>text/calendar; charset=utf-8</d:getcontenttype></d:prop> <d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response><d:response> <d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/VM3wwLrVEm3Zwn-UkKAzXra.ics</d:href> <d:propstat><d:prop><d:getlastmodified>Thu, 04 Mar 2021 16:51:33 GMT</d:getlastmodified><d:getcontentlength>577</d:getcontentlength> <d:resourcetype/><d:getetag>"da02d9cfbc83085498615e55e87d25ea"</d:getetag><d:getcontenttype>text/calendar; charset=utf-8</d:getcontenttype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response> <d:response><d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/e5aab12a-1a2a-4309-96d4-cccb1b67d9ba.ics</d:href> <d:propstat><d:prop><d:getlastmodified>Mon, 08 Mar 2021 06:59:00 GMT</d:getlastmodified><d:getcontentlength>659</d:getcontentlength> <d:resourcetype/><d:getetag>"ff0f3e0392c3a16579e8b87442f60ff4"</d:getetag> <d:getcontenttype>text/calendar; charset=utf-8</d:getcontenttype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response> <d:response><d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/seukIp8ajv0rOXXx8IG4Q9j.ics</d:href><d:propstat> <d:prop><d:getlastmodified>Mon, 15 Mar 2021 12:56:41 GMT</d:getlastmodified><d:getcontentlength>546</d:getcontentlength><d:resourcetype/> <d:getetag>"fa79fe0b28dea03c0db457af39980eae"</d:getetag><d:getcontenttype>text/calendar; charset=utf-8</d:getcontenttype></d:prop> <d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response><d:response> <d:href>/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/83sEK6nFBn4-TQ1XcZoPvWz.ics</d:href><d:propstat><d:prop> <d:getlastmodified>Mon, 15 Mar 2021 12:52:23 GMT</d:getlastmodified><d:getcontentlength>526</d:getcontentlength><d:resourcetype/> <d:getetag>"11735b683c59f7e3c0a60842c1df4101"</d:getetag><d:getcontenttype>text/calendar; charset=utf-8</d:getcontenttype></d:prop> <d:status>HTTP/1.1 200 OK</d:status></d:propstat></d:response></d:multistatus>[/pre2]

Петр: Dr. Oldwarez пишет: Я так понял, это список ICS файлов. Теперь надо открывать каждый ICS по отдельности, чтобы получить записи календаря? Наверное. Попробуйте стащить один и поработать с ним оффлайн.


SergKis: Dr. Oldwarez пишет Добавил потерянную часть. И вот Смотреть без переноса трудно, но похоже (по статье) это коллекция календарей, опять по статье след. шаг Итак, заглянем внутрь одной из этих коллекций (календарей). Выберем календарь «Дни рождения» и посмотрим, что там: $ curl --user "user@demo.atmail.com:ThePassword" -sD /dev/stderr -H "Content-Type: application/xml" -X PROPFIND -H "Depth: infinity" https://demo-server.atmail.com:8443/calendars/user@demo.atmail.com/02f29dd9516f1f0c415527e0a60cb3f7/ | xmllint -format - ...ответ В данном случае это календарное событие, и мы можем сказать об этом через свойство: <d: getcontenttype> текст / календарь; charset = utf-8; компонент = vevent </ d: getcontenttype> Наконец, давайте извлечем это событие с помощью обычного старого HTTP GET и посмотрим, что у нас есть: curl --user "user@demo.atmail.com:ThePassword" -i -X GET https://demo-server.atmail.com:8443/calendars/user@demo.atmail.com/02f29dd9516f1f0c415527e0a60cb3f7/33992bd8-d3fe-4b07-baaf-c43d0042fae8.ics HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Sat, 09 May 2020 05:28:59 GMT Content-Type: text/calendar; charset=utf-8; component=vevent Content-Length: 554 Connection: keep-alive Last-Modified: Sat, 09 May 2020 01:24:06 GMT ETag: "d34b216dac0dcf327a3cf2d79f95a226" X-Content-Type-Options: nosniff BEGIN:VCALENDAR VERSION:2.0 PRODID:-//apiserver//API Server DAV//EN BEGIN:VEVENT UID:33992bd8-d3fe-4b07-baaf-c43d0042fae8 DTSTART;VALUE=DATE:20200506 DTEND;VALUE=DATE:20200507 CREATED:20190124T104704Z DTSTAMP:20190128T234044Z LAST-MODIFIED;X-VOBJ-FLOATINGTIME-ALLOWED=TRUE:20200503T203005 RRULE:FREQ=YEARLY;INTERVAL=1;WKST=MO SEQUENCE:30 STATUS:CONFIRMED SUMMARY:Dad's Birthday TRANSP:OPAQUE BEGIN:VALARM ACKNOWLEDGED:20190128T234044Z ACTION:DISPLAY DESCRIPTION:Default Description TRIGGER:-P1D END:VALARM END:VEVENT END:VCALENDAR по статье такие действия для извл. данных

Петр: SergKis пишет: Смотреть без переноса трудно Code Beautify

SergKis: Петр пишет Code Beautify Через эту штуку и надо сюда выкладывать, а то страницы расползлись по ширине хз как, центрованные цитаты вправо улетели далеко за пределы экрана, не говоря о самом тексте

Петр: Надеюсь топикстартер (или модератор) пост №259 удалит, а №260 отформатирует как следует.

Dr. Oldwarez: Петр пишет:  Отправлено: Сегодня 10:01. Заголовок: Надеюсь топикстартер.. - новое! Надеюсь топикстартер (или модератор) пост №259 удалит, а №260 отформатирует как следует. Подформатировал пост 259. 260 удалил как дубликат. Извините за созданные проблемы - я просто не имею опыта с xml файлами

Dr. Oldwarez: SergKis пишет: Смотреть без переноса трудно, но похоже (по статье) это коллекция календарей, опять по статье след. шаг  цитата: Итак, заглянем внутрь одной из этих коллекций (календарей). Выберем календарь «Дни рождения» и посмотрим, что там: $ curl --user "user@demo.atmail.com:ThePassword" -sD /dev/stderr -H "Content-Type: application/xml" -X PROPFIND -H "Depth: infinity" https://demo-server.atmail.com:8443/calendars/user@demo.atmail.com/02f29dd9516f1f0c415527e0a60cb3f7/ | xmllint -format - ...ответ В данном случае это календарное событие, и мы можем сказать об этом через свойство: <d: getcontenttype> текст / календарь; charset = utf-8; компонент = vevent </ d: getcontenttype> Наконец, давайте извлечем это событие с помощью обычного старого HTTP GET и посмотрим, что у нас есть: curl --user "user@demo.atmail.com:ThePassword" -i -X GET https://demo-server.atmail.com:8443/calendars/user@demo.atmail.com/02f29dd9516f1f0c415527e0a60cb3f7/33992bd8-d3fe-4b07-baaf-c43d0042fae8.ics HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Sat, 09 May 2020 05:28:59 GMT Content-Type: text/calendar; charset=utf-8; component=vevent Content-Length: 554 Connection: keep-alive Last-Modified: Sat, 09 May 2020 01:24:06 GMT ETag: "d34b216dac0dcf327a3cf2d79f95a226" X-Content-Type-Options: nosniff BEGIN:VCALENDAR VERSION:2.0 PRODID:-//apiserver//API Server DAV//EN BEGIN:VEVENT UID:33992bd8-d3fe-4b07-baaf-c43d0042fae8 DTSTART;VALUE=DATE:20200506 DTEND;VALUE=DATE:20200507 CREATED:20190124T104704Z DTSTAMP:20190128T234044Z LAST-MODIFIED;X-VOBJ-FLOATINGTIME-ALLOWED=TRUE:20200503T203005 RRULE:FREQ=YEARLY;INTERVAL=1;WKST=MO SEQUENCE:30 STATUS:CONFIRMED SUMMARY:Dad's Birthday TRANSP:OPAQUE BEGIN:VALARM ACKNOWLEDGED:20190128T234044Z ACTION:DISPLAY DESCRIPTION:Default Description TRIGGER:-P1D END:VALARM END:VEVENT END:VCALENDAR по статье такие действия для извл. данных Да, я понял. Но сначала нужно весь список ics-ов считать в массив внешним циклом, а потом каждый ics ещё просмотреть, чтобы получить из него данные календарей. Это очень много вызовов curl и автоматически созданных промежуточных файлов получается. Нельзя ли так, чтобы сразу подключение и считывание прямо программой, минуя многочисленные промежуточные стадии? И как в Harbour считывать данные из XML в массив?

Петр: Dr. Oldwarez пишет: Но мне бы всё-таки хотелось встроенную библиотеку для удобства дистрибуции. Изучить я смогу. Только дайте мне документацию, а то hbd я не знаю, чем прочесть. И несколько примеров. Dr. Oldwarez пишет: Нельзя ли так, чтобы сразу подключение и считывание прямо программой, минуя многочисленные промежуточные стадии? Добейтесь конечного результата с curl, а тогда будете оптимизировать. Сейчас у вас нет ни знаний, ни умений на свои хотелки. Все придет, может быть, а может и не быть. К тому же инсталлятор весом меньше 1 Га в наше время моветон

Петр: Dr. Oldwarez пишет: И как в Harbour считывать данные из XML в массив? Все просто - считываете данные из XML и добавляете в массив. В Harbour нет встроенных функций для роботы с XML, в отличии от того же json или cvs, ini. Значит у вас есть выбор 1) Можете просто разбирать строку с помощью строковых функций; 2) Можете использовать библиотеку hbexpat из contrib, примеры там же; 3) Можете использовать библиотеку hbmxml из contrib, примеры там же; 4) Можете использовать библиотеку hbxml из состава Minigui, пример SAMPLES\Advanced\XmlDemo и др; 5) Можете использовать стандартные технологии MS OLE и Msxml, пример SAMPLES\Advanced\GoogleCharts; и т.д. и т.п.

SergKis: Петр пишет Можете просто разбирать строку с помощью строковых функций; Простой пример выкусить из xml поста 259[pre2] LOCAL cXml := "_ics.xml" // файл с данными из поста 259 LOCAL cBuf := hb_memoread(cXml) LOCAL aBuf, nI IF CRLF $ cBuf ; cBuf := StrTran(cBuf, CRLF, "") ENDIF aBuf := hb_ATokens(cBuf, "<d:response><d:href>") ? aBuf FOR nI := 1 TO Len(aBuf) cBuf := aBuf[nI] ? nI, left(cBuf, AT("</", cBuf)-1) NEXT ... результат ARRAY[8] 1 '' 2 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/ 3 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/w7klsLDepGCBYAA7Gmr4GIe.ics 4 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/8gpZuoZBJQDnLlr-66brhHG.ics 5 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/VM3wwLrVEm3Zwn-UkKAzXra.ics 6 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/e5aab12a-1a2a-4309-96d4-cccb1b67d9ba.ics 7 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/seukIp8ajv0rOXXx8IG4Q9j.ics 8 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/83sEK6nFBn4-TQ1XcZoPvWz.ics [/pre2]

SergKis: Dr. Oldwarez пишет Нельзя ли так, чтобы сразу подключение и считывание прямо программой, минуя многочисленные промежуточные стадии? Если пройдете по статье еще раз, то увидите, что каждый вызов curl это запрос к серверу и обработка результата и снова запрос ..., т.е. и без curl будет точно такая же схема работы. Если оформите запрос в ф-ю (вызов curl и обработка результата) с возвратом результата, то если (может и не понадобится) потом надо будет переделаете на исп. lib

SergKis: PS Давать календари надо будет в цивилизованном виде, т.е. таблица dbf\array - "список календарей" -> выбираем -> запрос[ы] curl к серверу -> ответ и таблица dbf\array - "события календаря" если работа online, при offline тот же путь выборки и куда то сохранить первичные запросы (потом обновлять, если ics меняли)

SergKis: PS2 Чуть усложнил и получил таблицу календарей в массиве [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo */ #define _HMG_OUTLOG #include "hmg.ch" #define SHOW_TITLE "Read list ics calendar from xml" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 REQUEST HB_CODEPAGE_UTF8 REQUEST DBFCDX, DBFFPT REQUEST DBFNTX, DBFDBT //////////////////////////////////////////////////////////////////////////// FUNCTION Main() LOCAL cXml := "_ics.xml" LOCAL cBuf := hb_memoread(cXml) LOCAL aBuf, nI, cI, nK, cK, nN LOCAL aIcs := {} SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN rddSetDefault( "DBFCDX" ) SET CENTURY ON SET DATE GERMAN SET DATE FORMAT "DD.MM.YY" SET DELETED OFF SET EXCLUSIVE ON SET EPOCH TO 2000 SET AUTOPEN ON SET EXACT ON SET SOFTSEEK ON SET NAVIGATION EXTENDED SET FONT TO "Arial", 11 SET OOP ON fErase(".\_MsgLog.txt") IF CRLF $ cBuf ; cBuf := StrTran(cBuf, CRLF, "") ENDIF aBuf := hb_ATokens(cBuf, "<d:response><d:href>") ? aBuf, "Адреса:" nN := 0 FOR nI := 1 TO Len(aBuf) cI := aBuf[nI] nK := AT("</", cI) cK := trim(left(cI, nK-1)) IF right(cK, 4) == ".ics" nN += 1 AAdd(aIcs, { cK, "", "ics "+hb_ntos(nN) }) ENDIF ? nI, cK NEXT ? aBuf := hb_ATokens(cBuf, "<d:propstat><d:prop><d:getlastmodified>") ? aBuf, "Модификация:" nN := 0 FOR nI := 1 TO Len(aBuf) cI := aBuf[nI] cK := "" IF ! "<?xml " $ cI nN += 1 nK := AT("</", cI) cK := left(cI, nK-1) aIcs[nN][2] := cK ENDIF ? nI, cK NEXT ? ? "ICS =", aIcs ?v aIcs ? RETURN NIL Результат ARRAY[8] Адреса: 1 '' 2 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/ 3 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/w7klsLDepGCBYAA7Gmr4GIe.ics 4 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/8gpZuoZBJQDnLlr-66brhHG.ics 5 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/VM3wwLrVEm3Zwn-UkKAzXra.ics 6 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/e5aab12a-1a2a-4309-96d4-cccb1b67d9ba.ics 7 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/seukIp8ajv0rOXXx8IG4Q9j.ics 8 /rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/83sEK6nFBn4-TQ1XcZoPvWz.ics ARRAY[7] Модификация: 1 '' 2 Sat, 13 Mar 2021 16:58:11 GMT 3 Thu, 04 Mar 2021 16:51:14 GMT 4 Thu, 04 Mar 2021 16:51:33 GMT 5 Mon, 08 Mar 2021 06:59:00 GMT 6 Mon, 15 Mar 2021 12:56:41 GMT 7 Mon, 15 Mar 2021 12:52:23 GMT ICS = ARRAY[6] 1 {"/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/w7klsLDepGCBYAA7Gmr4GIe.ics", "Sat, 13 Mar 2021 16:58:11 GMT", "ics 1"} 2 {"/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/8gpZuoZBJQDnLlr-66brhHG.ics", "Thu, 04 Mar 2021 16:51:14 GMT", "ics 2"} 3 {"/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/VM3wwLrVEm3Zwn-UkKAzXra.ics", "Thu, 04 Mar 2021 16:51:33 GMT", "ics 3"} 4 {"/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/e5aab12a-1a2a-4309-96d4-cccb1b67d9ba.ics", "Mon, 08 Mar 2021 06:59:00 GMT", "ics 4"} 5 {"/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/seukIp8ajv0rOXXx8IG4Q9j.ics", "Mon, 15 Mar 2021 12:56:41 GMT", "ics 5"} 6 {"/rpc.php/calendars/illya@kleeblatt.com/calendar~GhGVum1xWexaffEfhiVkNN7/83sEK6nFBn4-TQ1XcZoPvWz.ics", "Mon, 15 Mar 2021 12:52:23 GMT", "ics 6"} [/pre2]

Dr. Oldwarez: SergKis пишет: Давать календари надо будет в цивилизованном виде, т.е. таблица dbf\array - "список календарей" -> выбираем -> запрос[ы] curl к серверу -> ответ и таблица dbf\array - "события календаря" если работа online, при offline тот же путь выборки и куда то сохранить первичные запросы (потом обновлять, если ics меняли) Спасибо за помощь! Я уже понял, примерно, как это. Но вот вопрос: если календарь заполнен и в нём 500 событий, это что, надо 500 раз соединяться? Такого DDOSа не выдержат ни сеть, ни комп. Профильтровать их тоже не получится - пока не откроешь ICS, его параметры будут неизвестны.

SergKis: Dr. Oldwarez пишет Такого DDOSа не выдержат ни сеть, ни комп. Это не DDOS, а REST API спец. механизм для доступа и обмена данными, смело используйте Профильтровать их тоже не получится - пока не откроешь ICS, его параметры будут неизвестны. Если сохранять в dbf, то можно опираться на дату модификации сначала ics, потом события при изм. календаря Если нет команды получить все события, получаем по одному

SergKis: Dr. Oldwarez пишет Но вот вопрос: если календарь заполнен и в нём 500 событий, это что, надо 500 раз соединяться? Вы не сделали запроса к конкретному ics, после списка, по статье, я так понял, должны получить на календарь список всех событий с датой создания и модификации. Т.е. если уже в dbf занесли данные, то можно выбрать из списка только изменненные и по ним делать запрос для получения данных VEVENT и изменять dbf только по ним

Dr. Oldwarez: SergKis пишет: Если нет команды получить все события, получаем по одному А мне надо именно, что ВСЕ события получить. Дата модификации неинформативна. Не дата модификации мне нужна, а дата и время события. Это и есть первичный ключ в моём локальном календаре

Петр: Dr. Oldwarez пишет: А мне надо именно, что ВСЕ события получить. Так втащите весь календарь на локальный комп (за один запрос), а потом синхронизируйте его с сервером Пример с GET делали или нет?



полная версия страницы