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ę:
Wiele samouczków w Internecie zaczyna się od instrukcji, aby znaleźć wartość
key=...
w adresie url. Adres URL, który otrzymałem podczas eksportowania arkusza, tohttps://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/pubhtml?gid=1822753188&single=true
i nie ma w sobiekey=...
.Odpowiedź na "dostęp do publicznego arkusza Google" wydaje się wskazywać, że powinienem spróbować
https://docs.google.com/spreadsheets/d/1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI/export?format=csv&id=1mhv1lpzufTruZhzrY-ms0ciDVKYiFJLWCMpi4OOuqvI&gid=1822753188
aby uzyskać wersję CSV, ale to nie działa dla mnie: dostaję stronę logowania zamiast danych.Znalazłem podejścia za pomocą skryptów Google Apps, ale te wydają się wymagać pewnych działań użytkownika w przeglądarce, zamiast podawać link do pobrania.
4 answers
Jeśli chcesz użyć najnowszego API (v4), musisz wykonać następujące czynności:
- Wygeneruj klucz API arkuszy kalkulacyjnych(patrz instrukcje poniżej).
- Udostępnij swój arkusz publicznie.
-
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):
Aby utworzyć klucz API na stronie poświadczeń , wykonaj kroki opisane w połączonym dokumencie.Żądaniom API Arkuszy Google dotyczącym danych publicznych musi towarzyszyć identyfikator, który może być kluczem API lub tokenem dostępu.
Upewnij się, że:
- Utwórz nową aplikację w Google Cloud Peron.
- Utwórz nowy klucz API.
- 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:
Nie włączyłeś param w swoim telefonie.W żądaniu brakuje poprawnego klucza API.
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.
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: {]}
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.-
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 zatem1mhv1lpzufTruZhzrY-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 jest2
.API zdefiniowało żądania
public
iprivate
. Aby uzyskać dostęp do wyeksportowanego zasobu bez uwierzytelniania,public
wnioski muszą być wykorzystane. -
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
Żądanie HTTP GET do tego adresu URL zwraca te dane jako XML. (Mam nie znalazłem sposobu, aby uzyskać dane jako JSON.)
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?
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.
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
Aby być bezpiecznym, powinieneś wdrożyć kod sheetAsJson.gs
w gist github powyżej jako swój własny na Dysku Google.
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