2014-01-29 81 views
0

我是新來的Python和新API的工作,所以這可能是基本的......我可以讓我的初始請求,導致瀏覽器窗口打開。此時,用戶必須在Google同意頁面上進行選擇。之後,授權碼被返回......我明白了。我的問題是,如何暫停運行Python代碼,以便我可以等待用戶權限並存儲下一步所需的代碼?我只是用它們的庫在Python 2.7中測試它,但我堅持這一點。我可以在箭頭上放什麼?感謝任何幫助。谷歌聯繫人API:存儲授權碼並交換令牌

from oauth2client.client import OAuth2WebServerFlow 
    import webbrowser 

    flow = OAuth2WebServerFlow(client_id=[id], 
         client_secret=[secret], 
         scope='https://www.google.com/m8/feeds', 
         redirect_uri='urn:ietf:wg:oauth:2.0:oob') 

    auth_uri = flow.step1_get_authorize_url() 
    webbrowser.open(auth_uri) 

---> 

    code='' 
    credentials = flow.step2_exchange(code) 

回答

0

下面是一些示例代碼,用於處理Web服務器的情況。 send_redirect不是真正的方法,您需要首先將用戶重定向到Google,然後在您的回撥中交換授權碼以獲得一組憑據。

我也包含了一種用使用GData庫返回的OAuth2憑證,因爲它看起來像您正在訪問的聯繫人API:

from oauth2client.client import flow_from_clientsecrets 

flow = flow_from_clientsecrets(
    "/path/to/client_secrets.json", 
    scope=["https://www.google.com/m8/feeds"], 
    redirect_url="http://example.com/auth_return" 
) 

# 1. To have user authorize, redirect them: 
send_redirect(flow.step1_get_authorize_url()) 

# 2. In handler for "/auth_return": 
credentials = flow.step2_exchange(request.get("code")) 

# 3. Use them: 

import gdata.contacts.client 
import httplib2 

# Helper class to add headers to gdata 
class TokenFromOAuth2Creds: 
    def __init__(self, creds): 
    self.creds = creds 
    def modify_request(self, req): 
    if self.creds.access_token_expired or not self.creds.access_token: 
     self.creds.refresh(httplib2.Http()) 
    self.creds.apply(req.headers) 

# Create a gdata client 
gd_client = gdata.contacts.client.ContactsClient(source='<var>YOUR_APPLICATION_NAME</var>') 

# And tell it to use the same credentials 
gd_client.auth_token = TokenFromOAuth2Creds(credentials) 

Unifying OAuth handling between gdata and newer Google APIs

那說你看,它看起來像你您的問題中已經有大部分代碼。希望這給你一個更完整的例子,以啓動和運行。

用於測試 - 如果你只是想暫停Python解釋器在等待切割,並在粘貼代碼,我會去與code = raw_input('Code:')http://docs.python.org/2/library/functions.html#raw_input

+0

它實際上是基於網絡的服務器,但我是測試沒有建立一個網絡服務器,所以我真的沒有辦法存儲附加到我的重定向的代碼。我正在使用已安裝的應用程序重定向作爲最後的努力,我認爲無論如何都沒有意義。是否有一個Web應用程序的等效庫? – RAW

+0

太好了,謝謝你指出我正確的方向。 – RAW