2012-10-18 4 views
10

में स्थानीय ब्राउज़र के बिना Google Analytics API एक्सेस, मैं अपने Analytics खाते से समय-समय पर डेटा डाउनलोड करने और स्थानीय डेटाबेस में डेटा स्टोर करने के लिए पाइथन का उपयोग करके Google Analytics API से पूछताछ करना चाहता हूं। मैं मूल रूप से basic tutorial में दिए गए चरणों का पालन कर रहा हूं। मैं इस प्रक्रिया में Google client API library for Python का उपयोग कर रहा हूं।पाइथन

मेरी स्क्रिप्ट अब तक ठीक काम कर रही है जब मैं इसे अपने स्थानीय देव मशीन (मैक) पर चला रहा हूं। जब मैं स्क्रिप्ट शुरू करता हूं, तो मेरा ब्राउज़र खुलता है और मुझे ऐप से अपने Analytics डेटा तक पहुंच प्रदान करने के लिए कहा जाता है। इसके बाद मैं जितनी बार चाहूं अपनी स्क्रिप्ट चला सकता हूं और अपने डेटा तक पहुंच प्राप्त कर सकता हूं।

मेरे सर्वर पर (उबंटू, केवल टर्मिनल उपलब्ध), w3m ब्राउज़र खुलता है, लेकिन मैं वहां से अपने Google खाते तक नहीं पहुंच सकता। मैं केवल w3m छोड़ सकता हूं और Ctrl-C के साथ प्रोग्राम को मार सकता हूं। वहाँ की तरह एक त्रुटि संदेश है:

आपका ब्राउज़र की यात्रा के लिए खोल दिया गया है:

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

आपके ब्राउज़र फिर बाहर निकलें किसी दूसरी मशीन पर है और आदेश के साथ इस आवेदन फिर से चलाते हैं ऑन लाइन पैरामीटर

--noauth_local_webserver

होवे जब मैं पैरामीटर --noauth_local_webserver के साथ अपनी स्क्रिप्ट चलाता हूं, तो मुझे वही परिणाम मिलते हैं - w3m खुलता है और मैं प्रमाणीकृत नहीं कर सकता।

मैं काम करने के लिए --noauth_local_webserver कैसे प्राप्त कर सकता हूं? मैं एक ही मशीन पर एक स्थानीय ब्राउज़र के बिना प्रमाणित करने का एक और तरीका है?

+0

मुझे एक ही समस्या है, लेकिन मुझे प्रमाणीकरण प्रक्रिया स्वचालित करने की आवश्यकता है (मैं हर बार एपीआई स्वीकार नहीं करना चाहता)। क्या पाइथन क्लाइंट के माध्यम से लॉगिन/पासवर्ड भेजने का कोई तरीका है या क्या मुझे नमूना कोड हैक करना होगा और इसे PhantomJS के माध्यम से करना होगा? – aviggiano

+0

प्रेत जेएस एक बुरा विचार नहीं है! मैं हर बार एपीआई स्वीकार नहीं करना चाहता, यह मेरे लिए स्वचालन बर्बाद कर देता है। यह आशाजनक लग रहा है: https://www.npmjs.com/package/headless-google-auth – grasshopper

उत्तर

7

जब आप FLAGS = gflags.FLAGS का उपयोग करते हैं, तो आपको वास्तव में कमांड लाइन तर्क FLAGS पर पास करने की आवश्यकता होती है (यह शायद मुझे भी ट्राइप कर सकता है या नहीं :))। एक Analytics-केंद्रित उदाहरण के लिए here देखें कि इसे कैसे करें (लिंक के रूप में नीचे दिए गए कोड थोड़ी देर बाद दूर जाते हैं)। सामान्य विचार यह है कि argv तर्क FLAGS चर में पारित किए गए हैं, जो तब अन्य मॉड्यूल के लिए उपलब्ध हो जाते हैं।

# 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)) 

इसके अलावा, यह पता चला है कि हम अकेले नहीं हैं! यह this bug ट्रैक कर सकता है यह देखने के लिए कि यह दस्तावेज़ कब जोड़ा जाएगा।

+0

धन्यवाद, बिल्कुल वही जो मैं ढूंढ रहा था! – j0nes

+0

@ j0nes बहुत बढ़िया, खुश यह मदद की! – RocketDonkey

+0

अरे, मुझे भी एक ही समस्या का सामना करना पड़ रहा है, मैं Google शीट्स एपीआई का उपयोग कर रहा हूं, मुझे आपका समाधान नहीं मिला, यह फ़ंक्शन कहां रखा जाए, इसे कैसे कॉल करें। मैं यहां से run_flow के प्रलेखन के माध्यम से गया, https://developers.google.com/api-client-library/python/guide/aaa_oauth#commandline, और मैं इसका सही उपयोग कर रहा हूं। कृपया मुझे अपने समाधान को समझने में मदद करें। –

1

आप GA को सेवा API के रूप में भी उपयोग कर सकते हैं: https://developers.google.com/analytics/devguides/reporting/core/v3/quickstart/service-py यह पूरी तरह से ठीक काम करता है। बस openssl का उपयोग कर एक unencryptet पीईएम फाइल करने के लिए p12 कन्वर्ट करने के लिए remmeber $ openssl PKCS12 -इन client_secrets.p12 -nodes -nocerts> client_secrets.pem आयात पासवर्ड मुद्रित है जब आप गूगल डेवलपर कंसोल से P12 डाउनलोड

0

मैं एक ही मुद्दे में भाग गया और एसएसएचइंग द्वारा इसे अपने सर्वर में हल करने में कामयाब रहा। उदाहरण:

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

तब मैंने एसएसएच के माध्यम से अपनी स्क्रिप्ट चलाई। जब मुझे यूआरएल (https://accounts.google.com/o/oauth2/auth?scope=some_long_url&access_type=offline) के साथ प्रस्तुत किया गया था, तो मैंने प्रमाणीकरण प्रवाह को पूरा करने के लिए अपनी मशीन पर ब्राउज़र में कॉपी और चिपकाया।

+0

क्या आप और अधिक समझा सकते हैं ... मेरे पास एक ही समस्या है, मुझे इसे अमेज़ॅन लैम्ब्डा में माइक्रो सेवा के रूप में रखना है, इसलिए कोई जीयूआई नहीं है, मैं एसएसएच के माध्यम से सर्वर तक पहुंचने और एक सेलेनियम स्वचालन चलाने के बारे में सोच रहा हूं लिंक जो हम प्राप्त करते हैं, प्रमाणीकरण प्रवाह पूरा करें ... क्या यह संभव है ... –