반응형
키와 워크 시트 ID ( gid
)가 주어지면 Google 문서 도구 스프레드 시트를 다운로드하는 방법에 대한 Python 예제를 생성 할 수 있습니까? 난 못해.
API 버전 1, 2, 3을 살펴 봤습니다. 운이 없습니다. 컴파일 된 ATOM과 유사한 피드 API를 파악할 수 없습니다. gdata.docs.service.DocsService._DownloadFile
개인 메서드는 권한이 없다고 말합니다. 전체 Google 로그인 인증 시스템을 직접 작성하고 싶지 않습니다. 답답해서 얼굴을 찌르려고합니다.
몇 개의 스프레드 시트가 있는데 다음과 같이 액세스하고 싶습니다.
username = 'mygooglelogin@gmail.com'
password = getpass.getpass()
def get_spreadsheet(key, gid=0):
... (help!) ...
for row in get_spreadsheet('5a3c7f7dcee4b4f'):
cell1, cell2, cell3 = row
...
내 얼굴을 구 해주세요.
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 = 'xxxxxxxxx@gmail.com'
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
해결 방법
#!/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://stackoverflow.com/questions/3287651
반응형
'파이썬' 카테고리의 다른 글
파이썬에서 SQL 테이블을 JSON으로 반환 (0) | 2020.11.16 |
---|---|
파이썬 Cron 및 virtualenv (0) | 2020.11.16 |
파이썬 Python 용 Stanford NLP (0) | 2020.11.16 |
파이썬의 튜플에서 정수를 어떻게 얻습니까? (0) | 2020.11.16 |
파이썬 클래스의 모든 인스턴스 인쇄 (0) | 2020.11.16 |
댓글