Я создал импортер для yammer для одного человека, и он хочет, чтобы он был общедоступным. (Привет, @gerhard, думаю, это как раз в твоей зоне компетенции.) Я не до конца понимаю популярность yammer и то, скоро ли многие люди начнут искать новую платформу, или же большинство из них просто ожидают потерять свои данные при уходе с платформы.
Экспорт из yammer представляет собой набор CSV-файлов, поэтому скрипт импорта использует script/import_scripts/base/generic_database.rb. Он включает импорт личных сообщений (PM), что потребовало добавления нескольких таблиц в generic_database.rb. Мне показалось более логичным написать отдельный код для PM, чем пытаться заставить существующий код обрабатывать их, рискуя сломать его для других импортеров (zendesk, zendesk_api и answerbase), которые его используют. Кроме того, вложения обрабатываются иначе, чем в скриптах, использующих generic_database.rb, поэтому мои таблицы для PM не управляют загрузками так, как это делают другие (я не до конца понял, как это устроено у них). Я также добавил таблицу upload, вместо использования topic_upload и post_upload, как это делает общий импортер.
def create_upload_table
@db.execute <<-SQL
CREATE TABLE IF NOT EXISTS upload (
id #{key_data_type} NOT NULL PRIMARY KEY,
user_id INTEGER,
original_filename TEXT,
filename TEXT,
description TEXT,
url TEXT
)
SQL
end
Текущий код обрабатывает загрузки, когда находит на них ссылки в raw. Он также заменяет ссылки на пользователей на упоминания в формате @username из Discourse. Кроме того, он обрабатывает некоторые странные объекты opengraphobject и использует их, если они существуют, для генерации заголовков тем (которых не хватает в большинстве тем в дампе, для которого я это писал).
Вопросы:
- Не слишком ли много догадок, чтобы ответить на эти вопросы?
- Стоит ли мне создать PM для ядра проекта или просто разместить это как отдельный репозиторий (я включу скрипт, который скопирует код в исходное дерево Discourse и запустит его оттуда)?
- Выглядят ли изменения в
generic_databaseразумными, или мне следует придумать способ добавить методы в этот класс внутри моего скрипта импорта, или просто включить свои дополнительные функции в собственный скрипт и обращаться к глобальному@db?