2015-07-03 15 views
5

Piszę aplikację, aby uzyskać dostęp do obrazów użytkownika w Zdjęciach Google.Jak uzyskać dostęp do zdjęć Google z mojej aplikacji js węzła?

Wygląda na to, że nie ma "oficjalnego" interfejsu API do Zdjęć Google, ale zdjęcia są dostępne za pośrednictwem Picasa Web Albums API.

Brak oficjalnych referencji/dokumentacji API Google Picasa Web Albums dla NodeJS/Javascript.

Jak uzyskać dostęp do tego interfejsu API z mojej aplikacji węzła?

+0

Spójrz na [dokumentacja] (https://developers.google.com/picasa-web/docs/2.0/developers_guide_protocol #Zdjęcia). – Robin

Odpowiedz

0

Aby pobrać najnowsze 10 zdjęć ze zdjęć Google, wykonaj pierwsze 2 kroki z quickstart, włóż tajny klucz klienta, identyfikator klienta i przekierowanie do poniższego coffeescript i uruchom go. (npm install --global coffeescript następnie coffee quickstart.coffee do uruchomienia lub coffee -c quickstart.coffee do kompilacji do javascript)

Myślę, że użytkownik musi połączyć swoje konto Google zdjęć z dysku Google, aby to zadziałało.

wskazówki dotyczące pracy z napędem Reference (v3) i google w ogóle:

  • Nie zapomnij obiekt auth podczas wywoływania funkcji API, które wymagają uwierzytelniania: service.files.list({auth:auth, other params here...},callback) - jeśli zapomnisz, to zwraca błąd Daily Limit for Unauthenticated Use Exceeded
  • każdy plik ma wiele właściwości, ale w wersji 3 programu Api domyślnie nie zwraca wszystkich pól zasobu. Musisz określić je za pomocą opcji jak ten fields: service.files.get({auth:auth,fileId:"1y3....",fields:"mimeType, webContentLink, webViewLink, thumbnailLink"},callback)
  • jeśli chcesz pobrać plik, umieścić alt:"media" w opcjach
  • można wyszukać pliki z opcją q. Spójrz na available serach parameters. Zauważ, że możesz łączyć i zagnieżdżać wyszukiwania przez and, or i not.
  • nie ma prawdziwych "folderów" na dysku google. każdy plik może mieć wielu "rodziców".
    • można uzyskać identyfikatory wszystkich folderów poprzez wywołanie service.files.list z opcją zapytań q:'mimeType = "application/vnd.google-apps.folder"'
    • dostać folder używać nazwy zapytania q:'name = "<name of folder>" and mimeType = "application/vnd.google-apps.folder"'
    • można uzyskać identyfikator folderu głównego wywołując service.files.get({auth:auth, fileId:"root"},callback) - ale możesz po prostu użyć root gdzie umieścić ten identyfikator
    • do listy wszystkich rzeczy, w zaproszeniu folderu korzeń service.files.list({auth:auth,q:'parents in "root"'},callback)
    • jeśli masz identyfikator pliku, można uzyskać folder (y) pliku przez wywołanie service.files.get z opcją fields:"parents"
    • ty masz identyfikator folderu można pobrać pliki z tego folderu wywołując service.files.list z opcją zapytań q:'parents in "0B7..."' (zauważ, że identyfikator musi "...")
    • wymieniające pliki w folderze z ścieżka /one/two/three jest tym samym, co lista plików w folderze three - ale musisz najpierw podać identyfikator tego folderu.można dostać ten identyfikator poprzez iteracyjne idąc ścieżką
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)