Мой проект был написан Ruby на Rails, поскольку гем google-api-client не поддерживает вставку изображения в электронную таблицу через apis листа, поэтому я использую скрипт приложения Google для решения этой задачи. В большинстве случаев вставка была успешной с этим вызовом:
@app_script.run_script(script_id, request)
Я просто предоставляю свой сценарий для всех, кому интересно: https://script.google.com/a/vectorgroup.vn/d/1ndcgpfJMj3YdKj0pEvHWz0pF4NtcQyR1Qg8wj7ZnpKfIwP2UsH0xaYq4/edit?splash=yes
иногда возникает проблема, при сбое вызова происходит следующая ошибка:
Сведения об ошибке: [{\ "@ type \" => \ "type.googleapis.com/google.apps.script.v1. ExecutionError \ ", \" scriptStackTraceElements \ "=> [{\" function \ "=> \" addImageOnSpreadsheet \ "}], \" errorMessage \ "=> \" Исключение: ошибка при получении изображения с URL или неверный URL: https://drive.google.com/uc?id=1MS6KMfua7kZCSGMUhny4kDUvalxTkoKJ&export=download \ ", \" errorType \ "=> \" ScriptError \ "}]" 2020-04-06T06: 03: 33.821Z pid = 26645 tid = tz8bh class = ImageTakerWorker jid = d847bf91beea8aeb4a30b042 истекло = 11,689 ИНФОРМАЦИЯ: выполнено Ошибка: 3 "" Сведения об ошибке: [{\ "@ type \" => \ "type.googleapis.com/google.apps.script.v1.ExecutionError \", \ "scriptStackTraceElements \" => [{ \ "function \" => \ "addImageOnSpreadsheet \"}], \ "errorMessage \" => \ "Исключение: ошибка при получении изображения с URL-адреса или неверного URL-адреса: https://drive.google.com/uc?id=1G9EDgvygwVztMG66FArZ6BEFpzW71izA&export=download \", \ "errorType \ "=> \" ScriptError \ "}]" 2020-04-06T08: 00: 28.330Z pid = 26645 tid = tz7zl class = ImageTakerWorker jid = a6b4fcb47db15f71dbf1d3f5 elapsed = 6.514 ИНФОРМАЦИЯ: выполнено "Вставить изображение ОШИБКА: #, #" "Ошибка: 3" "Сведения об ошибке: [{\" @ type \ "=> \" тип. googleapis.com/google.apps.script.v1.ExecutionError \ ", \" scriptStackTraceElements \ "=> [{\" function \ "=> \" addImageOnSpreadsheet \ "}], \" errorMessage \ "=> \" Exception : Ошибка при получении изображения из URL или неверный URL: https://drive.google.com/uc?id=1_3KzBDDgpINMCNkEZj2LivqdUaxFKZNT&export=download \ ", \" errorType \ "=> \" ScriptError \ "}]" 2020-04-06T08: 00: 28.941Z pid = 26645 tid = tzahx class = ImageTakerWorker jid = 8010f8c64cb9a0efa672b713 elapsed = 7.121 INFO: выполнено
Похоже, что проблема возникает с URL-адресом, так как скрипт приложения Google не может извлечь данные изображения. Но когда возникает проблема, я просто копирую и вставляю вышеуказанный URL изображения в журнал ошибок в браузер вручную, он может успешно загрузить изображение. Обратите внимание, что я уже установил publi c для URL изображения.
Ниже приведена часть скрипта моего приложения Google:
class GoogleAppScript
APPLICATION_NAME = "Insert image to spreadsheet".freeze
def initialize(user_id, sheet_id, options = {})
@user = User.find(user_id)
@sheet_id = sheet_id
@from_class = options[:from_class]
@service = options[:service]
@keyword = options[:keyword]
@sheet_name = options[:service] == "google" ? "G" + options[:keyword].strip : "Y" + options[:keyword].strip
@image_file_id = options[:image_file_id]
@google_authorization = GoogleAuthorization.new(@user).authorize
@app_script = Google::Apis::ScriptV1::ScriptService.new
@app_script.client_options.application_name = APPLICATION_NAME
@app_script.authorization = @google_authorization
end
def execute
script_id = "1ndcgpfJMj3YdKj0pEvHWz0pF4NtcQyR1Qg8wj7ZnpKfIwP2UsH0xaYq4"
url_image = "https://drive.google.com/uc?id=#{@image_file_id}&export=download"
start_col = 1
if @from_class == "ImageX"
start_row = 51
width = 692
height = 1500
else # "ImageY"
start_row = @keyword.last == " " ? 30 : 9
width = 694
height = 418
end
request = Google::Apis::ScriptV1::ExecutionRequest.new(
function: "addImageOnSpreadsheet",
parameters: [@sheet_id, @sheet_name, url_image, start_col, start_row, width, height],
)
begin
response = @app_script.run_script(script_id, request)
if response.error
# Retry until success
# ImageTakerWorker.perform_async(@user.id, @sheet_id, @sheet_name, @image_file_id)
p "Insert image ERROR: #{response}, #{response.error}"
p "Error: #{response.error.code}"
p "Error detail: #{response.error.details}"
else
p "Insert image successfully"
end
rescue Google::Apis::ClientError
# Handle the error...
end
end
end
У кого-нибудь есть опыт по этому поводу?