[horde] import calendar events into kronolith - using xmlRPC?
Daniel
horde at daniu.de
Thu Jan 21 17:47:04 UTC 2016
Hi,
Quoting Michael J Rubinsky <mrubinsk at horde.org>:
> 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.
I guess that should delete the calendar, not purge it? However I can't
get that one to work ...
***
$request = 'calendar.deleteCalendar';
$params = array('calendar-id');
$response = do_call($host, $request, $params);
echo $response;
***
gives me:
{"version":"1.1","error":{"name":"JSONRPCError","code":999,"message":{"details":null,"logged":false}}}
>> *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 ...
just for reference:
I was wrong - just as my string was - there was 1 BEGIN:VEVENT
missing. Adding that missing part, I can import many events at once.
concerning timeout: I was refering to timeout of my php script, not
the connection to the server within the php script. I guess it is
faster if I send all events as 1 string than sending each event with a
seperate call.
I guess I'm going to see how long it takes and in case of a problem
break the string in parts. Since I don't need the ids afterwards
should be OK like that.
regards
More information about the horde
mailing list