web-dev-qa-db-fra.com

L'API de Google Drive renvoie les erreurs "Valeur non valide" et "Requête non valide" lors de la demande de AppDataFolder

J'essayais de demander la liste de tous les fichiers situés dans le dossier AppDataFolder.

Quand je fais la demande suivante:

GET https://www.googleapis.com/drive/v2/files?spaces=appDataFolder&maxResults=1000 HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer <MyToken>
User-Agent: <MyUserAgent>

Je reçois l'erreur suivante:

HTTP/1.1 400 Bad Request
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Invalid query",
    "locationType": "parameter",
    "location": "q"
   }
  ],
  "code": 400,
  "message": "Invalid query"
 }
}

Pourquoi me demande-t-il une requête si je veux seulement obtenir la liste de tous les fichiers? Le paramètre "q" est-il obligatoire? J'ai pensé qu'il s'agissait d'une erreur dans mon code. J'ai donc téléchargé le dernier SDK Google Drive pour Python et obtenu la même erreur.

J'ai essayé d'ajouter le paramètre "q" comme q=title != 'foo', mais il a également renvoyé une erreur de requête non valide. La chose étrange est que je peux obtenir ma liste de fichiers si j'ajoute la requête suivante: q=title='<myfolder>' or title='<file1 in my folder>' or title='<file2 in my folder>'..., mais si je supprime title='<myfolder>', l'erreur de requête est à nouveau affichée.

J'ai aussi essayé une autre requête, mais elle m'a renvoyé une liste vide, bien que je sache qu'il existe des fichiers dans AppDataFolder:

GET https://www.googleapis.com/drive/v2/files?q='appfolder'+in+parents&access_token=<MyToken>

UPDATE: On dirait que ce problème est spécifique à un certain compte. J'ai testé toutes ces demandes avec un autre compte et tous les fichiers sont cachés dans appdatafolder. Les demandes qui fonctionnent:

https://www.googleapis.com/drive/v2/files?spaces=appDataFolder
https://www.googleapis.com/drive/v2/files?q='appDataFolder'+in+parents
https://www.googleapis.com/drive/v2/files?q='appfolder'+in+parents

Qu'est-ce qui ne va pas avec le premier compte?

UPDATE 2: Je ne peux plus récupérer la liste des fichiers appdata à partir d'autres comptes. On dirait que quelque chose se passe avec l'API.

9
Maxim

Le «dossier Application Data» est un dossier spécial uniquement accessible par votre application . Son contenu est masqué de l'utilisateur etd'autres applications. Bien qu'il soit caché à l'utilisateur, le dossier Application Data est stocké sur le lecteur de l'utilisateur et utilise donc le quota de stockage de ce dernier. Le dossier Application Data peut être utilisé pour stocker des fichiers de configuration, des données de jeux sauvegardées ou tout autre type de fichier avec lequel l'utilisateur ne devrait pas interagir directement.

Même si les utilisateurs ne peuvent pas voir le contenu du dossier Application Data, ils peuvent voir la quantité de stockage utilisée par le dossier Application Data de votre application dans la boîte de dialogue Gérer les applications.

Demande :

GET https://www.googleapis.com/drive/v3/files?q='appDataFolder'+in+parents&key={YOUR_API_KEY}

Respose:

{
 "kind": "drive#fileList",
 "incompleteSearch": false,
 "files": [
 ]
}

Tester avec Google Apis Explorer renvoie 0 fichier, car le client Google apis Explorer n'a chargé aucun fichier sur mon compte Google Drive.

Anwser: Les fichiers du dossier Appdata appartiennent à l’application qui les a créés. Si vous ne voyez pas de fichiers dans le dossier de données de l'application des utilisateurs, je vous suggérerais d'utiliser un mauvais client et de ne pas voir les fichiers que votre application a téléchargés.

Utilisation correcte de q

Comme indiqué dans la documentation, l'utilisation correcte de q pour la recherche dans le dossier de données de l'application est.

'appDataFolder' in parents

AppData documentation.

Mise à jour:

q = title = '' ou title = '' ou title = '' ..., mais si je supprime title = ''

Si ceux-ci fonctionnent et que le parent des fichiers ne mentionne pas appdata, je vous suggérerais alors d'avoir téléchargé les fichiers dans le compte principal de Google, plutôt que de les télécharger ensuite vers appdata. C’est une mauvaise idée, car l’utilisateur pourra alors voir les fichiers qu’il ne pourra peut-être pas éditer, ce qui leur causera beaucoup de confusion. si vous l'avez dans un dossier et que vous ne leur avez pas donné l'autorisation, l'utilisateur risque de ne pas être en mesure de voir le fichier comme tel sur celui-ci.

Mise à jour 2:

q = 'appDataFolder' dans les parents

Renverra tous les fichiers créés par votre application avec le dossier parent de appDataFolder.

q = 'appfolder' chez les parents

Renverra tous les fichiers avec le dossier parent de appfolder qui est en fait un répertoire du compte Google Drive des utilisateurs et non du dossier appDataFolder masqué.

spaces = 'drive'

Cela signifie que les données sont stockées sur le lecteur.

spaces = appDataFolder 

C’est pour demander des données d’application, mais cela n’est pris en charge que dans la V3.

2
DaImTo