Dostęp do arkusza (nowego stylu, publicznego) Google jako JSON

Jak mogę uzyskać dostęp do zawartości (nowego stylu) arkusza Google a JSON? Moim celem jest dostęp do wartości z JavaScript, więc muszę być w stanie pobrać JSON przez HTTP.

Przykład: Jak mogę pobrać dane z tego arkusza jako JSON?

Próbowałem znaleźć odpowiedź przez wyszukiwarkę internetową, ale ostatecznie nie powiodło się:

Author: jochen, 2015-05-06

4 answers

Jeśli chcesz użyć najnowszego API (v4), musisz wykonać następujące czynności:

  1. Wygeneruj klucz API arkuszy kalkulacyjnych(patrz instrukcje poniżej).
  2. Udostępnij swój arkusz publicznie.
  3. Użyj żądania formularza:

    https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID/values/RANGE?key=API_KEY
    

Otrzymasz wtedy czystą odpowiedź JSON:

{
  "range": "Sheet1!A1:D5",
  "majorDimension": "ROWS",
  "values": [
    ["Item", "Cost", "Stocked", "Ship Date"],
    ["Wheel", "$20.50", "4", "3/1/2016"],
    ["Door", "$15", "2", "3/15/2016"],
    ["Engine", "$100", "1", "30/20/2016"],
    ["Totals", "$135.5", "7", "3/20/2016"]
  ],
}

Zauważ, że jeśli chcesz określić całą zawartość strony, identyfikator taki jak Sheet1 jest doskonale poprawny.

Zobacz Podstawowe Czytaj aby uzyskać więcej informacji.


Do wszystkich żądań należy dołączyć identyfikator (np. klucz API):

Żądaniom API Arkuszy Google dotyczącym danych publicznych musi towarzyszyć identyfikator, który może być kluczem API lub tokenem dostępu.

Aby utworzyć klucz API na stronie poświadczeń , wykonaj kroki opisane w połączonym dokumencie.

Upewnij się, że:

  1. Utwórz nową aplikację w Google Cloud Peron.
  2. Utwórz nowy klucz API.
  3. Dodaj interfejs API Arkuszy Google. (Menedżer API > Pulpit Nawigacyjny > Włącz API)

Zauważ, że możesz nadal uzyskać dostęp do publicznych danych bez zmuszania użytkownika do logowania:

W nowym interfejsie API arkuszy v4 nie ma wyraźnej deklaracji widoczności. Wywołania API są wykonywane przy użyciu identyfikatorów arkusza kalkulacyjnego. Jeśli aplikacja nie ma uprawnień dostępu do określonego arkusza kalkulacyjnego, zwracany jest błąd. Inaczej wezwanie wpływy.

Zauważ, że nie musisz publikować arkusza w Internecie. Wszystko, co musisz zrobić, to upewnić się każdy z linkiem może uzyskać dostęp do arkusza.

Po kliknięciu Utwórz poświadczenia W interfejsie API Arkuszy Google wybierz inne nie-UI, dane użytkownika, i mówi: "dane użytkownika nie mogą być dostępne z platformy bez interfejsu użytkownika, ponieważ wymaga interakcji użytkownika do logowania."możesz bezpiecznie zignorować tę wiadomość. Klucz API to wszystko, co naprawdę potrzeba, ponieważ są to dane publiczne.)

Typowe komunikaty o błędach:

W żądaniu brakuje poprawnego klucza API.

Nie włączyłeś param w swoim telefonie.

Klucz API nie jest prawidłowy. Podaj poprawny klucz API. Google developers console

Podałeś nieprawidłowy klucz API. Upewnij się, że poprawnie wpisałeś swój klucz. Jeśli nie masz jeszcze klucza, przejdź do Google developers console i utwórz jeden.

Nie znaleziono klucza API. Podaj poprawny klucz API.
Google developer console API key

Twój klucz API jest prawdopodobnie poprawny, ale najprawdopodobniej nie dodałeś uprawnień do Arkuszy Google. Przejdź do strony klucza API Google developer console i dodaj uprawnienia arkuszy.

Rozmówca nie ma uprawnień

Twój arkusz nie jest ustawiony na publicznie dostępny.

 23
Author: Senseful,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-11 03:05:31

