Avatar billede jtc Novice
30. maj 2016 - 19:04 Der er 29 kommentarer og
1 løsning

Hvordan kommer man igang med Google Calendar API

Jeg vil gerne lave min egen side-by-side visning af flere google kalendre.

Så vidt jeg kan læse mig til kan jeg bruge Google Calender API hertil
https://developers.google.com/google-apps/calendar/quickstart/php

Jeg har gjort det med en tidligere version af deres API, men jeg på bar bund i forhold til hvordan jeg får sat en hjemmeside op til at kunne bruge Google Calender API.
Hvordan kommer jeg igang?

På forhånd tak for hjælpen
Avatar billede Slater Ekspert
01. juni 2016 - 08:04 #1
Har du fulgt den guide, du selv linker til?
Hvor langt er du nået og hvor går du i stå?
Avatar billede jtc Novice
01. juni 2016 - 08:54 #2
Jeg tænker det skal installeres på serveren hvor min hjemmeside ligger og det er her jeg er på bar bund. Hvordan gør jeg det, når jeg kun har adgang til en ftpadresse hvor min side ligger?
Avatar billede Slater Ekspert
01. juni 2016 - 09:08 #3
Det eneste der skal være installeret på serveren er PHP 5.3.2 eller højere. De skriver godt nok også at JSON-extension skal være installeret, men det passer ikke, for den har været en indbygget del af PHP siden version 5.2.0.

Composer, derimod, behøver du kun installere og benytte på din udviklingsmaskine. Derefter kan du overføre hele /vendor mappen til serveren via FTP, når du har skrevet koden og hentet de pakker der skal bruges lokalt.
Avatar billede jtc Novice
01. juni 2016 - 19:12 #4
Når jeg starter installationen af Composer skal jeg som noget af det første vælge:
"Choose the command-line PHP you want to use"
Hvad skal jeg vælge her?
Avatar billede Slater Ekspert
01. juni 2016 - 19:50 #5
Der skal du finde din php.exe

Jeg går ud fra, du har en webserver med PHP installeret lokalt - ellers skal du naturligvis gøre det først. Hvor programfilen ligger, kommer an på installationen af PHP.
Avatar billede jtc Novice
01. juni 2016 - 20:59 #6
Har du et link til en god guide til hvordan man installere php?
Skal jeg også installere Apache?
Avatar billede Slater Ekspert
02. juni 2016 - 08:53 #7
Ja, du skal installere en webserver for at kunne bruge PHP. Apache er det åbenlyse valg, men andre, f.eks. IIS, virker også.

Hvis du er på Windows, vil jeg anbefale dig at bruge noget som WampServer eller XAMPP (jeg bruger selv den første på min udviklermaskine), der sørger for at installere og sætte det hele op med en enkelt installer.

Men hvordan udvikler du normalt PHP, hvis du ikke har det? Direkte på serveren?
Avatar billede jtc Novice
02. juni 2016 - 09:32 #8
Tidligere har jeg bare skrevet php-koden og uploadet til serveren for at teste om den virkede. Det har fungeret fint.

http://www.wampserver.com/en/
Ser ikke ud til at virke lige nu så jeg prøver senere i dag
Avatar billede Slater Ekspert
02. juni 2016 - 10:05 #9
Den kan også hentes fra SourceForge her:
https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.0.0/wampserver3_x86_apache2.4.17_mysql5.7.9_php5.6.15.exe/download

- Bemærk jeg linker dig til 32-bit udgaven, da der tidligere har været en del problemer med 64-bit versionen. Jeg ved ikke om de er løst i den nyeste version, men dette virker i hvert fald fint på alle bit platforme.
Avatar billede jtc Novice
03. juni 2016 - 09:11 #10
Jeg fik nu installeret Wampserver

Men har et par problemer i forhold til guiden
https://developers.google.com/google-apps/calendar/quickstart/php#step_1_turn_on_the_api_name

step 1g: hvor er min working directory (kan det være hvor som helst)?

