2021-11-30

Google Drive API:Requested entity was not found のエラーが出た時に考えること

 Androidアプリの開発で、ある特定のGoogleドライブ内のファイルを操作する(読み書きする)プログラムを実行すると、表題のように

  • Requested entity was not found
というエラーが出ることがあります。IDは間違っていません。これが意味することは何でしょうか?

認証スコープの設定を確認
Androidアプリ側から(今回の場合は、Flutter)SpreadSheetやDriveのファイルを操作するには認証とスコープの設定が必要になりますが、問題はこのスコープです。

[スコープ:https://www.googleapis.com/auth/drive.file]の意味
これは、このアプリで開いた、または作成したGoogleドライブのファイルとフォルダを表示および管理できます。言い換えると、Google Drive内にある既存のファイルを操作することはできません。表題のようなエラーは、このスコープの制限にひっかかった時に出てきますのでわかりにくいです。

フルアクセス[ https://www.googleapis.com/auth/drive]の意味
フルアクセスにすれば、上記のエラーはでませんが、Googleの認証を受けていない状態であれは、Warningメッセージがクライアントに出ることになります。



2021-11-22

はじめてのPySimpleGUIコード

とりあえずテンプレ的なサンプルコードをアップします。ポイントは以下の通り。

1.GUIウィジェットを先に宣言しとく。宣言しなくてもレイアウトに直接ぶっ込むこともできますが、それはちょっとスマートではないので。。。(個人的見解)

2.ウィジェットのレイアウトはリストで並べる(ここがPySimpleGUIのキモとも言える)。サンプルのように書くことで、並ばせかたを行列のイメージで配置できる。もちろん、frameやcolなどのオブジェクトを利用することでもう少し凝ったこともできるが、この記事では範囲外とする。

3.ウィンドウ表示ループは関数化しておく。下記のshow_window関数がそれに該当する。ここでメインウィンドウを生成して、無限ループでイベントを待つ(read関数)。

4.イベントの種類や、それに付随する情報がread関数の引数で送られてくる。ここで、ウィンドを閉じた時はイベントを抜けて終了するように書いておかないと、後でいろいろ厄介。この記述は必須のテンプレと思われる。

5.本サンプルは、ボタンクリックイベントに対応した記述をしているが、ボタンクリックイベントの識別は、ボタンのラベル名が対応しているらしい。これが嫌な場合は、key属性を使うとよい感じ。