W końcu (tak jakby) rozwiązałem swój problem. Na wypadek, gdyby ktoś inny wpadł w te same kłopoty, oto rozwiązanie, które wymyśliłem: {]}

  1. Aby arkusz był publicznie dostępny, należy go publicznie udostępnić. Odbywa się to w interfejsie internetowym Arkuszy Google, za pomocą pozycji menu File > Publish to the web ... > link > publish. Możliwe jest opublikowanie całego arkusza kalkulacyjnego lub pojedynczych arkuszy roboczych.

  2. API do dostępu dane z Arkuszy Google są programowo opisane na stronach internetowych API Google Sheets . Ten API wykorzystuje adresy URL formularza https://spreadsheets.google.com/feeds/.../klucz/worksheetId/.... Nieco dziwnie, znaczenie klucza i worksheetId wydaje się nie być wyjaśnione w dokumentacji API.

    Moje eksperymenty pokazują, że wartość klucza można znaleźć, biorąc część adresów URL używanych do uzyskania dostępu do arkusza za pośrednictwem interfejsu WWW (patrz również tutaj ). Kluczem jest wszystko po /d/, aż do następnego ukośnika. Dla arkusza kalkulacyjnego w pytaniu kluczem jest zatem 1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI. worksheetId wydaje się być liczbą całkowitą, podając pozycję arkusza w arkuszu kalkulacyjnym. Dla przykładu w pytaniu należy wiedzieć, że pokazany arkusz jest drugim arkuszem roboczym, worksheetId w tym przypadku jest 2.

    API zdefiniowało żądania public i private. Aby uzyskać dostęp do wyeksportowanego zasobu bez uwierzytelniania, public wnioski muszą być wykorzystane.

  3. Wywołania API do pobierania danych z arkusza kalkulacyjnego są wyjaśnione w sekcji "Pobieranie pliku listowego" (kliknij na zakładkę "protokół" w przykładach). Adres URL wymagany do wyodrębnienia danych z arkusza kalkulacyjnego w pytaniu to

    Https://spreadsheets.google.com/feeds/list/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/2/public/full

    Żądanie HTTP GET do tego adresu URL zwraca te dane jako XML. (Mam nie znalazłem sposobu, aby uzyskać dane jako JSON.)

  4. Zwykłe zabezpieczenia przed żądaniami między stronami utrudniają dostęp do danych za pośrednictwem wywołań RPC JavaScript XML w aplikacji internetowej. Jednym ze sposobów obejścia tego problemu jest proxy wywołań API przez serwer WWW (np. używając dyrektywy nginx proxy_pass).

Powyższe kroki są przynajmniej częściowym rozwiązaniem problemu w pytaniu. Jedyną trudnością jest to, że dane są zwracane jako XML zamiast jako JSON. Ponieważ dokumentacja API nie wspomina o JSON, może nie jest już możliwe wyodrębnienie danych w tym formacie?

 20
Author: jochen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:36

Oto jak uzyskać JSON używając tych samych parametrów URL:

"https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/values?alt=json";

Creds do @ jochen na odpowiedź ze ścieżką aż do XML "https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/od6/public/" + sheetID;

Jak wyjaśnia odpowiedź @ jochen, Ta sheetID jest oparta na kolejności arkuszy w arkuszu kalkulacyjnym.

 2
Author: bomberjackets,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-19 11:08:03

Szybszym rozwiązaniem jest użycie tego https://gist.github.com/ronaldsmartin/47f5239ab1834c47088e aby owinąć istniejący arkusz kalkulacyjny.

Najpierw musisz zmienić dostęp do arkusza na Anyone with link can View

Dodaj id i sheet param html do poniższego adresu URL.

Https://script.google.com/macros/s/AKfycbzGvKKUIaqsMuCj7-A2YRhR-f7GZjl4kSxSN1YyLkS01_CfiyE/exec

Np: Twój id jest twoim identyfikatorem arkusza, który is

1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI

I Twój arkusz, który jest

Sheet2

W Twoim przypadku możesz zobaczyć swoje dane tutaj jako json na

Https://script.google.com/macros/s/AKfycbzGvKKUIaqsMuCj7-A2YRhR-f7GZjl4kSxSN1YyLkS01_CfiyE/exec?id=1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI&sheet=Sheet2

Aby być bezpiecznym, powinieneś wdrożyć kod sheetAsJson.gs w gist github powyżej jako swój własny na Dysku Google.

 1
Author: owyongsk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 09:32:20