Миграция из Yahoo! Groups

У меня нет mbox-файлов, и я не знаю способа их получить — Yahoo, конечно, не позволит мне их скачать. Знаете ли вы что-то, что могло бы конвертировать JSON в mbox? Google показывает множество инструментов для обратного преобразования, но я не вижу ничего, что решало бы эту задачу быстро.

Я ожидал, что, поскольку существуют скрипты, специально предназначенные для миграции групп Yahoo, они будут работать, и это был бы самый простой способ выполнить эту задачу. Похоже, мои ожидания были излишне оптимистичны: скрипты «работают» в том смысле, что они мигрируют сообщения, и как-то мигрируют пользователей, но отсутствие большинства адресов электронной почты и присвоение большинства сообщений не тем пользователям — это серьёзная проблема.

Меня расстраивает то, что это должно быть тривиальным исправлением для кого-то, кто действительно кое-что знает о Ruby, но, к сожалению, я не такой человек (я пытаюсь, но времени на всё никогда не хватает). Моя группа достаточно мала, и я, вероятно, смогу исправить всё вручную, если потребуется, но я бы предпочел не делать этого. Более того, я пытаюсь разработать общий метод, который смогут использовать другие владельцы групп Yahoo.

Редактирование: Я, наверное, должен быть рад, что справляюсь с таким объёмом работы на языке, в котором я совершенно не разбираюсь, но всё ещё чувствую, что упускаю что-то важное (что должно быть очевидным). Я попробовал использовать другой метод с библиотекой Mail. Изменённая часть функции import_users выглядит следующим образом:

    create_users(profiles.to_a) do |u|

      user_id = user_id + 1

      # fetch last message for profile to pickup latest user info as this may have changed
      user_info = @collection.find("ygData.profile": u["_id"]["profile"]).sort("ygData.msgId": -1).limit(1).to_a[0]

      # Store user_id to profile lookup
      @user_profile_map.store(user_info["ygData"]["profile"], user_id)

      puts "User created: #{user_info["ygData"]["profile"]}"
      
      user_email = Mail::Address.new(HTMLEntities.new.decode(user_info["ygData"]["from"]))

      user =
       {
        id: user_id,  # yahoo "userId" sequence appears to have changed mid forum life so generate this
        username: user_info["ygData"]["profile"],
        name: user_info["ygData"]["authorName"],
        email: user_email.address, # mandatory
        created_at: Time.now
      }
      user
    end

И это работает! Ну, в основном. Из 302 уникальных пользователей, подсчитанных скриптом, импортировано 289. Они отображаются на странице администратора с правильными именами пользователей, полными именами (если указаны) и адресами электронной почты. Скрипт сообщает, что импортированы все 302 пользователя, и ошибок не обнаружено. Но когда начинается импорт тем, возникает следующая ошибка:

Importing discussions
Topic: 1 / 12232  (0.01%)  Subject: Newspapers
Topic: 2 / 12232  (0.02%)  Subject: Ents
Traceback (most recent call last):
	8: from script/import_scripts/yahoogroup.rb:168:in `<main>'
	7: from /home/dan/discourse/script/import_scripts/base.rb:47:in `perform'
	6: from script/import_scripts/yahoogroup.rb:40:in `execute'
	5: from script/import_scripts/yahoogroup.rb:101:in `import_discussions'
	4: from script/import_scripts/yahoogroup.rb:101:in `each_with_index'
	3: from script/import_scripts/yahoogroup.rb:101:in `each'
	2: from script/import_scripts/yahoogroup.rb:132:in `block in import_discussions'
	1: from /home/dan/discourse/script/import_scripts/base.rb:535:in `create_post'
/home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/activerecord-6.0.0/lib/active_record/core.rb:177:in `find': Couldn't find User with 'id'=298 (ActiveRecord::RecordNotFound)

…что не удивительно, поскольку максимальный идентификатор пользователя равен 290.

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

Акцент сделан на моей ошибке. Оказывается, Yahoo позволяет их скачать, но это довольно сложный процесс, и нигде не указано, что вы получите именно файлы mbox. У Yahoo есть инструмент «Получить мои данные». Перейдите туда, войдите в систему, отправьте запрос и подождите уведомления от них (у меня это заняло около недели). Вам пришлют письмо со ссылкой, по которой можно будет скачать ZIP-архив, содержащий, по-видимому, большинство материалов всех групп, в которых вы состоите (фотографии, похоже, отсутствуют). В некоторой степени удивительно, но файлы .mbox содержат полные адреса электронной почты даже для групп, в которых вы не являетесь модератором.

Итак, @gerhard, похоже, я преждевременно отверг ваше предложение — приношу извинения.

Редактирование: Да, процесс с .mbox работает гораздо лучше. Некоторые сообщения пропускаются (~100, например, из-за отсутствия даты), но почти все 38 тысяч сообщений были сохранены, все пользователи также (и выборочная проверка показала, что они все связаны с правильными сообщениями), все с корректными адресами электронной почты. Это не идеально сохраняет темы вместе (другой скрипт тоже не справлялся), но работает довольно хорошо. И, как бонус, это более простой метод документирования по сравнению с тем, что я пытался сделать раньше. Единственный недостаток, который я пока вижу, — это задержка, необходимая Yahoo для предоставления ваших данных для скачивания.

Вау! Это действительно впечатляет. Видимо, они исходят из того, что если вы были в списке, то у вас уже есть адреса электронной почты.

Это отличная новость — я только что сделал загрузку, и похоже, что у меня есть довольно полный архив сообщений из моей группы yahoogroup, которую я хотел бы сохранить в удобном и переносимом формате mbox. Супер!