[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