質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1557閲覧

[php] Google Calendar APIで例外をスローできない

G_chan

総合スコア17

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/01/29 03:57

編集2019/01/29 04:08

お世話になっております。
定年退職を期に開発を始めました。

言い回しや間違った点がありましたら指摘していただけますと幸いです。

例題の件ですが、phpのプログラムからCalendarAPIに接続し、スケジュールの登録と変更を行いたいです。

現状できていることは、スケジュールの登録、イベントidの取得、取得したイベントidのイベントの変更です。

やりたいことは、登録する際にすでに登録するイベントidがあるかどうかを調べるためイベントidを引数にとしてイベントを取得します。すでにイベントがある(空でないイベントが取得できた)場合はイベントの開催時間を変更(update)する。
イベントがない(空のイベントを取得)した場合は登録(insert)する。

発生している問題は、後者のイベントが登録されていない場合、存在しないイベントを取得しようとするのでエラーが発生するのですが、その例外をスローできておらずFatal errorが発生しております。

↓イベントを取得するプログラム

php

1 2<?php 3date_default_timezone_set('Asia/Tokyo'); 4require_once __DIR__.'/google-api-php-client/vendor/autoload.php' ; 5$json_path = __DIR__.'/google-api-php-client/key/*****.json'; 6$calendarId='******'; 7 8//接続用のクライアントの設定. 9$scopes = "https://www.googleapis.com/auth/calendar.events"; 10$client = new Google_Client(); 11$client->setApplicationName("********"); 12$client->setAuthConfig($json_path); 13$client->setScopes($scopes); 14if ($client->isAccessTokenExpired()) { 15 $client->refreshTokenWithAssertion(); 16} 17$service = new Google_Service_Calendar($client); 18 19//イベント取得 20$eventId = 20180129; 21$result = $service->events->get($calendarId, "eid"); 22 23?> 24 25

発生しているエラー↓

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found" } ], "code": 404, "message": "Not Found" } } ' in /ドメイン名/googlecalendar/google-api-php-client/src/Google/Http/REST.php:118 Stack trace: #0 /ドメイン名/googlecalendar/google-api-php-client/src/Google/Http/REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #1 [internal function]: Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #2 /ドメイン名/googlecalendar/google-api-php-client/src/Google/Task/Runner.php(176): call_user_func_array(Array, Array) #3 /ドメイン名/googlecalendar/google-api-php-client/src/Google/Http/REST.php(58): Google_Task_Runner->run() #4 /ドメイン名 in /ドメイン名/googlecalendar/google-api-php-client/src/Google/Http/REST.php on line 118

また、このプログラムはグーグルカレンダーにイベントを登録すると同時にDBにもイベント情報を登録していまうす。何らかのエラーでテーブルへの書き込みが中断されたらグーグルカレンダーもトランザクションするようなことは可能でしょうか。

拙い文章で申し訳ありませんがよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/01/29 04:00

もう少し全体の流れがわかるようなコード提示は可能でしょうか? パスワードなどがある箇所は適当に***などマスクかけてもらって構いません。
G_chan

2019/01/29 04:11

コメントありがとうございます。 全体の流れのコードを追記しました。
papinianus

2019/01/29 05:21

そのエラーだとパラメータが間違ってる可能性がありそうなんですが、もしそうだとここで回答を得るのは難しそうですね…
guest

回答2

0

何らかのエラーでテーブルへの書き込みが中断されたらグーグルカレンダーもトランザクションするようなことは可能でしょうか。

別サービス(別アプリと言ったほうがいいのですかね、一般に言うサービスではないです)、に対するトランザクションは、あまり用意されていませんので、自分でtry/catch/finallyで対応するしかないです。

投稿2019/01/29 05:17

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

G_chan

2019/01/31 12:37

回答ありがとうございます。 今回はその形で進めていくことにしました。 もっと勉強します。
guest

0

ベストアンサー

どこかでエラーとなっているのは間違いないので、try-catchでエラーをキャッチするように作ってみては?

※未検証:

php

1try{ 2 3 //接続用のクライアントの設定. 4 $scopes = "https://www.googleapis.com/auth/calendar.events"; 5 $client = new Google_Client(); 6 $client->setApplicationName("********"); 7 $client->setAuthConfig($json_path); 8 $client->setScopes($scopes); 9 if ($client->isAccessTokenExpired()) { 10 $client->refreshTokenWithAssertion(); 11 } 12 $service = new Google_Service_Calendar($client); 13 14 //イベント取得 15 $eventId = 20180129; 16 $result = $service->events->get($calendarId, "eid"); 17 18 19}catch (Google_Service_Exception $e) { 20 var_dump($e); 21} 22

投稿2019/01/29 04:16

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

G_chan

2019/01/31 11:53

try{ }catch (Google_Service_Exception $e) { } その通りでございます。 Google_Service_ExceptionでキャッチしないといけないところをExceptionとしておりました。 キャッチもできないわけです。 こんな初歩で詰んでしまうとは情けないです。 私はもっとphpの基礎について勉強しないといけないようです。 ご回答ありがとうございました。
m.ts10806

2019/01/31 21:46

始めて間もないのですよね?でしたら悲観することはないと思います。 ひとまずエラーメッセージをよく読むようにして、あとはデバッグを覚えると良いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問