2016-04-05 14 views
1

Bir e-tabloyu Google spreedsheets'ten indirmek için python yordamını yazmaya çalışıyorum ve .xls olarak kaydedin. Bunu çalıştırmayı denediğinizde zaman burada ben gveri kitaplığı kullanarakGoogle E-tabloyu indir ve xls olarak kaydet

gdata.service.RequestError: {'status': 401, 'body': '<HTML>\n<HEAD>\n<TITLE>Unauthorized</TITLE>\n</HEAD>\n<BODY BGCOLOR="#FFFFFF" TEXT="#000000">\n<H1>Unauthorized</H1>\n<H2>Error 401</H2>\n</BODY>\n</HTML>\n', 'reason': 'Unauthorized'} 

Am altında bir gveri hatası alıyorum, benim kod

import os 
import sys 
from getpass import getpass 

import gdata.docs.service 
import gdata.spreadsheet.service 



''' 
    get user information from the command line argument and 
    pass it to the download method 
''' 
def get_gdoc_information(): 
    email ="mygmailaccount" 
    password ="mypassword" 
    gdoc_id = ['google_id1','googleid2','googleidn'] 
    for doc_id in gdoc_id: 
     try: 
      download(doc_id, email, password) 
     except Exception, e: 
      raise e 

#python gdoc.py 1m5F5TXAQ1ayVbDmUCyzXbpMQSYrP429K1FZigfD3bvk#gid=0 
def download(doc_id, email, password, download_path=None,): 
    print "Downloading the XLS file with id %s" % doc_id 

    gd_client = gdata.docs.service.DocsService() 


    #auth using ClientLogin 
    gs_client = gdata.spreadsheet.service.SpreadsheetsService() 
    gs_client.ClientLogin(email, password) 

    #getting the key(resource id and tab id from the ID) 

    resource = doc_id.split('#')[0] 
    tab   = doc_id.split('#')[1].split('=')[1] 
    resource_id = 'spreadsheet:'+resource 

    if download_path is None: 
     download_path = os.path.abspath(os.path.dirname(__file__)) 

    file_name = os.path.join(download_path, '%s.xls' % (doc_id)) 

    print 'Downloading spreadsheet to %s...' % file_name 

    docs_token = gd_client.GetClientLoginToken() 
    gd_client.SetClientLoginToken(gs_client.GetClientLoginToken()) 
    gd_client.Export(resource_id, file_name, gid=tab) 
    gd_client.SetClientLoginToken(docs_token) 

    print "Download Completed!" 


if __name__=='__main__': 
    get_gdoc_information() 

olduğunu. Bütün gün bununla mücadele ediyorum ve neler olduğunu anlayamıyorum. Herkes anlayabiliyor ve yardım edebilir mi? Yukarıda açıklandığı şekilde amacına ulaşabilecek herhangi bir minimum betik çok takdir edilecektir. Teşekkür ederiz

cevap

0

Ayrıca kütüphane pygsheets deneyebilirsiniz. (OP kodu dahil)

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.MS_Excel) 
0

(2017 Şubat) cevaplarının çoğu dışarı güncel 2012 yılında geri ClientLogin authentication was deprecated (!) Olarak şimdi, ve GData APIs Google API'larının önceki nesil bulunmaktadır. Tüm GVeri API'leri kaldırıldıktan olmasa da, all newer Google APIs çok daha güçlü & esnek Eski API bültenleri daha son Google Sheets API (v4) dahil değil kullanımını the Google Data protocol, yap.

Ancak, Tablolar API programlı (grafikler, pivot tablolar vb oluşturma, sütun yeniden boyutlandırma, biçimlendirme hücreleri, hücre doğrulama) tablo İşlemleri & özelliğe erişmek için temel olarak, fakat dosya-seviye erişimi gerçekleştirmek için dikkat XLS'ye (X) dışa aktarma gibi, bunun yerine Google Drive API kullanın. Sürücü API kullanarak örnekler: CSV (blog post)

  • "Zavallı adamın düz metin PDF" dönüştürücü (blog post) (*)
  • gibi bir Google Sheet İhracat

    • (*) - TL; DR: Drive'a düz metin dosyası yükleyin, Google Dokümanlar biçimine içe aktarın/dönüştürün, ardından bu Dokümanı PDF olarak dışa aktarın. Yukarıdaki mesaj Drive API v2'yi kullanır; this follow-up post, Drive API v3'e geçirmeyi açıklar ve burada hem "fakir insanın dönüştürücü" yayınlarını birleştiren bir developer video bulunmaktadır.

      OP'ye yönelik çözüm, yukarıdaki "Bir Google Sayfasını CSV Olarak Dışa Aktar" yayınında gördüğünüz işlemle aynı işlemi gerçekleştirmek, ancak text/csv'dan numaralı dışa aktarma MIME türünü değiştirmektir.Drive'a/Drive'dan diğer içe/dışa aktarma biçimleri için bkz. this related question SO answer ve downloading files from Drive docs page.

      my blog yanı sıra Google geliştirici videolar (series 1 ve series 2) Ben üreten ediyorum çeşitli kontrol genel olarak Python ile Google API'leri nasıl kullanılacağı hakkında daha fazla bilgi edinmek için.

    İlgili konular