Автоматизация новых сайтов Google через буфер обмена

Многие продукты Google, такие как документы и электронные таблицы, позволяют автоматизировать работу с помощью сценариев Google Apps. Заметно отсутствует новый Google Sites.

На днях я играл с сайтом Google и заметил, что вы можете копировать и вставлять большие объемы данных, и он будет правильно форматировать их даже между сайтами Google! Он отформатирует его в соответствии с целевым сайтом, сохранив при этом все изображения, стили, элементы и т. д.

Итак, хотя у нас еще нет скриптов для Google Sites, это заставило меня задуматься, есть ли способ частично автоматизировать обновление Google Site путем копирования значительных битов данных в буфер обмена пользователя? Затем пользователь сможет перейти на страницу сайта Google и вставить содержимое буфера обмена, и оно будет отформатировано идеально.

Я попытался использовать различные менеджеры буфера обмена, чтобы лучше понять, что Сайты Google помещают в буфер обмена, но не смог получить слишком много информации. Например, Pastebot отображал содержимое как «Txt», хотя явно использовал гораздо более богатые метаданные.

В идеале ищите сценарий, который можно запустить из сценария Google Apps в электронной таблице, который помещает эту информацию в буфер обмена пользователя.

Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
527
1

Ответы 1

Во-первых, лучший способ изучить буфер обмена — это создать простое приложение для macOS:

let pasteboard = NSPasteboard.general
for element in pasteboard.pasteboardItems! {
  for type in element.types {
    print(type)
    if let string = element.string(forType: type)?.prefix(30) {
      print(string)
    } else {
      let data = element.data(forType: type)
      print(data)
    }
  }
}

Запустив этот скрипт, вы заметите, что при копировании данных с Сайтов Google контент размещается в трех форматах:

  • Текст
  • public.html
  • com.apple.WebKit.custom-pasteboard-data

Перезапись содержимого буфера обмена подмножеством из них показывает, что, хотя public.html вставляет что-то в Сайты Google, форматирование отключено. Таким образом, com.apple.WebKit.custom-pasteboard-data — это то, о чем мы действительно заботимся.

Вы не можете преобразовать содержимое напрямую в строку, так как это приведет к сбою приложения или покажет тарабарщину в зависимости от выбранной вами кодировки. Если мы запишем его содержимое данных в файл на диске, мы сможем проверить его содержимое через Шестиугольный демон. Там вы увидите, почему это так:

Похоже, что текст начинается с простой кодировки Ascii и в конечном итоге кодируется JSON как UTF-16. Интересно, что формат кажется application/x-vnd.google-sites-document, но поиск в Google по этому формату не дает никаких подходящих результатов.

Следующий шаг — вернуться на Сайты Google, скопировать что-нибудь со словом «Тест» в буфер обмена, а затем использовать Hex Fiend для поиска est (00 65 00 73 00 74), затем попробовать заменить e на E, затем скопировать это в буфер обмена:

let url = URL(fileURLWithPath: "readdata")
let data = try! Data(contentsOf: url)
let pasteboardType = NSPasteboard.PasteboardType(rawValue: "com.apple.WebKit.custom-pasteboard-data")
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
assert(pasteboard.setData(data, forType: pasteboardType))
assert(pasteboard.pasteboardItems![0].types.count == 1)

После запуска этого кода и вставки на Сайты Google он показал слово TEst вместо Test, доказывая, что это возможно.

Мое исследование закончилось на этом, потому что мне нужно было запустить скрипт через скрипт Google Apps, работающий в электронной таблице Google. Однако исторически это был сложно скопировать текст в буфер обмена через Javascript, не говоря уже о необходимости делать это с помощью пользовательского формата (а не только текста) и с помощью скрипта Google Apps (вместо использования HTML DOM и API буфера обмена).

Если бы я продолжал идти по этому пути, я бы сделал следующее:

  1. В Сайтах Google создайте «шаблон» того, что я хочу вставить, с фиктивными значениями (например, Title goes here, Subtitle goes here и т. д.).
  2. Замените эти фиктивные значения реальными значениями.
  3. Разверните его на одной из этих платформ:

Поскольку в Google Apps Scripting нет простого в использовании API, стоимость обслуживания любого из этих решений может показаться вам слишком высокой, и вы просто надеетесь, что новые сайты Google получают поддержку сценариев приложений.

Другие вопросы по теме