5

Ho il seguente codice, modificato da Google's documentation:Google Cloud API - Application credenziali predefinite

 $GOOGLE_APPLICATION_CREDENTIALS = "./[path].json"; 
     $_ENV["GOOGLE_APPLICATION_CREDENTIALS"] = "./[path].json"; 
     $_SERVER["GOOGLE_APPLICATION_CREDENTIALS"] = "./[path].json"; 

     $projectId = "[my project's ID']"; 
     $client = new Google_Client(); 
     $client->useApplicationDefaultCredentials(); 
     $client->setScopes(['https://www.googleapis.com/auth/books']); 
     $service = new Google_Service_Books($client); 
     $results = $service->volumes->listVolumes('Henry David Thoreau'); 

Eppure, quando l'eseguo che restituisce l'errore:

PHP Fatal error: Uncaught exception 'DomainException' with message 'Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information' 

ho provato varie configurazioni, per esempio cambiando il percorso del file. Come vedi, ho anche fatto le tre diverse forme di variabili che potrei immediatamente pensare (due ambienti, uno non).

Non sono sicuro di dove cercare dopo. Dovrei esaminare diversi modi di impostare la variabile di ambiente o dovrei definire il percorso in un modo diverso? Quali sono i modi corretti per farlo? C'è qualche altra ragione per l'errore?

+0

dove corri il codice (ad es. App Engine prod o dev, Compute Engine, a livello locale)? – Adam

+0

@Adam localmente, su un sistema Windows/Apache. Tuttavia, sto costruendo qualcosa che verrà eseguito su un sistema Linux/NGINX. – laef

risposta

13

È necessario utilizzare putenv() (http://php.net/manual/en/function.putenv.php) invece di provare a utilizzare uno dei metodi utilizzati ($_ENV o $_SERVER).

Tratto da https://github.com/google/google-api-php-client/blob/master/UPGRADING.md#google_auth_assertioncredentials-has-been-removed

// OR use environment variables (recommended) 

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json'); 
$client->useApplicationDefaultCredentials(); 
+1

Leggere "[Come scrivere una buona risposta] (http://stackoverflow.com/help/how-to-answer)" – fusion3k

+0

@ fusion3k Non riesco a vedere alcun problema con la mia risposta. Ok, è breve, ma hanno chiesto "dovrei definire il percorso in un modo diverso?" e la mia risposta mostra come definire il percorso in un modo diverso, rispondendo così alla domanda. Credo che la mia risposta sia auto esplicativa e non richiede ulteriori spiegazioni. "La brevità è accettabile". Sono felice di sentire come pensi che potrei migliorare la risposta? –

+0

Prima di tutto: la tua risposta è stata segnalata da diversi utenti come "non chiara", tanto più che uno pensa che non sia "auto esplicativo". Posso essere d'accordo con te: per me - e forse per l'OP - la risposta è auto-esplicativa, ma questo sito non è come una chat, esistono anche domande e risposte per i futuri visitatori. Una risposta migliore potrebbe essere come "Il tuo tentativo di impostare la variabile di ambiente non è valido, devi usare questa sintassi invece di ... $ _ENV significa che ... vedi i documenti per maggiori dettagli ... ecc.". Ci sono molti modi, ma il "pubblico" vuole più quella linea di codice. – fusion3k

0
I agree with above answer only want to describe if user getting error in php using nlp google 
    <?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

# Includes the autoloader for libraries installed with composer 
require __DIR__ . '/vendor/autoload.php'; 

# Imports the Google Cloud client library 
use Google\Cloud\Language\LanguageClient; 
putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/sgupta/www/practise/nlp/google/cred.json'); //your path to file of cred 
//$client->useApplicationDefaultCredentials(); 
# Your Google Cloud Platform project ID 
$projectId = 'nlp-project-nname'; //your project name 

# Instantiates a client 
$language = new LanguageClient([ 
    'projectId' => $projectId 
]); 

# The text to analyze 
$text = 'Sachin Tendulkar'; 



# Detects the sentiment of the text 
$annotation = $language->analyzeSentiment($text); 
$sentiment = $annotation->sentiment(); 
echo "<pre>"; 
print_r($annotation); die; 

echo 'Text: ' . $text . ' 
Sentiment: ' . $sentiment['score'] . ', ' . $sentiment['magnitude']; 
?>