[horde] import calendar events into kronolith - using xmlRPC?

Michael J Rubinsky mrubinsk at horde.org
Thu Jan 21 16:47:01 UTC 2016


Quoting Daniel <horde at daniu.de>:

> 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?

Use the calendar.deleteCalendar method.

> *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 ...


Correct, you can only import one VEVENT at a time.

I'm confused by your statement about a timeout. A single event will  
import faster than a large calendar. You are likely to get server  
timeouts importing the full calendar at once.

> 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
>
> -- 
> Horde mailing list
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: horde-unsubscribe at lists.horde.org



-- 
mike
The Horde Project
http://www.horde.org
https://www.facebook.com/hordeproject
https://www.twitter.com/hordeproject
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5751 bytes
Desc: S/MIME Signature
URL: <http://lists.horde.org/archives/horde/attachments/20160121/483d5fd5/attachment.bin>


More information about the horde mailing list