[horde] import calendar events into kronolith - using xmlRPC?
Daniel
horde at daniu.de
Thu Jan 21 16:30:48 UTC 2016
Zitat von Michael J Rubinsky <mrubinsk at horde.org>:
> Quoting Michael J Rubinsky <mrubinsk at horde.org>:
>
>> Quoting Jan Schneider <jan at horde.org>:
>>
>>> Zitat von Daniel <horde at daniu.de>:
>>>
>>>> Hi,
>>>>
>>>> I am new to the list - hope my request is in the right place here:
>>>>
>>>> My final goal is to get a calendar from google into kronolith.
>>>> Unfortunately my provider did not setup kronolith so that I can
>>>> do that with kronolith itsself so I think of a cron-job that does
>>>> that with a php script (I am not talking about syncing - just
>>>> copying the google calendar to kronolith. Since the google
>>>> calendar itsself gets populated with a cron-job itsself it's ok
>>>> to have accurate data only after copying). I can already read all
>>>> appointments from google (caldav still works) - so I got a string
>>>> with Vevent infos. The plan is to purge the existing calendar in
>>>> kronolith and write all events from the string into the existing
>>>> calendar.
>>>>
>>>> I tried to adjust this: http://theupstairsroom.com/66 but don't
>>>> seem to get it working at all. Partly because I don't have access
>>>> to horde sources on the server from which I connect to the Horde
>>>> - so I need to use another RPC-client. I would like to use the
>>>> RPC-client built in php (epinion.com) which is turned on
>>>> according to phpinfo. Somehow I cannot really find a good
>>>> tutorial how to do that.
>>>>
>>>> Adjusting a script from php.net gave me the attached attempt.
>>>> That one does nothing unfortunately ... (but at least no error
>>>> message)
>>>>
>>>> Can someone point me in the right direction? Or is there a
>>>> simpler way to achieve what I want to do?
>>>>
>>>> Is https a problem for what I want to do? Are my adjustments for
>>>> that correct?
>>>>
>>>> Looking at the api it seems like the purge function from import
>>>> in the GUI did not make it in there ... any chance to still do it
>>>> or get it in the api?
>>>>
>>>> Thanks for any input!
>>>>
>>>> (BTW: there is a sourceforge project with exactly that topic, but
>>>> it does not work any more and the author did not maintain it - I
>>>> even asked him and he says he cannot help -
>>>> http://sourceforge.net/projects/kron2gcalsync/)
>>>>
>>>> ***
>>>> function do_call($host, $port, $request) {
>>>>
>>>> $url = "https://$host:$port/";
>>>> //echo $url;
>>>> $header[] = "Content-type: text/xml";
>>>> $header[] = "Content-length: ".strlen($request);
>>>> $to['user']='username';
>>>> $to['pass']='password';
>>>> $userpwd = $to['user'] .":". $to['pass'];
>>>>
>>>>
>>>> $ch = curl_init();
>>>> curl_setopt($ch, CURLOPT_URL, $url);
>>>> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
>>>> curl_setopt($ch, CURLOPT_TIMEOUT, 1);
>>>> curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
>>>> curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
>>>> curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
>>>> curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
>>>> curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
>>>>
>>>> $data = curl_exec($ch);
>>>> if (curl_errno($ch)) {
>>>> print curl_error($ch);
>>>> } else {
>>>> curl_close($ch);
>>>> return $data;
>>>> }
>>>> }
>>>>
>>>> $host="path/rpc.php";
>>>> $port=443;
>>>> $request = xmlrpc_encode_request('kronolith.listCalendars', array());
>>>> $response = do_call($host, $port, $request);
>>>> echo $response;
>>>> ***
>>>>
>>>> regards
>>>>
>>>> --
>>>> Horde mailing list
>>>> Frequently Asked Questions: http://horde.org/faq/
>>>> To unsubscribe, mail: horde-unsubscribe at lists.horde.org
>>>
>>> You want to use the kronolith-import-icals script that comes with
>>> Kronolith.
>>
>> This is correct, if you have shell access. If you don't, you should
>> probably change to JSON as Jan suggests below. In newer versions of
>> Horde we no longer support xmlrpc.
>>
>> Also:
>> 1) Don't set the port number in CURL when you use https:// already
>> in the URL.
>> 2) The proper method name would be "calendar.listCalendars", not
>> "kronolith.listCalendars".
>>
>> So, for example (this is VERY rough and quickly done, so you might
>> need to tweak some things):
>>
>>
>> function do_call($host, $method, $params) {
>> $url = "https://$host";
>> $header[] = "Content-type: application/json";
>> $data = array('version' => '1.1', 'method' => $request);
>
> Sorry, this line should be (substitute $method for $request):
> $data = array('version' => '1.1', 'method' => $method);
sure - I found that ... works great! THANKS a lot!
So now how about the other things:
*do I need to delete all events manually or may I beg for a purge to
be implemented in the api?
*Can I import the events with the api yet?
I tried that one - (function and host omitted)
***
$request = 'calendar.import';
$input = <<<EOF
BEGIN:VEVENT
UID:20160901T130000Z-123401 at host.com
DTSTAMP:20160110T1300Z
DTSTART:20160110T163000Z
DTEND:20160110T190000Z
SUMMARY:Test1
END:VEVENT
UID:20160902T130000Z-123401 at host.com
DTSTAMP:20160111T1300Z
DTSTART:20160111T163000Z
DTEND:20160111T190000Z
SUMMARY:Test2
END:VEVENT
EOF;
$params = array($input,'text/calendar','calendar-id');
$response = do_call($host, $request, $params);
echo $response;
***
which imported just the first event ... any chance to make it import
many events with one call? I am afraid that I get a timeout for the
script otherwise ...
I'd love to see a function like this:
public function import_many($content, $contentType, $calendar = null,
$purge = FALSE)
while it won't help me since my provider would not update Horde just
for me ...
regards
More information about the horde
mailing list