step 2: hvor skal jeg køre denne komando
Avatar billede Slater Ekspert
03. juni 2016 - 09:29 #11
Standard for WampServer er <installationsmappe for wamp>\www

Derinde vil du normalt have en undermappe for dit projekt. Så hvis du f.eks. har installeret WampServer i C:\wamp og dit projekt hedder TestProjekt, så vil det ligge i
C:\wamp\www\TestProjekt

Herinde skal du have din index.php og andre projektfiler, og for at køre Composer-kommandoer, skal du navigere dertil i en terminal af en eller anden art. Windows kommandoprompt (cmd) virker. Jeg foretrækker personligt en Linux-style terminal.

Så hvis vi stadig antager ovenstående (og Windows-stil terminalkommandoer), så vil du skrive:

cd C:\wamp\www\TestProjekt
php composer.phar require google/apiclient:1.*
Avatar billede jtc Novice
03. juni 2016 - 09:34 #12
Når jeg skriver den sidste linje
php composer.phar require google/apiclient:1.*
får jeg følgende besked:
Could not open input file: composer.phar

Er det en fil jeg skal oprette i mappen eller hvordan?
Jeg syntes ikke jeg kan finde den på min computer
Avatar billede Slater Ekspert
03. juni 2016 - 09:52 #13
Det kommer an på hvordan du har installeret Composer. Du kan downloade det som en .phar fil (php archive), som skal ligge i mappen du kører det fra. Eller du kan installere det globalt på systemet, hvilket nok er hvad du har gjort. I så fald skal du bare skrive
composer require google/apiclient:1.*

ikke php og ikke .phar.
Avatar billede jtc Novice
03. juni 2016 - 10:16 #14
Nu virker det i Windows kommandoprompt (cmd).
Men hvordan får jeg så scriptet til at virke på en hjemmeside?
Avatar billede Slater Ekspert
03. juni 2016 - 10:38 #15
Composer er en package manager. Den den gør er bare at hente forskellige scripts der skal bruges fra packagist.org, lægge dem i /vendor mappen og evt. opsætte autoloading så de hentede klasser kan bruges i din kode. Den gør ikke andet end det, og alle ændringer er i /vendor mappen.

Når du skal have det op på en server, og det virker lokalt, skal du bare flytte alle filerne, inklusiv /vendor-mappen op via FTP eller andet, så virker det også på serveren - forudsat at serverens indstillinger er korrekte ellers.
Avatar billede Slater Ekspert
03. juni 2016 - 10:54 #16
- Og hvis du mener hvordan du ser siden lokalt, så hvis WampServer ellers er online (grønt ikon i systray), så går du bare ind på http://localhost/TestProjekt (igen hvor TestProjekt er din undermappe med projektet i) i din foretrukne browser.
Avatar billede jtc Novice
03. juni 2016 - 11:23 #17
Prøvede mig frem på serveren som jeg plejer og fik koden til at virke.
Men jeg blev nød til også at uploade følgende 2 filer
calendar-php-quickstart.json
client_secret.json
Og hvis jeg læser her
https://developers.google.com/api-client-library/php/auth/web-app#creatingcred
bør jeg ikke uploade disse filer

Hvad kan jeg gøre for at undgå det?
Avatar billede Slater Ekspert
03. juni 2016 - 11:48 #18
Nej nej, der står at de ikke må være et offentligt tilgængeligt sted. Dvs. folk må ikke kunne skrive ditdomæne.dk/client_secret.json og få indholdet frem i deres browser, for den indeholder ting kun du må se. Derfor skal du også passe på med at versionere filen, hvis du bruger f.eks. Git og et offentlig repo.

Men den skal uploades.

Der er flere måder at sikre sådan fil på, så den ikke kan tilgås offentligt. Den bedste er at smide den på et højere niveau end din public mappe på serveren. Hvis f.eks. din index.php skal lægges i en mappe som /html eller /public_html, som er nogle af de mest almindelige, så kan du lægge client_secret.json uden for den mappe, og så linke til den med "../client_secret.json" - hvis ellers klassen understøtter det.

