2015-08-23 33 views
3

我想在命令行中使用curl運行Google Analytics API查詢,並且我對可用的身份驗證方法感到困惑。我希望我只是簡單地得到一個客戶端ID和一個祕密來傳遞curl請求,但所有OAuth身份驗證的東西看起來像是堅持通過服務器或瀏覽器進行往返。有沒有簡單的方法使用curl來運行經過驗證的Google Analytics(分析)查詢?

什麼是最簡單的方法,一勞永逸地「直到撤銷,認證命令行腳本以查詢Google Analytics」,然後呢?每次我想運行腳本時,我都不想打開瀏覽器。

+0

您是否正在使用* just * curl進行此操作,或者您是否更加廣泛地詢問如何從命令行執行此操作(可能需要多次往返),而無需通過基於瀏覽器的用戶名/密碼流每一次?如果你用* curl做這個問題,答案是這是不可能的。 –

+0

不能夠使用一個單一的捲曲電話很爛,但我可以理解。更復雜的命令行解決方案將如何顯示,您可以將其添加爲答案嗎?謝謝! – zoul

+0

這可能有助於您的研究https://developers.google.com/identity/protocols/OAuth2ForDevices?hl=en它仍然會來來回回,一旦設置它相對容易,說一個PHP腳本,但與直線捲曲你會遇到很多來回的令牌。 – williamvicary

回答

0

這是我在已經抵達,迄今:

{-# LANGUAGE OverloadedStrings #-} 

import Data.Yaml 
import Control.Monad 
import Data.ByteString.Char8 (pack, unpack) 
import Data.Monoid 
import Network.Google.OAuth2 
import Network.HTTP.Conduit 
import Network.HTTP.Types (hAuthorization) 
import qualified Data.ByteString.Char8 as B8 
import qualified Data.ByteString.Lazy.Char8 as L8 

data OAuth2Credentials = OAuth2Credentials { 
    getClientID :: String, 
    getClientSecret :: String 
} deriving (Show, Eq) 

instance FromJSON OAuth2Credentials where 
    parseJSON (Object value) = OAuth2Credentials <$> 
     value .: "clientID" <*> 
     value .: "clientSecret" 
    parseJSON _ = mzero 

parseOAuth2Credentials :: String -> Maybe OAuth2Credentials 
parseOAuth2Credentials source = Data.Yaml.decode $ pack source 

main :: IO() 
main = do 
    source <- readFile "analytics-credentials.yml" 
    let creds = parseOAuth2Credentials source 
    case creds of 
     Just creds -> do 
      let client = OAuth2Client (getClientID creds) (getClientSecret creds) 
      token <- getAccessToken client authScope (Just tokenCacheFile) 
      request <- parseUrl analyticsQueryURL 
      response <- withManager $ httpLbs $ authorize token request 
      L8.putStrLn $ responseBody response 
     Nothing -> return() 
    where 
     authorize token request = request { requestHeaders = [(hAuthorization, B8.pack $ "Bearer " <> token)] } 
     analyticsQueryURL = "…" 
     authScope = ["https://www.google.com/analytics/feeds/"] 
     tokenCacheFile = "analytics-token.yml" 

不完全捲曲和不完全簡單,但最初的基於瀏覽器的令牌生成後的訪問令牌在文件和後續請求緩存不需要任何人機交互。

相關問題