PHP Synchronisatie Exchange <-> iCal, Google

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • RielN
  • Registratie: Juni 2006
  • Laatst online: 18-08 23:57
Beste webdesigners,

ikzelf zit al een poos met het probleem dat ik mijn calender niet kan synchroniseren. Ik gebruik bij voorkeur de google calender, mede omdat ik een Android telefoon heb.

Bij mijn opdrachtgever(s), gebruikt men vrijwel uitsluitend Exchange. Ik wil mijn exchange-calender syncrhoniseren met google. Dat gaat toch? Hoor ik iedereen. Jawel, het nadeel is dat ik zelf met Ubuntu werk, en de sync-programma' s synchroniseren uitsluitend met Outlook (en niet, over het net, met Exchange).

Enfin, ik ben toen zelf gaan denken en ik heb enige basiskennis van PHP. Wat goochelen met variabelen, doorspitten van tutorials, voorbeelden en trial and error, kom ik een eindje. Ik wil een PHP script schrijven welke:

1) Exchange calender ophaalt en de calenderdata in database zet
2) Google calender ophalen en de googlecalender in database zetten
3) De juiste verschillen en wijzigingen doorsturen naar:
4) Google
5) Exchange


2) en 4) is gedaan en bestaat gewoon.
3) lijkt mij geen ál te lastig script
5) nog niet helemaal zeker, afhankelijk van het Davmail programma (heb mail naar dev ervan)
1) mbv davmail werkend, vraag komt hier beneden.

Hebben er mensen interesse mee te kijken, of ook belang bij deze synchronisatie? Het fijne is dat dit op een externe server uitgevoerd wordt zodat de calenders altijd in Sync zijn.
Het bestaat nog niet. Althans, ik heb me ellendig gezocht. Zeker met het oog met migratie naar googledocs van veel partijen is dit soort applicatie sowieso interessant.


Wat ik heb is www.rielity.org/gcal/get.php, waar ik mijn exchangekalender af haal. Onderaan zie je dat ik al enkele waardes in een Array wil zetten zodat ik er mee kan werken.

Enige probleem waar ik tegeop loop:

de UID en vaak de summary beslaat meerdere regels. Een doorlopende regel begint in ical met een spatie. Deze regel moet áán de inhoud van de vorige geplakt worden, totdat er weer een regel zodner spatie begint. Ik heb dit zo half/half klaar maar loop een beejte vast.

Misschien heeft iemand een idee?
(ohja, en hard commentaar over onhandig programmeren mag van mij ;))

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<pre>
<?php
// Rielity 2010
// get contents from file or davmail
// hieronder de link naar server waar davmail exchange connector draait (spuugt ics)
# $information = file_get_contents('http://user:*****@rielity.org:1080/users/email@email/calendar/');

//voor snelheid even een lokaal bestand gebruikt
$information = file_get_contents('./ical/test.ics');
$add=0;
$cal=array();
$item_nr=0;
$lineadd=0;
$count=0;

   // Place each line of $information into array items
   $items = explode("\n",$information);
   $n_items = count($items);


 
for($item_nr=0;$item_nr<=$n_items;$item_nr++) {
        
    echo "$item<br>";

       // check for start of events
    $item=$items[$item_nr];
    


       if (strstr($item,"BEGIN:VEVENT")) { $add=1; $count++;  } //start adding items to array
       if (strstr($item,"END:VEVENT"))   { $add=0;  } //stop adding items to array


            
          /////////check if we have a space character at start of next line, if yes append to previous array
           
               if ($lineadd=1) {         //when lineadd = 1 , we detected a space (maybe turn aournd with line=='  ') ? Review
               $nextitem=$items[$item_nr+1];    
               $line=substr($nextitem, 0, 1);
         if ($line==' '){
                  $lineadd=1 ;
          $itemadd=str_replace(' ', '', $nextitem); 
          $item="$item$itemadd";
                  $item_nr++;
                                }
                                 else {      // no space in next line, no lineadd, so go on
                  $lineadd=0; 
                      }
        
             }

        if ($lineadd=0){ 
                 echo"$item -> $item_nr <br>"; }     // we can show our item now, all lines are glued togehter? (debug)

              //////////check done



       if ($add=="1") {
                                       // start adding items to array
            if(strstr($item,SUMMARY)) {$cal[$count][summary] = "$item";}
        if(strstr($item,UID))     {$cal[$count][uid] = "$item";}
        //if(strstr($item,SUMMARY)) {$cal[$count][summary] = "$item";}
        //if(strstr($item,SUMMARY)) {$cal[$count][summary] = "$item";}
        //if(strstr($item,SUMMARY)) {$cal[$count][summary] = "$item";}
        //if(strstr($item,SUMMARY)) {$cal[$count][summary] = "$item";}
    

    
        } 

if ( $item == "END:VCALENDAR") {
print_r($cal);
exit("Finished!");
      }
     }
