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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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

1回答

2936閲覧

phpからスプレッドシートに記述する方法

oira_

総合スコア1

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クリップ

投稿2020/07/13 12:57

編集2020/07/13 13:42

前提・実現したいこと

現在phpを用いて非常に簡易な顧客管理システムを作成しています。
ユーザーが入力した名前などの情報をphpからスプレッドシートに記述していきたいと考えています。

多くの方がこの方法について記事を書いているのですがどうしてもうまくいきません。

発生している問題・エラーメッセージ

GoogleSheetsAPISample Google_Client Google_Service_Sheets などのインスタンスに赤波線がひかれてしまい、ローカル環境上でファイルを開こうとすると、このページは動作していませんと 表示されます。

エラーメッセージは
Undefined type 'Dotenv\Dotenv'.
Undefined constant 'dir'.
Undefined type 'Google_Client'.
Undefined type 'Google_Service_Sheets'.
Undefined type 'Google_Service_Sheets'.
Undefined type 'Google_Service_Sheets_ValueRange'.
となっています。

該当のソースコード

ソースコード require __DIR__ . '/autoload.php'; use Dotenv\Dotenv; /** * Class GoogleSheetsAPISample */ class GoogleSheetsAPISample { /** * @var Google_Service_Sheets */ protected $service; /** * @var array|false|string */ protected $spreadsheetId; /** * GoogleSheetsAPISample constructor. */ public function __construct() { $dotenv = new Dotenv(__dir__); $dotenv->load(); $credentialsPath = getenv('SERVICE_KEY_JSON'); putenv('GOOGLE_APPLICATION_CREDENTIALS=' . dirname(__FILE__) . '/' . $credentialsPath); $this->spreadsheetId = getenv('SPREADSHEET_ID›'); $client = new Google_Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Google_Service_Sheets::SPREADSHEETS); $client->setApplicationName('test'); $this->service = new Google_Service_Sheets($client); } /** * @param string $date * @param string $name * @param string $comment */ public function append(string $date, string $name, string $comment) { $value = new Google_Service_Sheets_ValueRange(); $value->setValues([ 'values' => [ $date, $name, $comment ] ]); $response = $this->service->spreadsheets_values->append($this->spreadsheetId, 'シート1!A1', $value, [ 'valueInputOption' => 'USER_ENTERED' ] ); var_dump($response); } } $sample = new GoogleSheetsAPISample; $date = date('Y/m/d'); $name = '山川のりを'; $comment = 'ギターうまい'; $sample->append($date, $name, $comment); ?>

試したこと

何度かcomposerでvender がインストールできているのか確認しました。
できているはずです。

補足情報(FW/ツールのバージョンなど)

VScodeをつかっています。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/07/13 13:11

DB としてのスプレッドシートは貧弱です。 スプレッドシートを要件の背景は何でしょうか?
oira_

2020/07/13 13:21

ご指摘いただきありがとうございます。 現在phpの基礎学習をしていまして、その一環で自分の高校の食堂のwebサイト予約を導入しようとしています。作りは非常にシンプルで、名前を入力してもらい、定食を選択してもらい、確定ボタンを押すと予約が完了する。そしてスプレッドシートに名前、商品名、時刻が記述されるというものにしたいです。 まずはとても小規模で試験的に導入するつもりなので、スプレッドシートで十分だと考えました。このスプレッドシートに記述されるという機能意外は既に完成しているので、Google sheets APIの利用方法さえわかれば…という段階です。
退会済みユーザー

退会済みユーザー

2020/07/13 13:29

興味本位の質問が先行してしまいました^^; 使用しているエディタと、文法チェックの仕組み、その設定内容を記述してください。 もしくは、赤線の入った部分に表示されるエラー(?)内容の記述だけでも回答可能かもしれません。
oira_

2020/07/13 13:38

返信ありがとうございます。 vs codeを使用しており、 エラーは Undefined type 'Dotenv\Dotenv'. Undefined constant '__dir__'. Undefined type 'Google_Client'. Undefined type 'Google_Service_Sheets'. Undefined type 'Google_Service_Sheets'. Undefined type 'Google_Service_Sheets_ValueRange'. となっています。 本当に助かります。是非解決の方おねがいします。
退会済みユーザー

退会済みユーザー

2020/07/13 13:40

質問に追記してください。 (エディタは記述ありましたね。失礼)
oira_

2020/07/13 13:42

いえいえ、これでよろしいでしょうか?
kai0310

2020/07/13 15:08

> 高校の食堂のwebサイト予約... 完全に余談ですが私も同じ高校生で似た様なプログラムを作っていますが、DBにはMySQLを使っています。(要件にもよりますので他の言語でも可能な状況にはしています) というのもスプレッドシートの場合ですとなかなか`取得する`という機能が難しくなるかと、、 そもそもユーザーが任意で名前を入力するというのはシステム的にどうなのでしょうか?他人が勝手に入力してしまう可能性もあります。そこで当方ではログインシステムを実装しています。ログインシステムでDBをスプレッドシートにするのはなかなか難しいかと思います。
kai0310

2020/07/13 15:11

本題ですがuse演算子を使う必要はありますか?
oira_

2020/07/13 15:20

