2015-07-03 14 views
5

Bir kullanıcının fotoğraflarına Google Fotoğraflar'da erişmek için bir uygulama yazıyorum.Düğüm js uygulamasından google fotoğraflarına nasıl erişirim?

Google Fotoğraflar için 'resmi' bir API yok gibi görünüyor, ancak görüntülere Picasa Web Albums API aracılığıyla erişilebilir.

NodeJS/Javascript için resmi bir Google Picasa Web Albümleri API referansları/belgesi yok.

Bu API'ye Düğüm uygulamamdan nasıl erişebilirim?

+0

[belgelere] bir göz atın (https://developers.google.com/picasa-web/docs/2.0/developers_guide_protocol yürürken bu kimliği alabilirsiniz #Fotoğraflar). – Robin

cevap

0

En son 10 fotoğrafı Google fotoğrafları'ndan indirmek için, quickstart'un ilk 2 adımını uygulayın, istemci kimliğini, istemci kimliğini ekleyin ve aşağıdaki kahve metnine yeniden yönlendirin ve çalıştırın.

Ben kullanıcı kendi google fotoğraflar bunun işe yaraması için sürücü google hesabını bağlamak için olduğunu düşünüyorum (npm install --global coffeescript sonra coffee quickstart.coffee çalıştırmak veya coffee -c quickstart.coffee javascript derlemek). Genel olarak Reference (v3) ve google sürücüye ile çalışmak için

İpuçları: Eğer kimlik doğrulaması gerektiren API işlevlerini çağırdığınızda

  • auth nesneyi unutma: service.files.list({auth:auth, other params here...},callback) - unutursanız, bir Daily Limit for Unauthenticated Use Exceeded hata verir
  • her dosyanın birçok özelliği vardır, ancak Api'nin v3'ünde, kaynağın tüm alanlarını varsayılan olarak döndürmez. Böyle fields seçeneği üzerinden bunları belirtmek gerekir:
  • Bir dosyayı indirmek istiyorsanız service.files.get({auth:auth,fileId:"1y3....",fields:"mimeType, webContentLink, webViewLink, thumbnailLink"},callback), sen q seçeneği ile dosyaları sorgulayabilir
  • seçeneklerinde alt:"media" koydu. available serach parameters'a bakın. Aramaları and, or ve not aracılığıyla birleştirip yuvalayabileceğinizi unutmayın. Google Drive'da gerçek "klasör" yoktur. Her dosya birden çok "ebeveyn" olabilir.
    • ad kullanımı sorgu tarafından bir klasör almak için sorgu seçeneği q:'mimeType = "application/vnd.google-apps.folder"'
    • ile service.files.list arayarak tüm klasörlerin kimlikleri alabilirsiniz q:'name = "<name of folder>" and mimeType = "application/vnd.google-apps.folder"'
    • Eğer service.files.get({auth:auth, fileId:"root"},callback) arayarak kök klasörün kimliği alabilir - ancak Eğer
    • kök klasör çağrısında her şeyi listelemek için
    • bu id koymak nerede basitçe bir dosyanın kimliği varsa service.files.list({auth:auth,q:'parents in "root"'},callback)
    • , aradığınız dosyanın klasör (ler) alabilirsiniz root kullanabilirsiniz seçeneğiyle
    • size bir sorgu seçeneği q:'parents in "0B7..."' ile service.files.list arayarak bu klasörün dosyaları alabilirsiniz bir klasörün kimliğe sahip
    • ile klasöründeki dosyaları listeleme (id "..." ihtiyacı olduğunu unutmayın) /one/two/three yolu, three klasörünün dosyalarının listelenmesiyle aynıdır - ancak önce bu klasörün kimliğine ihtiyacınız olacaktır.Eğer iteratif yolunu
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) 
İlgili konular