キーとワークシートID(gid
)を指定してPython Googleドキュメントスプレッドシートをダウンロードする方法の例を作成できますか?できません。
APIのバージョン1、2、3を調べました。私は運が悪く、コンパイルされたATOMのようなフィードAPIを理解できません。_gdata.docs.service.DocsService._DownloadFile
_プライベートメソッドは私が無許可であり、Googleログイン認証システム全体を書きたくないと言っています私自身。欲求不満で顔を刺そうとしています。
いくつかのスプレッドシートがあり、次のようにしてアクセスしたいと思います。
_username = '[email protected]'
password = getpass.getpass()
def get_spreadsheet(key, gid=0):
... (help!) ...
for row in get_spreadsheet('5a3c7f7dcee4b4f'):
cell1, cell2, cell3 = row
...
_
私の顔を保存してください。
更新1:以下を試しましたが、Download()
またはExport()
の組み合わせが機能しないようです。 (DocsService
のドキュメント ここ )
_import gdata.docs.service
import getpass
import os
import tempfile
import csv
def get_csv(file_path):
return csv.reader(file(file_path).readlines())
def get_spreadsheet(key, gid=0):
Gd_client = gdata.docs.service.DocsService()
Gd_client.email = '[email protected]'
Gd_client.password = getpass.getpass()
Gd_client.ssl = False
Gd_client.source = "My Fancy Spreadsheet Downloader"
Gd_client.ProgrammaticLogin()
file_path = tempfile.mktemp(suffix='.csv')
uri = 'http://docs.google.com/feeds/documents/private/full/%s' % key
try:
entry = Gd_client.GetDocumentListEntry(uri)
# XXXX - The following dies with RequestError "Unauthorized"
Gd_client.Download(entry, file_path)
return get_csv(file_path)
finally:
try:
os.remove(file_path)
except OSError:
pass
_
誰かがクイックフィックスを探してこれに遭遇した場合、ここに 別の(現在)機能しているソリューション があります。これはgdataクライアントライブラリに依存していません:
#!/usr/bin/python
import re, urllib, urllib2
class Spreadsheet(object):
def __init__(self, key):
super(Spreadsheet, self).__init__()
self.key = key
class Client(object):
def __init__(self, email, password):
super(Client, self).__init__()
self.email = email
self.password = password
def _get_auth_token(self, email, password, source, service):
url = "https://www.google.com/accounts/ClientLogin"
params = {
"Email": email, "Passwd": password,
"service": service,
"accountType": "HOSTED_OR_GOOGLE",
"source": source
}
req = urllib2.Request(url, urllib.urlencode(params))
return re.findall(r"Auth=(.*)", urllib2.urlopen(req).read())[0]
def get_auth_token(self):
source = type(self).__name__
return self._get_auth_token(self.email, self.password, source, service="wise")
def download(self, spreadsheet, gid=0, format="csv"):
url_format = "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=%s&exportFormat=%s&gid=%i"
headers = {
"Authorization": "GoogleLogin auth=" + self.get_auth_token(),
"GData-Version": "3.0"
}
req = urllib2.Request(url_format % (spreadsheet.key, format, gid), headers=headers)
return urllib2.urlopen(req)
if __name__ == "__main__":
import getpass
import csv
email = "" # (your email here)
password = getpass.getpass()
spreadsheet_id = "" # (spreadsheet id here)
# Create client and spreadsheet objects
gs = Client(email, password)
ss = Spreadsheet(spreadsheet_id)
# Request a file-like object containing the spreadsheet's contents
csv_file = gs.download(ss)
# Parse as CSV and print the rows
for row in csv.reader(csv_file):
print ", ".join(row)
https://github.com/burnash/gspread ライブラリは、gdata
ライブラリを示唆する以前の回答よりも、Googleスプレッドシートを操作するための新しい、より簡単な方法です低すぎるだけでなく、過度に複雑です。
また、サービスアカウントキーを作成して(JSON形式で)ダウンロードする必要があります。 https://console.developers.google.com/apis/credentials/serviceaccountkey
これを使用する方法の例を次に示します。
import csv
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
docid = "0zjVQXjJixf-SdGpLKnJtcmQhNjVUTk1hNTRpc0x5b9c"
client = gspread.authorize(credentials)
spreadsheet = client.open_by_key(docid)
for i, worksheet in enumerate(spreadsheet.worksheets()):
filename = docid + '-worksheet' + str(i) + '.csv'
with open(filename, 'wb') as f:
writer = csv.writer(f)
writer.writerows(worksheet.get_all_values())
ドキュメントの Exporting Spreadsheets セクションで説明されているAuthSubメソッドを使用してみてください。
スプレッドシートサービス用に別のログイントークンを取得し、エクスポート用に置き換えます。これをget_spreadsheet
コードに追加するとうまくいきました:
import gdata.spreadsheet.service
def get_spreadsheet(key, gid=0):
# ...
spreadsheets_client = gdata.spreadsheet.service.SpreadsheetsService()
spreadsheets_client.email = Gd_client.email
spreadsheets_client.password = Gd_client.password
spreadsheets_client.source = "My Fancy Spreadsheet Downloader"
spreadsheets_client.ProgrammaticLogin()
# ...
entry = Gd_client.GetDocumentListEntry(uri)
docs_auth_token = Gd_client.GetClientLoginToken()
Gd_client.SetClientLoginToken(spreadsheets_client.GetClientLoginToken())
Gd_client.Export(entry, file_path)
Gd_client.SetClientLoginToken(docs_auth_token) # reset the DocList auth token
Export
はPDFファイルのみを提供するようであるので、私はDownload
も使用したことに注意してください。
(2016年7月)現在の用語で言い換える: " GoogleからCSVまたはXLSX形式のGoogleシートをダウンロードするにはDrivePython ?を使用して」 (現在、Googleドキュメントは、Googleスプレッドシートへのアクセスを提供しないクラウドベースのワープロ/テキストエディタのみを指します。)
まず、他のすべての回答は、古い GData ( " Google Data")プロトコル 、 ClientLogin を使用しているため、かなり古くなっているか、古くなります。 、または AuthSub 。これらはすべて廃止されています。同じことが、Google Sheets API v3以前を使用するすべてのコードまたはライブラリにも当てはまります。
最新のGoogle APIアクセスは、主に Google APIs Client Libraries を含むAPIキー(公開データ)またはOAuth2認証(承認済みデータ)を使用して行われ、 Python用のもの を含みます。 (そして、いいえ、APIにアクセスするためだけに認証システム全体を構築する必要はありません...以下のブログ投稿を参照してください。)
OPで/によって要求されたタスクを実行するには、 Google Drive API への承認されたアクセスが必要です。おそらく、ダウンロードする特定のスプレッドシートをクエリしてから、実際のエクスポートを実行します。これは一般的な操作である可能性が高いため、これを行うコードスニペットを共有する blogpost を作成しました。これをさらに追求したい場合は、別の posts のペアと、Googleドライブへのファイルのアップロード方法とGoogleドライブからのファイルのダウンロード方法を説明するビデオを用意しています。
新しい Google Sheets API v4 もありますが、これは主に spreadsheet-oriented operations 、つまり、データの挿入、スプレッドシートの行の読み取り、セルの書式設定のためのものです。 、グラフの作成、ピボットテーブルの追加など、ファイルベースのリクエストではなく、Drive APIが使用する適切な場所でのエクスポート。
ドライブからGoogleスプレッドシートをCSVとしてエクスポートする例を確認するには、 this blog post を確認してください。 PythonでのGoogleスプレッドシートの使用の詳細については、同様の質問について この回答を書いた を参照してください。 XLSXやその他の ドライブでサポートされている形式 でシートをダウンロードすることもできます。
Google APIを完全に初めて使用する場合は、さらに一歩戻ってこれらのビデオを最初に確認する必要があります。
すでにG Suite APIの経験があり、両方のAPIの使用に関するビデオをもっと見たい場合:
これはgdata 2.0.1.4以降は機能しません。
Gd_client.SetClientLoginToken(spreadsheets_client.GetClientLoginToken())
代わりに、次のことを行う必要があります。
Gd_client.SetClientLoginToken(gdata.gauth.ClientLoginToken(spreadsheets_client.GetClientLoginToken()))
次のコードは私の場合に機能します(Ubuntu 10.4、python 2.6.5 gdata 2.0.14)
import gdata.docs.service
import gdata.spreadsheet.service
Gd_client = gdata.docs.service.DocsService()
Gd_client.ClientLogin(email,password)
spreadsheets_client = gdata.spreadsheet.service.SpreadsheetsService()
spreadsheets_client.ClientLogin(email,password)
#...
file_path = file_path.strip()+".xls"
docs_token = Gd_client.auth_token
Gd_client.SetClientLoginToken(spreadsheets_client.GetClientLoginToken())
Gd_client.Export(entry, file_path)
Gd_client.auth_token = docs_token
(12月16日)私が書いた別のライブラリを試してください: pygsheets 。 gspreadに似ていますが、google api v4を使用します。スプレッドシートをエクスポートするためのexport
メソッドがあります。
import pygsheets
gc = pygsheets.authorize()
# Open spreadsheet and then workseet
sh = gc.open('my new ssheet')
wks = sh.sheet1
#export as csv
wks.export(pygsheets.ExportType.CSV)
不要なオブジェクトの方向を削除することで、@ Cameronの答えをさらに簡略化しました。これにより、コードが小さくなり、理解しやすくなります。また、URLを編集しました。
#!/usr/bin/python
import re, urllib, urllib2
def get_auth_token(email, password):
url = "https://www.google.com/accounts/ClientLogin"
params = {
"Email": email, "Passwd": password,
"service": 'wise',
"accountType": "HOSTED_OR_GOOGLE",
"source": 'Client'
}
req = urllib2.Request(url, urllib.urlencode(params))
return re.findall(r"Auth=(.*)", urllib2.urlopen(req).read())[0]
def download(spreadsheet, worksheet, email, password, format="csv"):
url_format = 'https://docs.google.com/spreadsheets/d/%s/export?exportFormat=%s#gid=%s'
headers = {
"Authorization": "GoogleLogin auth=" + get_auth_token(email, password),
"GData-Version": "3.0"
}
req = urllib2.Request(url_format % (spreadsheet, format, worksheet), headers=headers)
return urllib2.urlopen(req)
if __name__ == "__main__":
import getpass
import csv
spreadsheet_id = "" # (spreadsheet id here)
worksheet_id = '' # (gid here)
email = "" # (your email here)
password = getpass.getpass()
# Request a file-like object containing the spreadsheet's contents
csv_file = download(spreadsheet_id, worksheet_id, email, password)
# Parse as CSV and print the rows
for row in csv.reader(csv_file):
print ", ".join(row)
私はこれを使用しています:シート上のcurl ' https://docs.google.com/spreadsheets/d/1-lqLuYJyHAKix-T8NR8wV8ZUUbVOJrZTysccid2-ycs/gviz/tq?tqx=out:csv 'シートこれは一般公開されます。
したがって、パブリックシートで作業できる場合は、python curlのバージョンが必要です。
表示したくないタブがあるシートがある場合は、新しいシートを作成し、パブリッシュする範囲をそのタブにインポートします。
Gspreadは確かに、GoogleCLとGdata(どちらも使用しており、ありがたいことにGspreadのおかげで段階的に廃止されました)よりも大幅に改善されています。このコードは、シートのコンテンツを取得するための以前の回答よりもさらに速いと思います。
username = '[email protected]'
password = 'sdfsdfsadfsdw'
sheetname = "Sheety Sheet"
client = gspread.login(username, password)
spreadsheet = client.open(sheetname)
worksheet = spreadsheet.sheet1
contents = []
for rows in worksheet.get_all_values():
contents.append(rows)
これは完全な答えではありませんが、 Andreas Kahler は、Googleドキュメント+ Google App Engline + Pythonを使用した興味深いCMSソリューションを作成しました。この分野での経験がないので、コードのどの部分が役立つか正確にはわかりませんが、チェックしてください。私はそれがGoogleドキュメントアカウントと連動してファイルを操作することを知っているので、あなたは何が起こっているのか理解できると思います。それは少なくともあなたを正しい方向に向けるべきです。
(2019年3月、Python 3)私のデータは通常機密ではなく、CSVに似た通常のテーブル形式を使用します。
このような場合、シートを単純に_publish to the web
_して、サーバーでCSVファイルとして使用できます。
(File
-> _Publish to the web ...
_-> _Sheet 1
_-> Comma separated values (.csv)
-> Publish
を使用して公開します)。
_import csv
import io
import requests
url = "https://docs.google.com/spreadsheets/d/e/<GOOGLE_ID>/pub?gid=0&single=true&output=csv" # you can get the whole link in the 'Publish to the web' dialog
r = requests.get(url)
r.encoding = 'utf-8'
csvio = io.StringIO(r.text, newline="")
data = []
for row in csv.DictReader(csvio):
data.append(row)
_