2016-01-31 14 views
6

Tôi đang mã hóa để kết nối với API Youtube và các ví dụ tôi đã thấy sử dụng "chạy" từ các công cụ Oauthlib2 để chạy luồng auth. Có vẻ như một cái gì đó là sai trên cài đặt venv của tôi (tôi đã cài đặt lại nó như 4 lần rồi) nhưng nó không thể tìm thấy chạy ... nó có thể là một vấn đề phiên bản? Tôi có thể nhập các phần khác của thư viện nhưng không nhập .tools chạy.Oauth2 lib không thể nhập tên 'chạy'

Mã:

import httplib2 
import os 
import logging 
from oauth2client import run 
from oauth2client.file import Storage 
# from oauth2client.client import AccessTokenRefreshError 
from googleapiclient.discovery import build 
from oauth2client.client import flow_from_clientsecrets 
from googleapiclient.errors import HttpError 
import json 

CLIENT_SECRETS_FILE = "client_secrets.json" 
YOUTUBE_READ_WRITE_SCOPE = "https://www.googleapis.com/auth/youtube" 
YOUTUBE_API_SERVICE_NAME = "youtube" 
YOUTUBE_API_VERSION = "v3" 
MISSING_CLIENT_SECRETS_MESSAGE = "Missing client secrets file" 


def authenticate(): 
    httplib2.debuglevel = 4 
    flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, 
            scope=YOUTUBE_READ_WRITE_SCOPE, 
            message=MISSING_CLIENT_SECRETS_MESSAGE) 
    storage = Storage("%s-oauth2.json") 
    credentials = storage.get() 
    if credentials is None or credentials.invalid: 
     print('invalid credentials') 
     credentials = run_flow(flow, storage) 

    service = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, 
        http=credentials.authorize(httplib2.Http())) 

    tags = "classical music", "yehudi mehunin" 
    body = dict(
     snippet=dict(
      title="some title", 
      description="a description", 
      tags=tags, 
      categoryId="4" 
     ), 
     status=dict(
      privacyStatus="Private" 
     ) 
    ) 

    thingy = service.videos().insert(part=",".join(body.keys()), body=None, media_body=MediaFileUpload(
     "1977.mp4", mimetype="video/mp4", chunksize=1024 * 1024, resumable=False)) 

    thingy.execute() 

authenticate() 

lỗi:

Traceback (most recent call last): File "/home/xavier/Code/autotube/youtube3.py", line 4, in <module> from oauth2client import run ImportError: cannot import name 'run'

Trả lời

12

tôi mạnh mẽ đề nghị tìm kiếm một ví dụ gần đây hơn của việc thực hiện oauth2client hiện hành. Phương pháp cũ run đã bị xóa khỏi thư viện vào tháng 8 năm 2015 và được thay thế bằng run_flow() trong mô-đun công cụ. Nhập khẩu như sau:

from oauth2client import tools 

Sau đó truy cập bằng cách sử dụng tools.run_flow().

Cập nhật: Về sau bạn lên câu hỏi mà cờ bạn nên nhập theo chương trình, nếu không có args lệnh có sẵn, các trick là sử dụng một args danh sách trống như thế này:

flags = tools.argparser.parse_args(args=[]) 
creds = tools.run_flow(flow, storage, flags) 
+1

Cảm ơn bạn. Đó là yêu cầu tôi cho một đối số cờ, nhưng chương trình của tôi không phải là dòng lệnh dựa. Có một cách giải quyết cho điều này ? 'credentials = run_flow (flow, storage,?)' – xavier

+0

cập nhật câu trả lời của tôi để phản ánh câu hỏi f'up của bạn – ferdy

+1

Cảm ơn bạn, rất hữu ích :) Upvote trên đường đi! – xavier

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