返信ありがとうございます。 余談についてですが、非常に嬉しいと言いますか、同じことに取り組んでいる方がいるなんてなんだか励みになります。(私と比べると完全に上の次元で作業されているようですが…) use演算子を使う必要はございません。
kai0310

2020/07/13 15:25

> 余談についてですが、非常に嬉しいと言いますか、同じことに取り組んでいる方がいるなんてなんだか励みになります。(私と比べると完全に上の次元で作業されているようですが…) 私の場合は商品を注文するところまでを要件に入れています。 > use演算子を使う必要はございません。 でしたら下記エラーメッセージの原因にもなってしまいますので削除さてた方が良いかとは思います。 Undefined type 'Dotenv\Dotenv'.
oira_

2020/07/13 15:34

削除しました。 私の方でも商品の注文まで要件に入れております。そちらはユーザーが自分で入力する形ではなく、baseなどのように商品の写真が並んでおり、商品をタップすることで、注文画面まで遷移します。 >そもそもユーザーが任意で名前を入力するというのはシステム的にどうなのでしょうか?他人が勝手に入力してしまう可能性もあります。そこで当方ではログインシステムを実装しています。ログインシステムでDBをスプレッドシートにするのはなかなか難しいかと思います こちらに関してはいずれ導入したいと考えていますが、生徒間の使用を目的としておらず、教職員の方の間での非常に限定的なものを考えていますので、そこまでセキュリティー等に注力する必要はございません。(最終的には生徒間での利用も目指したいため参考にさせていただきます。) use演算子を削除いたしました。依然としてページが表示されませんが、なにか可能性は考えられるでしょうか?
kai0310

2020/07/13 15:37

HTTP ERROR 500と表示されてしまうのであればそれはまた別の質問かと思います。
oira_

2020/07/13 15:39

一応質問に貼ってあるソースコードの部分のみを削除した場合には通常通りにページが表示されます。
kai0310

2020/07/13 15:51

これだけでは手元で確認出来ていないので該当するコードが提示できますか?
oira_

2020/07/13 22:28

require __DIR__ . '/autoload.php'; use Dotenv\Dotenv; /** * Class GoogleSheetsAPISample */ class GoogleSheetsAPISample { /** * @var Google_Service_Sheets */ protected $service; /** * @var array|false|string */ protected $spreadsheetId; /** * GoogleSheetsAPISample constructor. */ public function __construct() { $dotenv = new Dotenv(__dir__); $dotenv->load(); $credentialsPath = getenv('SERVICE_KEY_JSON'); putenv('GOOGLE_APPLICATION_CREDENTIALS=' . dirname(__FILE__) . '/' . $credentialsPath); $this->spreadsheetId = getenv('SPREADSHEET_ID›'); $client = new Google_Client(); $client->useApplicationDefaultCredentials(); $client->addScope(Google_Service_Sheets::SPREADSHEETS); $client->setApplicationName('test'); $this->service = new Google_Service_Sheets($client); } /** * @param string $date * @param string $name * @param string $comment */ public function append(string $date, string $name, string $comment) { $value = new Google_Service_Sheets_ValueRange(); $value->setValues([ 'values' => [ $date, $name, $comment ] ]); $response = $this->service->spreadsheets_values->append($this->spreadsheetId, 'シート1!A1', $value, [ 'valueInputOption' => 'USER_ENTERED' ] ); var_dump($response); } } $sample = new GoogleSheetsAPISample; $date = date('Y/m/d'); $name = '山川のりを'; $comment = 'ギターうまい'; $sample->append($date, $name, $comment); ?>
kai0310

2020/07/26 12:06

質問本文に追記してください
kai0310

2020/07/26 12:13 編集

ライブラリ等に依存した問題なのか、PHPの問題なのか。どちらの問題なのでしょうか? そこをまず判断できないようであればPHPの基礎的な部分やPHPの理解が少ないということにも繋がってくるかと思います。スプレッドシートでなくてもいいので単に配列・もしくはテキストファイルに保存するとしてこれらを再現できますでしょうか?できないのであればまずはそこからかと。
guest

回答1

0

多分、「VSCode拡張機能Intelephenseの更新によるUndefined type 'Route'(他クラス)のエラー」あたりが引っかかっているんだと思います。

ただ、本質的なエラーではなく、エディタの出す警告なので無視してしまっても良いですが、気持ち悪ければ設定をいじってください。

英語の情報:
Visual Studio Code PHP Intelephense Keep Showing Not Necessary Error

ちなみに手元で確かめてないので、かなり無責任な回答です。ご注意を

投稿2020/07/13 13:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

oira_

2020/07/13 13:58

回答ありがとうございます。 設定の方を変更し、エラーは取り除いたのですが、再度ローカル環境でファイルを確認したところ、 このページは動作していませんlocalhost では現在このリクエストを処理できません。 HTTP ERROR 500 と表示されてしまいます。
退会済みユーザー

退会済みユーザー

2020/07/13 14:05

それはまた全然別の問題です。 この方向性ですすめるのであれば、使用しているライブラリ等の情報を追加して、新たな質問を立ててください。 ただ、ちょっと基礎学習が足りていないように思います。 ちゃんと体系的な学習をしたほうが良いですよ。
oira_

2020/07/13 14:33

すいません。勉強不足です。回答していただきありがとうございました。再度質問の内容を練り直して、立て直したいとおもいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問