2012-07-31 43 views
5

Tôi đang cố gắng tải danh sách các tệp trong Google Drive của mình bằng ứng dụng dành cho máy tính để bàn. Mã này là như sau:Không có tệp Google Drive nào được liệt kê trong yêu cầu API Drive

def main(argv): 

    storage = Storage('drive.dat') 
    credentials = storage.get() 

    if credentials is None or credentials.invalid: 
     credentials = run(FLOW, storage) 

    # Create an httplib2.Http object to handle our HTTP requests and authorize it 
    # with our good Credentials. 
    http = httplib2.Http() 
    http = credentials.authorize(http) 

    service = build("drive", "v2", http=http) 
    retrieve_all_files(service) 

Sau đó, trong retrieve_all_files, tôi in các tập tin:

param = {} 
if page_token: 
    param['pageToken'] = page_token 
    files = service.files().list(**param).execute() 
    print files 

Nhưng sau khi tôi xác thực tài khoản của tôi, danh sách tập tin in có tin nào. Có ai có một vấn đề tương tự hoặc biết một giải pháp cho điều này?

+0

Bạn có thể dán toàn bộ truy xuất_all_files không? Nó trông giống như một chức năng hữu ích. –

+0

@ AliAfshar, bạn có thể tìm thấy ở đây: https://developers.google.com/drive/v2/reference/files/list –

Trả lời

7

Vui lòng sửa tôi nếu tôi sai nhưng tôi tin rằng bạn đang sử dụng phạm vi https://www.googleapis.com/auth/drive.file, chỉ trả về các tệp mà ứng dụng của bạn đã tạo hoặc đã mở rõ ràng với ứng dụng của bạn bằng cách sử dụng Google Drive UI hoặc Picker API.

Để truy xuất tất cả các tệp, bạn sẽ cần phải sử dụng phạm vi rộng hơn: https://www.googleapis.com/auth/drive.

Để tìm hiểu thêm về các phạm vi khác nhau, hãy xem documentation.

+0

Tôi đã thử đề xuất của bạn nhưng vẫn không có nội dung trong danh sách được trả lại ... –

+1

nguồn có sẵn ở bất cứ nơi nào để chúng tôi có thể chụp ảnh khi cố gắng tái sản xuất? Hãy đảm bảo xóa 'drive.dat' khi bạn thay đổi phạm vi vì nó có thể sử dụng mã thông báo cũ không được chấp thuận cho phạm vi rộng hơn. – Alain

+0

Cảm ơn nó hiện đang hoạt động ~ –

0

Đối với một điều, bạn cần phải lặp qua page_token để nhận tất cả nội dung của Drive của tôi cũng như bất kỳ thư mục con nào. Có một vài điều khác có thể quá giống với việc không cung cấp truy vấn, v.v. Hãy thử cách này:

def retrieve_all_files(service): 
    """ RETURNS a list of files, where each file is a dictionary containing 
     keys: [name, id, parents] 
    """ 

    query = "trashed=false" 

    page_token = None 
    L = [] 

    while True: 
     response = service.files().list(q=query, 
              spaces='drive', 
              fields='nextPageToken, files(id, name, parents)', 
              pageToken=page_token).execute() 
     for file in response.get('files', []): # The second argument is the default 
      L.append({"name":file.get('name'), "id":file.get('id'), "parents":file.get('parents')}) 

     page_token = response.get('nextPageToken', None) # The second argument is the default 

     if page_token is None: # The base My Drive folder has None 
      break 

    return L 
Các vấn đề liên quan