Desværre er der mange webhosts der ikke giver muligheden for at lægge ting uden for public mappen, så et alternativ er at lukke for adgang via .htaccess, hvis det er en Apache server. Du kan f.eks. tilføje:
<Files ./client_secret.json>
    Order Allow,Deny
    Deny from all
</Files>
til din .htaccess fil, så har udefrakommende ikke adgang til den. Men det er en lidt dårligere løsning, fordi beskyttelsen kan forsvinde, f.eks. hvis du engang kommer til at slette din .htaccess eller lave ændringer i den, eller hvis serveradministratoren fjerner et mod fra Apache.
Avatar billede jtc Novice
03. juni 2016 - 12:19 #19
Ok, men hvilken webhost vil du så anbefale, hvor det er muligt at lægge en fil på et højere niveau end public mappen på serveren?
Avatar billede Slater Ekspert
03. juni 2016 - 12:45 #20
Jeg tror sådan set de fleste webhosts i dag giver muligheden. Min egen side, amunium.dk, som jeg ikke rigtig bruger til noget, ligger hos domaindirect.dk. De har muligheden, der ligger webfilerne i mappen /httpdocs

Normalt ville jeg dog bare leje en VPS fra f.eks. DigitalOcean og selv installere webserver osv. på. Så har man fuld kontrol over alting, men det kræver naturligvis lidt viden at sætte den op.
Avatar billede jtc Novice
06. juni 2016 - 14:22 #21
Nu fik jeg oprettet mig ved domaindeirect.dk

Men hvordan linker jeg så til filen i den "skjulte" mappe?
Før brugte jeg
define('CLIENT_SECRET_PATH', __DIR__ . '/credentials/client_secret.json');

Hvad gør jeg nu hvor denne undermappe ikke er i mappen htdocs men på samme niveau som htdocs?
Avatar billede Slater Ekspert
06. juni 2016 - 14:36 #22
Hvis ellers klassen understøtter det, og indstillingerne for serveren tillader includes fra et højere niveau (og det gør min side på domaindirect, jeg har testet), så er det bare

__DIR__ . '/../clients_secret.json'
Avatar billede Slater Ekspert
06. juni 2016 - 14:36 #23
Hov, der var et "s" for meget i filnavnet.
Avatar billede jtc Novice
06. juni 2016 - 14:58 #24
Men __DIR__  er stien der inkludere httpdocs.
Jeg vil jo gerne et niveau op for at man ikke kan læse filen direkte på nettet
Avatar billede Slater Ekspert
06. juni 2016 - 15:06 #25
Det er derfor der er "../" med. Det betyder "gå et niveau op".

PHP er klog nok til at forstå, at "mappe/undermappe/../fil" betyder "mappe/fil".
Avatar billede jtc Novice
07. juni 2016 - 19:31 #26
Super, det virker.

Men hvordan kan jeg så tjekke om en event er heldags eller ej?

Jeg tænkte det var noget i denne stil
$dayEvent = $event->isEndTimeUnspecified();
Men det virker ikke.
Avatar billede Slater Ekspert
07. juni 2016 - 21:21 #27
Så vidt jeg lige kan læse mig til, er $event->start->dateTime tom hvis det er heldags, og datoen fås i stedet i $event->start->date.
Avatar billede jtc Novice
07. juni 2016 - 22:10 #28
Tak det hjalp, men hvor læser du det?
Jeg syntes jeg har svært ved at finde dokumentationen
Avatar billede Slater Ekspert
08. juni 2016 - 08:44 #29
Jeg synes heller ikke deres beskrivelser er sindssygt gode, men jeg fandt det her:
https://developers.google.com/google-apps/calendar/v3/reference/events#resource-representations
Avatar billede jtc Novice
27. juli 2016 - 10:47 #30
@Slater - Mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester