0

共有のicloudカレンダーにイベントを管理するためのスクリプトを実現したい. データベースにいくつかのイベントを保存しましたが、リクエストに応じて、リモートの電話/iPadなどで表示されるイベントを作成する必要があります。

Andy と彼の投稿のおかげで、icloud にイベントを書き込むのに問題はありませんでしたが、イベントを更新または削除しようとすると、icloud は変更を記録していないようです。以下に、イベントの作成に使用する関数の一部を示します

$body = <<<__EOD
BEGIN:VCALENDAR
PRODID:-// blablabla
VERSION:2.0
BEGIN:VEVENT
METHOD:UPDATE
UID:$id
DTSTAMP:$tstamp
ORGANIZER;CN=$organizer:MAILTO:$email
DTSTART:$tstart
DTEND:$tend
SUMMARY:$name
LOCATION:$location
DESCRIPTION:$description
SEQUENCE:2
END:VEVENT
END:VCALENDAR
__EOD;



$headers = array(
    'Content-Type: text/calendar; charset=utf-8',
    'If-None-Match: *',
    'Expect: ',
    'Content-Length: '.strlen($body),
);



// CONNESSIONE E SCRITTURA


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_exec($ch);

if(curl_errno($ch)) echo 'Curl error: '.curl_error($ch);

curl_close($ch);

icloud サーバーへの接続を除外して $body を印刷すると、.ics によって生成された更新が問題なくローカル カレンダーに表示されます (その後、変更が icloud に複製されます)。そうしないと、icloud に接続しようとすると、変更が保存されません。サーバーリクエストを変更しようとしましたが、まだ抜け出せません

4

1 に答える 1

0

ヘッダーから「If-None-Match: *」を削除します。これにより、「PUT」コマンドで iCal に更新できるようになります。

お役に立てれば。

于 2013-11-12T09:07:31.713 に答える