google-api-ruby-client: запрос результатов сериализации в пустых запросах - PullRequest
1 голос
/ 20 сентября 2019
replacement_requests = [
  Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{name}}", replace_text: "Joe"),
  Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{age}}", replace_text: "34"),
  Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{address}}", replace_text: "Westwood"),
]

batch_request = Google::Apis::DocsV1::BatchUpdateDocumentRequest.new(requests: replacement_requests)

Учитывая приведенный выше код, когда я передаю этот экземпляр BatcUpdateDocumentRequest в мою функцию service.batch_update_document, я получаю 400 неверных запросов.Похоже, это связано с тем, как пакетный запрос сериализуется.

Для иллюстрации, если мы вызываем batch_request.to_json, мы получаем следующее:

"{\"requests\":[{},{},{}]}"

Это говорит мне, что что-точто-то идет не так во время сериализации, однако мой код кажется довольно каноническим.

Есть какие-нибудь мысли о том, почему мои запросы не могут быть сериализованы?

1 Ответ

1 голос
/ 20 сентября 2019
  • Вы хотите использовать запрос replaceAllText с помощью google-api-client с ruby.
  • Вы уже можете размещать и получать значения для Документа Google с помощью API Документов Google.

Если мое понимание верно, как насчет этой модификации?В вашем скрипте тело созданного запроса {"requests":[{},{},{}]}.При этом возникает ошибка.Пожалуйста, измените скрипт следующим образом.

Точки модификации:

  • Используйте Google::Apis::DocsV1::SubstringMatchCriteria для contains_text из Google::Apis::DocsV1::ReplaceAllTextRequest
  • Используйте Google::Apis::DocsV1::Request для Google::Apis::DocsV1::ReplaceAllTextRequest.

С помощью вышеуказанной модификации создается тело запроса.

Модифицированный скрипт:

text1 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{name}}")
text2 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{age}}")
text3 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{address}}")

req1 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text1 , replace_text: "Joe")
req2 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text2, replace_text: "34")
req3 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text3, replace_text: "Westwood")

replacement_requests = [
    Google::Apis::DocsV1::Request.new(replace_all_text: req1),
    Google::Apis::DocsV1::Request.new(replace_all_text: req2),
    Google::Apis::DocsV1::Request.new(replace_all_text: req3)
]

batch_request = Google::Apis::DocsV1::BatchUpdateDocumentRequest.new(requests: replacement_requests)

# result = service.batch_update_document(document_id, batch_request)  # When you request with "batch_request", you can use this.

Тело запроса:

Когда указано вышеСценарий запускается, создается следующее тело запроса.

{"requests":[
  {"replaceAllText":{"containsText":{"text":"{{name}}"},"replaceText":"Joe"}},
  {"replaceAllText":{"containsText":{"text":"{{age}}"},"replaceText":"34"}},
  {"replaceAllText":{"containsText":{"text":"{{address}}"},"replaceText":"Westwood"}}
]}

Примечание:

  • При возникновении ошибки, связанной с авторизацией, пожалуйста, подтвердите области и был ли API Документоввключено.

Ссылки:

Если это не сработало, я прошу прощения.

...