2017-08-29 1 views
0

Je dois lire un fichier Excel sur google drive. J'ai besoin de se connecter automatiquement à Google Drive sans invite toute forme ... un bot doit lire un document ... J'ai ce code:Erreur 404 lors de l'accès à un fichier via un compte de service

$service_account_file = dirname(__FILE__) . '/key-85ac95ab1e62.json'; 
$spreadsheet_id = 'the_id_inside_the_url_of_the_file'; 

$spreadsheet_range = 'Sheet1!A1:A1'; 
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $service_account_file); 
$client = new Google_Client(); 
$client->useApplicationDefaultCredentials(); 
$client->addScope(Google_Service_Sheets::SPREADSHEETS); 
$service = new Google_Service_Sheets($client); 
$result = $service->spreadsheets_values->get($spreadsheet_id, $spreadsheet_range); 
var_dump($result->getValues()); 

Quelque chose ne va pas ... J'explique comment je généré le fichier key-*.json: J'ai cliqué sur le compte de service, puis j'ai créé un nouveau et téléchargé le json .. ce json est le key-*.json fichier. J'ai ajouté ce fichier dans mon projet (comme vous pouvez le voir sur la première ligne) ... Ici, j'ai copié le Account Service Id que je vais utiliser plus tard ...

Maintenant, je explique comment je reçois le spreadheet_id ... Je suis allé sur mon disque google, faites un clic droit sur le fichier et je l'ai partagé avec le Account Service Id (copié avant) et une url a été générée ... si je copie et passe l'url dans le navigateur tout fonctionne mais pas dans le projet ... je prends la spreadsheet_id de url

c'est l'erreur que je reçois:

PHP Fatal error: Uncaught Google_Service_Exception: { 
    "error": { 
    "code": 404, 
    "message": "Requested entity was not found.", 
    "errors": [ 
     { 
     "message": "Requested entity was not found.", 
     "domain": "global", 
     "reason": "notFound 
     } 
    ], 
    "status": "NOT_FOUND 
    } 
} 

Quel est le problème? le fichier existe et je ne peux pas le voir dans le navigateur en utilisant la même URL que j'utilise dans le fichier php ... donc je pense que c'est un problème de connexion ou de connexion ...

une idée?

+2

Vous devez posséder un compte de service sur l'API Google et utiliser ce compte pour vous connecter. Les documents de l'API expliquent tout, avec des exemples. – ADyson

+0

J'ai un compte de service ... et je lis les docs .... Le code que j'ai collé sur le poste est de docs ... mais ce n'est pas ce dont j'ai besoin – Ciccio

+0

si vous avez un compte de service, alors pourquoi est-il demander des informations d'identification d'utilisateur? Où avez-vous trouvé cet exemple de code exactement? – ADyson

Répondre

0

Ceci est le problème habituel avec les comptes de service. Reportez-vous à l'un de ces https://stackoverflow.com/search?q=404+service+account

En termes simples, un compte de service est et non identique au compte Google que vous avez utilisé pour le créer. N'utilisez pas les comptes de service ou partagez le fichier de son propre compte avec le compte de service pour lui donner accès.