[PHP/ZEND] Google Calendar XML

Pagina: 1
Acties:
  • 459 views sinds 30-01-2008
  • Reageer

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
Ik heb met behulp van de zend framework een simpel PHP-scriptje gemaakt waarmee ik items tussen een bepaalde datum uit mijn Google Calendar kalender kan halen. Dit gebeurt d.m.v. een private XML bestand welke uniek geidentificeerd wordt door een key in de URL. So far so good.

Ik heb in mijn gmail-account twee kalenders, eentje voor mijzelf en eentje die ik deel met mijn vriendin, zodat we beide van elkaar op de hoogte zijn :) Erg handig moet ik jullie bekennen! Maar nu het probleem. Mijn eigen XML kan ik prima benaderen met m'n script. De key die daarvoor nodig is haal ik uit de settings van Google Calendar.

Maar mijn tweede xml, die van mijn tweede kalender, die werkt niet! Beide kalenders vallen onder hetzelfde emailadres. Ik krijg de volgende foutmelding als ik het script probeer te starten:

code:
1
2
3
4
5
6
7
8
9
Fatal error: Uncaught exception 'Zend_Feed_Exception' with message 'Feed failed to load, got
response code 404' in D:\Webserver\intranet\gdata\library\Zend\Feed.php:177 Stack trace: #0 
D:\Webserver\intranet\gdata\library\Zend\Gdata.php(121): Zend_Feed::import('http://www.goog...') #1 
D:\Webserver\intranet\gdata\library\Zend\Gdata\Calendar.php(95): 
Zend_Gdata->getFeed('http://www.goog...') #2 D:\Webserver\intranet\gdata\index.php(25): 
Zend_Gdata_Calendar->getCalendarFeed() #3 D:\Webserver\intranet\gdata\index.php(43): 
outputCalendarByDateRange(Object(Zend_Http_Client), '2007-06-14', '2007-06-22', 
'private-BLABLABLA...') #4 {main} thrown in D:\Webserver\intranet\gdata\library\Zend\Feed.php on 
line 177

Erg vreemd toch, aangezien het bij mijn andere kalender prima werkt! Ik zie geen opties in Google Calendar om de XML te 'activeren' ofzo (dit hoefde bij m'n andere kalender ook niet)

Wat doe ik verkeerd?

Ziehier m'n script: (Zend is dus vereist)

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
$D = DIRECTORY_SEPARATOR;
set_include_path(
    dirname(__FILE__) . "{$D}library"
    . PATH_SEPARATOR . get_include_path());

require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Feed_EntryAtom');
Zend_Loader::loadClass('Zend_Http_Client');

function outputCalendarByDateRange($client, $startDate, $endDate, $key) 
{
  $gdataCal = new Zend_Gdata_Calendar($client);
  $gdataCal->setUser('blablablalba@gmail.com');
  $gdataCal->setVisibility($key);
  $gdataCal->setProjection('full');
  $gdataCal->setOrderby('starttime');
  $gdataCal->sortorder = "ascending";
  $gdataCal->setStartMin($startDate);
  $gdataCal->setStartMax($endDate);
  $eventFeed = $gdataCal->getCalendarFeed();

  foreach ($eventFeed as $event)
    echo("<li>".$event->title()."</ul>");
}

// Calendar: smeerbartje
//$startDate  = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")  , date("Y")));
//$endDate    = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")+8, date("Y")));
//$key        = "private-blablablablaKEYVOORNORMALEKALENDERblabla";
//$client     = new Zend_Http_Client();
//echo("<ul".outputCalendarByDateRange($client, $startDate, $endDate, $key)."</ul>");

// Calendar: gedeeld
$startDate  = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")  , date("Y")));
$endDate    = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d")+8, date("Y")));
$key        = "private-blablablablaKETVOORTWEEDEKALENDERblablabla";
$client     = new Zend_Http_Client();
echo("<ul".outputCalendarByDateRange($client, $startDate, $endDate, $key)."</ul>");


UPDATE
Ik heb zojuist een nieuwe key aangevraagd voor mijn goed-werkende kalender. De oude key gaf dezelfde foutmelding als mijn tweede kalender altijd geeft. Na aanvraag van een nieuwe key voor mijn eigen kalender werkt het script dus wel! Echt supervaag! Heb ik nu een bug in Google Calendar gevonden o.i.d.?

[ Voor 4% gewijzigd door smeerbartje op 14-06-2007 22:51 . Reden: Typo ]


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
Niemand die het antwoord weet? Ik ben er zojuist achtergekomen dat de URL naar de XML van mijn tweede calender gewoon een normale, valid XML pagina is. Het probleem ligt dus in de ZEND-parser. Toch vreemd dat deze wel werkt voor mijn ene kalender en niet voor m'n andere!

Verwijderd

Ik kan me vergissen, maar is het niet zo dat je in google calendar moet instellen
welke kalenders 'extern' bezocht mogen worden en welke niet ?

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
Ikzelf kan het niet vinden. Als je het ZEND framework gebruikt in combinatie met https-authenticatie, dan moet je inderdaad de host van je eigen script 'granten' om toegang te krijgen. Dit hoeft niet met de private XML voor zover ik weet. Als ik de private XML in m'n browser plak, dan krijg ik ook netjes een XML tree te zien.

Het probleem ligt denk ik dus in het ZEND framework. Echter ik kan me niet voorstellen wat er verkeerd gaat; enkel de key van de verschillende calendars is veranderd en beide calendars kan ik gewoon openen in de browser. Pas op het moment dat de parser ze moet gaan parsen gaat het mis.

  • bulle bas
  • Registratie: Juli 2006
  • Niet online
PHP:
1
echo("<li>".$event->title()."</ul>");

Dit vormt wellicht onderdeel van het probleem.

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
bulle bas schreef op zaterdag 16 juni 2007 @ 12:08:
PHP:
1
echo("<li>".$event->title()."</ul>");

Dit vormt wellicht onderdeel van het probleem.
Waarom? Bij mijn eerste calendar (als ik die regels un-comment en de onderste regels comment) werkt het wel en drukt hij netjes alle events af. Waarom zou de fout daar liggen denk je?

  • N0 0B
  • Registratie: Mei 2004
  • Laatst online: 22:19

N0 0B

cxb1=N#

waarschijnlijk omdat je begint met een li element en eindigt met een ul element. ik weet niet of dit de oorzaak is.

Won't you break the beats, cause I'm hardcore - Tiga


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
N0 0B schreef op zaterdag 16 juni 2007 @ 12:38:
waarschijnlijk omdat je begint met een li element en eindigt met een ul element. ik weet niet of dit de oorzaak is.
Oh, ghehe.. sorry.... typefoutje van mij. Heb ik inmiddels veranderd. Dit was niet de oorzaak, helaas.
Pagina: 1