Yahoo! Groupsからの移行

私は mbox ファイルを持っていませんし、それらを取得する方法も知りません。Yahoo はもちろん、ダウンロードを許可してくれません。JSON から mbox への変換ツールをご存知でしょうか?Google で検索すると、逆方向(mbox から JSON)の変換ツールは数多く見つかりますが、この方向をカバーするものはすぐには見当たりません。

当初は、Yahoo グループの移行に特化した既存のスクリプトが存在する以上、それらが実際に機能し、これが最も直接的な解決策になるだろうと考えていました。しかし、私の期待は楽観的すぎたようです。スクリプトは「動作」し、メッセージは移行され、ユーザーも「ある程度」移行されますが、メールアドレスの大部分が欠落しており、メッセージの大部分が間違ったユーザーに割り当てられているのは大きな問題です。

私がイライラしているのは、Ruby についてそれなりに知識がある人にとっては、これは些細な修正で済むはずなのに、残念ながら私はそのような人物ではないからです(挑戦はしていますが、すべてに十分な時間が割けません)。私のグループは小規模なので、必要であれば手動で修正できるかもしれません。しかし、できれば手動でやりたくないですし、何より重要なのは、他の Yahoo グループの所有者も使える一般的な方法を模索している点です。

編集:私が全く知らない言語でこれだけ処理できていることに感謝すべきなのでしょうが、それでもまだ何か重大な(当然であるべき)見落としがあるように感じています。Mail gem を使った別の方法を試してみました。私が編集した 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)

…これは、最高ユーザー ID が 290 であることを考えると、驚くべきことではありません。

Discourseには、どのユーザーが作成されなかったか、その理由を示すログはありますか?もしあれば、どこにありますか?

太字は私の誤りを強調したものです。実は、Yahoo は mbox ファイルのダウンロードを許可していますが、少し手間がかかりますし、どこにも mbox ファイルが取得できることを明記していません。Yahoo には 「マイデータの取得」ツール があります。そこにアクセスしてログインし、リクエストを送信すると、通知が届くまで待ちます(私の場合は約 1 週間でした)。その後、URL が記載されたメールが届き、そこから .zip ファイルをダウンロードできます。このファイルには、あなたがメンバーであるすべてのグループの大部分のコンテンツが含まれているようです(写真は欠落しているようです)。意外なことに、.mbox ファイルには、モデレーターではないグループのものも含め、完全なメールアドレスが含まれています。

というわけで、@gerhard さん、あなたの提案を軽視したのは早計だったようです。申し訳ありません。

編集:はい、.mbox の処理ははるかにうまく機能しているようです。いくつかのメッセージがスキップされています(日付がないため、約 100 件など)が、38,000 件のメッセージのほとんどが正常に取得され、すべてのユーザーも取得されました( spot チェックでは、すべてが正しい投稿に関連付けられていることが確認できました)。また、すべてに正しいメールアドレスが設定されています。トピックを完全にまとめることはできません(他のスクリプトも同様でしたが)、かなりうまくいっています。さらに、以前試していた方法よりも文書化が簡単になるというボーナスもあります。現時点で見られる唯一の欠点は、Yahoo がデータをダウンロード可能にするまでの遅延です。

ええと、それはかなり驚きですね。リストに参加している人なら、すでにメールアドレスを持っていると判断しているのでしょう。

これは良いニュースです。ダウンロードを実行しましたが、Yahoo! グループのメッセージの包括的なアーカイブが、便利でポータブルな mbox 形式で手に入っているようです。最高です!