2012-10-18 34 views
10

Tôi muốn truy vấn API Google Analytics bằng Python để tải xuống dữ liệu định kỳ từ tài khoản Analytics của tôi và lưu trữ dữ liệu trong cơ sở dữ liệu cục bộ. Tôi về cơ bản là làm theo các bước như được đưa ra trong basic tutorial. Tôi đang sử dụng Google client API library for Python trong quá trình này.Truy cập API Google Analytics mà không có trình duyệt cục bộ trong python

Tập lệnh của tôi đang hoạt động tốt cho đến giờ khi tôi chạy nó trên máy dev cục bộ của mình (Mac). Khi tôi bắt đầu tập lệnh, trình duyệt của tôi mở ra và tôi được nhắc cấp quyền truy cập vào dữ liệu Analytics của mình từ ứng dụng. Sau đó, tôi có thể chạy tập lệnh của mình thường xuyên như tôi muốn và nhận quyền truy cập vào dữ liệu của mình.

Trên máy chủ của tôi (Ubuntu, chỉ có đầu cuối), trình duyệt w3m mở, nhưng tôi không thể truy cập tài khoản Google của mình từ đó. Tôi chỉ có thể thoát khỏi w3m và giết chương trình với Ctrl-C. Có một thông báo lỗi như:

Trình duyệt của bạn đã được mở để tham quan:

https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline

Nếu trình duyệt của bạn trên một máy khác nhau sau đó thoát ra và chạy lại ứng dụng này với lệnh line tham số

--noauth_local_webserver

Howe ver khi tôi chạy tập lệnh của mình với thông số --noauth_local_webserver, tôi nhận được kết quả tương tự - w3m mở và tôi không thể xác thực.

Làm cách nào để có được --noauth_local_webserver hoạt động? Tôi có một cách khác để xác thực mà không có một trình duyệt địa phương trên cùng một máy?

+0

Tôi có vấn đề tương tự, nhưng tôi cần phải tự động hóa quy trình xác thực (tôi không muốn "chấp nhận" API mỗi lần). Có cách nào để gửi thông tin đăng nhập/mật khẩu qua máy khách python hay tôi sẽ phải hack mã mẫu và thực hiện thông qua PhantomJS? – aviggiano

+0

phantom js không phải là một ý tưởng tồi! Tôi cũng không muốn chấp nhận API mọi lúc, nó làm hỏng tự động cho tôi. Điều này có vẻ đầy hứa hẹn: https://www.npmjs.com/package/headless-google-auth – grasshopper

Trả lời

7

Khi bạn sử dụng FLAGS = gflags.FLAGS, bạn thực sự cần phải chuyển đối số dòng lệnh tới FLAGS (điều này có thể có hoặc không có thể đã vấp ngã tôi :)). Xem here để có ví dụ về trung tâm Analytics về cách thực hiện (mã bên dưới vì các liên kết có xu hướng biến mất sau một thời gian). Ý tưởng chung là các đối số argv được chuyển vào biến số FLAGS, sau đó trở thành có sẵn cho các mô-đun khác.

# From samples/analytics/sample_utils.py in the google-api-python-client source 

def process_flags(argv): 
    """Uses the command-line flags to set the logging level. 

    Args: 
    argv: List of command line arguments passed to the python script. 
    """ 

    # Let the gflags module process the command-line arguments. 
    try: 
    argv = FLAGS(argv) 
    except gflags.FlagsError, e: 
    print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS) 
    sys.exit(1) 

    # Set the logging according to the command-line flag. 
    logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) 

Ngoài ra, hóa ra là chúng tôi không đơn độc! Bạn có thể theo dõi this bug để xem khi nào điều này sẽ được thêm tài liệu.

+0

Cảm ơn, chính xác những gì tôi đang tìm kiếm! – j0nes

+0

@ j0nes Tuyệt vời, vui vì nó đã giúp! – RocketDonkey

+0

Xin chào, tôi cũng đang gặp phải vấn đề tương tự, tôi đang sử dụng Google Trang tính API, tôi đã không nhận được giải pháp của bạn, nơi để đặt chức năng này, cách gọi nó. Tôi đã xem qua tài liệu về run_flow từ đây, https://developers.google.com/api-client-library/python/guide/aaa_oauth#commandline và tôi đang sử dụng đúng cách đó. Xin hãy giúp tôi hiểu giải pháp của bạn. –

1

bạn cũng có thể sử dụng GA làm API dịch vụ: https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py hoạt động này hoàn toàn ổn. Chỉ cần remmeber để chuyển đổi p12 vào một tập tin unencryptet PEM sử dụng openssl $ openssl pkcs12 -in client_secrets.p12 -nodes -nocerts> client_secrets.pem mật khẩu nhập khẩu được in ra khi bạn tải về P12 từ giao diện điều khiển google phát triển của

0

Tôi chạy vào cùng một vấn đề và quản lý để giải quyết nó bằng cách SSHing vào máy chủ của tôi. Ví dụ:

ssh -L 8080:127.0.0.1:8080 <server-name> 

Sau đó, tôi chạy tập lệnh của mình thông qua SSH. Khi tôi được trình bày với URL (https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline), tôi đã sao chép và dán vào trình duyệt trên máy của mình để hoàn thành quy trình xác thực.

+0

Bạn có thể giải thích thêm ... Tôi có cùng một vấn đề, tôi phải đặt nó trong Amazon Lambda là dịch vụ vi mô, vì vậy không có GUI, tôi đang nghĩ đến việc truy cập máy chủ thông qua SSH và chạy tự động selen để mở liên kết mà chúng tôi nhận được, hoàn tất quy trình xác thực ... có thể ... –

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