Доступ к истории изменений Google Документов через API с помощью R? - PullRequest
7 голосов
/ 01 марта 2012

Я хочу скачать и проанализировать историю изменений одного из моих документов Google, используя R, чтобы узнать статистику, например, сколько изменений было сделано кем.

Я вижу, что уже есть несколько способов доступ к документам Google с использованием R.

Кто-нибудь знает заранее (до того, как я попытаюсь взломать мой путь), если или как это может быть (достаточно легко) сделано?.

Ответы [ 2 ]

4 голосов
/ 09 апреля 2012

API списка документов Google предоставляет вам доступ к списку ревизий, содержимому каждой ревизии, способу сохранения ревизии для данного обновления и т. Д.

Список ревизий может дать вам то, что вы ищете, но вам нужно будет более точно указать, какую статистику вы хотите.Обратите внимание, что исторические данные о том, кто сделал это изменение, могут быть немного неполными - см. Проблемы API с историей ревизий - Google Documents List API |Группы Google

3 голосов
/ 11 июня 2018

Пакет googledrive включает некоторые низкоуровневые функции API, которые можно использовать для этого.Например, вот как мы можем получить список ревизий для одного документа Google:

library(googledrive)
library(tidyverse)

# replace this with the ID of your google doc
# this doc is private, it wont work for you
fileId <- "1s0CPFXnMQjZNts6gYAnkcGXGSAgugTupzMf8YeoCbps"

# Get the name of the file and some other metadata
file <- build_request(
  path = "drive/v3/files/{fileId}",
  method = "GET",
  params = list(
    fileId = fileId,
    fields = "*"
  ),
  token = drive_token()
)
file_ret <-  process_response(make_request(file))

# Now for this doc, query the Drive API to get get URLs and other meta-data for all the revisions available to us

req2 <- build_request(
  path = "drive/v2/files/{fileId}/revisions",
  method = "GET",
  params = list(
    fileId = fileId
  ),
  token = drive_token()
)
revs2 <-  process_response(make_request(req2))

# See 
# https://developers.google.com/drive/api/v2/reference/revisions#resource
# for an explanation of each variable that we have here

# tidy revisions into a dataframe
revs2_df <-
  map_df(
    revs2$items,
    `[`,
    c(
      "kind",
      "etag" ,
      "id",
      "selfLink"   ,
      "mimeType"     ,
      "modifiedDate",
      "published"   ,
      "lastModifyingUserName"
    )
  )
# get exportLinks URLs out of its nest
revs2_export_url <- map_df(revs2$items, "exportLinks")
# bind together
revs2_df_bind <- bind_cols(revs2_df, revs2_export_url)

Результат включает для каждой ревизии дату, время, имя пользователя, который выполнил ревизию, и URL-адреса.чтобы экспортировать эту ревизию в файл загрузки:

# A tibble: 140 x 16
   kind   etag  id    selfLink mimeType modifiedDate published lastModifyingUs… `application/rt…
   <chr>  <chr> <chr> <chr>    <chr>    <chr>        <lgl>     <chr>            <chr>           
 1 drive… "\"H… 28367 https:/… applica… 2017-09-12T… FALSE     Gayoung Park     https://docs.go…
 2 drive… "\"H… 28487 https:/… applica… 2017-09-12T… FALSE     Gayoung Park     https://docs.go…
 3 drive… "\"H… 28862 https:/… applica… 2017-09-13T… FALSE     Gayoung Park     https://docs.go…
 4 drive… "\"H… 29221 https:/… applica… 2017-09-13T… FALSE     Gayoung Park     https://docs.go…
 5 drive… "\"H… 29258 https:/… applica… 2017-09-13T… FALSE     Gayoung Park     https://docs.go…
 6 drive… "\"H… 29434 https:/… applica… 2017-09-13T… FALSE     Gayoung Park     https://docs.go…
 7 drive… "\"H… 29454 https:/… applica… 2017-09-18T… FALSE     Gayoung Park     https://docs.go…
 8 drive… "\"H… 29603 https:/… applica… 2017-09-18T… FALSE     Gayoung Park     https://docs.go…
 9 drive… "\"H… 30108 https:/… applica… 2017-09-18T… FALSE     Gayoung Park     https://docs.go…
10 drive… "\"H… 30115 https:/… applica… 2017-09-21T… FALSE     Gayoung Park     https://docs.go…
# ... with 130 more rows, and 7 more variables: `application/vnd.oasis.opendocument.text` <chr>,
#   `text/html` <chr>, `application/pdf` <chr>, `application/epub+zip` <chr>,
#   `application/zip` <chr>,
#   `application/vnd.openxmlformats-officedocument.wordprocessingml.document` <chr>,
#   `text/plain` <chr>

Затем мы можем циклически перебрать URL-адреса экспорта, чтобы загрузить все ревизии, сравнить размер или количество слов или что-то еще, и в итоге получить некоторые графики, подобные этому:

Полный код для этих графиков приведен здесь: https://gist.github.com/benmarwick/1feaa2b2f0d7bc5f7e97903b8ff92aed

Имейте в виду, что существуют некоторые серьезные ограниченияистория изменений Google Drive, доступная через API.Например,

  • Когда многие пользователи редактируют одновременно, мы получаем только имя первого активного редактора в этом сеансе.Другие не фиксируются.
  • Когда за короткое время происходит много изменений, они объединяются Google в одну ревизию, и мы не можем видеть их по отдельности.У нас нет хорошего временного разрешения.
  • Более старые изменения удаляются Google для экономии места.Мы не знаем, каковы их правила для этого.
...