?>
</pre>

Acties:
  • 0 Henk 'm!

Verwijderd

Linkje die erg handig kan zijn:
http://developer.apple.co...tions/icalendarfiles.html

edit: Zie dat het misschien niet helemaal is wat je nodig hebt...

[ Voor 24% gewijzigd door Verwijderd op 16-03-2010 18:53 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 19:46

MueR

Admin Tweakers Discord

is niet lief

Ik kieper hem over de schutting naar Programming

Waar hoort mijn topic?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • RielN
  • Registratie: Juni 2006
  • Laatst online: 18-08 23:57
Sorry :)

Thanx voor die link, daar zitten een paar bruikbare stukken in! Eens kijken hoe zij dat probleem tackelen?

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Voor Exchange bestaan sinds Exchange 2007 de Exchange Web Services... hiermee kun je op een programmatische manier toegang krijgen tot je hele mailbox. De meest recente versie van Entourage is ook hierop gebouwd.

EWS vind je normaalgesproken op de server waar ook Outlook Web Access draait, op een URL als https://mail.mijnwerkgev.er/EWS/Exchange.asmx. Voor Google Calendar bestaan eveneens API's, de documentatie staat op code.Google.com.

Hier kun je wellicht meer mee? Je bent dan i.i.g. niet afhankelijk van protocollen als DAV (wat toch geïnstalleerd moet zijn) want je gebruikt slechts standaardfunctionaliteit. :)

[ Voor 30% gewijzigd door Alex) op 17-03-2010 08:36 ]

We are shaping the future


Acties:
  • 0 Henk 'm!

  • 321X
  • Registratie: April 2009
  • Laatst online: 01-01-2023
Ik wens je succes met het synchroniseren via de Exchange Webservices i.c.m. PHP.

Zelf wilde ik ook via PHP Exchange contacten gaan synchroniseren, doormiddel van Exchange Webservices (vanaf Exchange 2007 inderdaad) en na een hoop gepiel en gepruts heb ik het opgegeven en maar een C# .Net Service geschreven die op de Exchange Server draait.

In mijn geval moeten er Contacten die we in een MySQL database hebben staan worden weggeschreven naar Exchange toe (Public Contacts Folder). Microsoft heeft daar een Managed API voor beschikbaar gesteld, en dat is met een reden een Managed API geworden!

Te veel ontwikkelaars die hadden moeite met de Webservices van Exchange. Ik was aan het ontwikkelen toen de Managed API er nog niet was en dat was inderdaad een geknoei (maar minder erg dan PHP).

Wat ik me kan herinneren waar ik moeite mee had in PHP waren volgens mij de Types van objecten die de webservices verwachten maar precies weet ik het niet meer. Het is een zwarte vlek :-)

Ik hoop dat je iets aan m'n informatie hebt. Succes en volg je thread graag!

321X


Acties:
  • 0 Henk 'm!

  • RielN
  • Registratie: Juni 2006
  • Laatst online: 18-08 23:57
Bedenk dat het mij vooral om mijn calender gaat! Contacten vind ik minder interessant.

Ik duik in ieder geval overal in, en laat hier wat weten. Maar hé, jullie zijn stukken verder dan mij hierin, ik probeer altijd bestaande eindjes aan elkaar te knopen. Ik kijk wel eens even naar die connector.

Acties:
  • 0 Henk 'm!

  • RielN
  • Registratie: Juni 2006
  • Laatst online: 18-08 23:57
Bedenk dat het mij vooral om mijn calender gaat! Contacten vind ik minder interessant.

Ik duik in ieder geval overal in, en laat hier wat weten. Maar hé, jullie zijn stukken verder dan mij hierin, ik probeer altijd bestaande eindjes aan elkaar te knopen. Ik kijk wel eens even naar die connector.

Maar: waarom zou ik zelf verbinden met exchange als ik dat al via davmail kan doen? De ldap directory zal net zo makkelijk zijn.


Ik kom zelf zover in het trekken van de exchangecalender, een en ander wat opgeschoond:

www.rielity.org/gcal/get2.php

[ Voor 13% gewijzigd door RielN op 18-03-2010 00:37 ]


Acties:
  • 0 Henk 'm!

  • 321X
  • Registratie: April 2009
  • Laatst online: 01-01-2023
Omdat WebDAV deprecated is en niet meer ondersteund wordt in 2010.

http://social.technet.mic...26-4d01-ada4-d1271b46fdfa

Zonde van de tijd die je er nu in gaat steken. De webservices zijn geintroduceert in Exchange 2007.

Het klopt dat het relatief eenvoudig werkt en begrijp dat je niet geïnteresseerd bent in de Contacts, maar het principe is het zelfde.

Alle(?) objecten met Exchange Webservices zijn Items en Folders, waarin onderscheid wordt gemaakt: ContactItem, CalendarItem etc.

321X

Pagina: 1