0

Google スプレッドシートから postgres データベースにデータを読み込もうとしています。問題は、資格情報を認証しようとすると、次のエラーが発生することです。

File "/usr/local/lib/python2.7/dist-packages/oauth2client/_openssl_crypt.py", line 117, in from_string
pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, parsed_pem_key)
OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')]

Using OAuth2 for Authorizationのすべての手順に従い、API を有効にして、必要なキーと認証要素を含む .json ファイルを取得したサービス アカウントを作成しました。

私が認証しようとしている方法は次のとおりです。

json_key = json.load(open('gdoc.json'),strict=False)

creds = SignedJwtAssertionCredentials(json_key['client_email'], json_key['private_key'], scope)

login = gspread.authorize(creds)

おそらく、問題は json load のパラメーターに起因strict=Falseするものであり、問​​題は、それを削除するとエラーが発生することです:

File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 5 column 38 (char 174)

他のフォーラムをいくつか見ましたが、json キー ファイル内に \n がエスケープされていないため、strict=False パラメータを使用することを提案しています。

これは .json キー ファイルのコピーです。

{
  "type": "service_account",
  "project_id": "geometric-shine-118101",
  "private_key_id": "xxx",
  "private_key": "-----BEGIN PRIVATE KEY-----\nxxx\n-----END PRIVATE KEY-----\n",
  "client_email": "dataload@geometric-shine-118101.iam.gserviceaccount.com",
  "client_id": "117076930343404252458",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://accounts.google.com/o/oauth2/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/dataload%40geometric-shine-118101.iam.gserviceaccount.com"
}
4

1 に答える 1

-1
"private_key": "-----BEGIN PRIVATE KEY-----\nxxx\n-----END PRIVATE KEY-----\n",
 "client_email": "dataload@geometric-shine-118101.iam.gserviceaccount.com",

実際の値をコピーして単一引用符 (.eg '') に貼り付けます。それは私のために働いた。

'dataload@geometric-shine-118101.iam.gserviceaccount.com'

'-----BEGIN PRIVATE KEY-----\nxxx\n-----END PRIVATE KEY-----\n'
于 2016-01-12T15:51:30.370 に答える