2015-07-03 5 views
5

Ich schreibe eine App, um auf die Bilder eines Nutzers in Google Fotos zuzugreifen.Wie greife ich auf Google Fotos von meiner Node js App aus zu?

Es scheint, dass es keine 'offizielle' API für Google Fotos gibt, die Bilder sind jedoch über die Picasa Web Albums API erreichbar.

Es gibt keine offiziellen Google Picasa-Webalben-API-Referenzen/Dokumentationen für NodeJS/Javascript.

Wie kann ich über meine Node App auf diese API zugreifen?

+0

Werfen Sie einen Blick auf die [Dokumentation] zu Fuß nach unten (https://developers.google.com/picasa-web/docs/2.0/developers_guide_protocol #Fotos). – Robin

Antwort

0

Um die neuesten 10 Fotos von Google Fotos herunterzuladen, machen Sie die ersten 2 Schritte des quickstart, fügen Sie das Client-Geheimnis, Client-ID und Redirect in das unten stehende coffeescript ein und führen Sie es aus. (npm install --global coffeescript dann coffee quickstart.coffee zu laufen oder coffee -c quickstart.coffee zu kompilieren, um Javascript)

Ich denke, der Benutzer muss ihre Google Fotos Konto mit Google-Laufwerk verbinden, damit dies funktioniert.

Hinweise für im Allgemeinen mit dem Reference (v3) und Google Drive arbeiten:

  • nicht vergessen, das auth Objekt, wenn Sie API-Funktionen aufrufen, die eine Authentifizierung erfordern: service.files.list({auth:auth, other params here...},callback) - wenn Sie vergessen, es gibt einen Daily Limit for Unauthenticated Use Exceeded Fehler
  • Jede Datei hat viele Eigenschaften, aber in v3 der API gibt sie standardmäßig nicht alle Felder der Ressource zurück. Sie finden sie über die fields Option wie folgt angeben: service.files.get({auth:auth,fileId:"1y3....",fields:"mimeType, webContentLink, webViewLink, thumbnailLink"},callback)
  • wenn Sie möchten, eine Datei herunterzuladen, setzen alt:"media" in den Optionen
  • Sie Dateien mit der Option q abfragen. Schau dir die available serach parameters an. Beachten Sie, dass Sie Suchen über and, or und not kombinieren und verschachteln können.
  • gibt es keine echten "Ordner" in Google Drive. Jede Datei kann mehrere "Eltern" haben.
    • Sie die IDs aller Ordner durch den Aufruf service.files.list mit der Abfrageoption q:'mimeType = "application/vnd.google-apps.folder"'
    • erhalten einen Ordner mit Namen Verwendung Abfrage q:'name = "<name of folder>" and mimeType = "application/vnd.google-apps.folder"'
    • Sie könnten die ID des Root-Ordner erhalten, indem service.files.get({auth:auth, fileId:"root"},callback) Aufruf bekommen - aber Sie können einfach root verwenden, wo Sie diese ID setzen würde
    • alle Dinge im Stammordner Aufruf service.files.list({auth:auth,q:'parents in "root"'},callback)
    • aufzulisten, wenn Sie die ID einer Datei haben, können Sie den Ordner (n) der Datei erhalten, indem Aufruf service.files.get mit der fields:"parents" Option
    • Sie haben Sie die ID eines Ordners Sie die Dateien dieses Ordners mit durch den Aufruf service.files.list mit einer Abfrageoption q:'parents in "0B7..."' (beachten Sie, dass die ID benötigt "...")
    • Auflistung der Dateien in dem Ordner bekommen Der Pfad /one/two/three entspricht dem Auflisten der Dateien des Ordners three - Sie benötigen jedoch zuerst die ID dieses Ordners.Sie können diese ID erhalten, indem iterativ den Weg
fs = require('fs') 
readline = require('readline') 
google = require('googleapis') 
googleAuth = require('google-auth-library') 

SCOPES = [ 'https://www.googleapis.com/auth/drive' ] # scope for everything :D 
TOKEN_PATH = './token.json' 
CLIENT_SECRET = <your client secret here> 
CLIENT_ID = <your client id here> 
REDIRECT = <your redirect url here> 

authorize = (callback) -> 
    auth = new googleAuth 
    oauth2Client = new auth.OAuth2(CLIENT_ID, CLIENT_SECRET,REDIRECT) 
    # Read the Token at ./token.json or get a new one 
    fs.readFile TOKEN_PATH, (err, token) -> 
     if err 
      getNewToken oauth2Client, callback 
     else 
      oauth2Client.credentials = JSON.parse(token) 
      callback oauth2Client 

getNewToken = (oauth2Client, callback) -> 
    authUrl = oauth2Client.generateAuthUrl({access_type: 'offline', scope: SCOPES}) 
    console.log 'Authorize this app by visiting this url: ', authUrl 

    rl = readline.createInterface({input: process.stdin,output: process.stdout}) 
    rl.question 'Enter the code in the address bar without the "#"(?code=<code>#)', (code) -> 
     rl.close() 
     oauth2Client.getToken code, (err, token) -> 
      oauth2Client.credentials = token 
      fs.writeFile TOKEN_PATH, JSON.stringify(token) # store token for later 
      callback oauth2Client 

authorize (auth)-> 
    service = google.drive('v3') 
    # get ids of the 10 most recent photos 
    # every request needs the auth:auth 
    service.files.list {auth:auth,pageSize: 10,orderBy: 'createdTime desc',q:"mimeType = 'image/jpeg'"},(err,response)-> 
     for file in response.files 
      dest = fs.createWriteStream(file.name) 
      # you have to add the alt:"media" option to get the file contents 
      # if you want a link to the file that can be used in an <img src=''> tag: add fields:"webContentLink" 
      service.files.get({auth:auth,fileId:file.id,alt:"media"}).pipe(dest) 
Verwandte Themen