Is there a way to add a row on a Google Spreadshee

2019-06-23 19:03发布

I've searched a lot of websites about how to do that using only the spreadsheet key, but with no success. I can retrieve it, get all the data I want, but I can't append a new row to it.

I've already published my spreadsheet to the web and made it public but I keep getting " com.google.gdata.util.ServiceException: Method Not Allowed".

That's how I'm trying to do it:

SpreadsheetService service =
            new SpreadsheetService("MySpreadsheetIntegration-v1");

        try {

        URL url = FeedURLFactory.getDefault().getWorksheetFeedUrl(SpreadsheetRequest.KEY, "public", "full"); //KEY = "1cenwTRlrGMzMTufkK27IIgAHvEGwVKR9Yr59Qako3u0";

        WorksheetFeed worksheetFeed = service.getFeed(url, WorksheetFeed.class);
        List<WorksheetEntry> worksheets = worksheetFeed.getEntries();
        WorksheetEntry worksheet = worksheets.get(0);

        URL listFeedUrl = worksheet.getListFeedUrl();

        ListFeed listFeed = service.getFeed(listFeedUrl, ListFeed.class);
        List<ListEntry> list = listFeed.getEntries();

       //Checking all the entries, works like a charm
        for (ListEntry row : list) {
            Log.i("INSERT",row.getTitle().getPlainText() + "\t"
                    + row.getPlainTextContent());
        }

        ListEntry row = new ListEntry();

        row.getCustomElements().setValueLocal("id", "21");
        row.getCustomElements().setValueLocal("type", si.getType().toString());
        row.getCustomElements().setValueLocal("longitude", String.valueOf(si.getLongitude()));
        row.getCustomElements().setValueLocal("latitude", String.valueOf(si.getLatitude()));
        row.getCustomElements().setValueLocal("last_maint", String.valueOf(si.getLast()));
        row.getCustomElements().setValueLocal("inst_date", String.valueOf(si.getInst()));

        row = service.insert(listFeedUrl, row); //Exception is thrown here

        return true;
    }

2条回答
戒情不戒烟
2楼-- · 2019-06-23 19:27

Answer is No. OAuth token is like a key which allows Google to identify who is reading or who is writing to the spreadsheet and it won't allow if you don't have the correct access level. Even when you open Google spreadsheet with your browser the browser will generate an OAuth token from the Google identity provider and use that token to check whether your access level.

Update Here if you see how my browser handle the request done to the google spread sheet it will first redirect to the identity provider. Most of the time you need to simulate that in order to work.

enter image description here

查看更多
我只想做你的唯一
3楼-- · 2019-06-23 19:32

There is no way you can access or manipulate Google Drive API without OAUTH2.0. Additionally, Google Drive API wouldn't even work on private networks.

Fortunately, OAUTH2.0 is mandatory!!

This is the OAUTH2.0 Java code for spreadsheet----->

  1. OAUTH2.0-Java

  2. Android oauth2.0

查看更多
登录 后发表回答