Yahoo! Groupsからの移行

Yahoo のアップロードコンテンツ削除方針の影響を受け、多くの Yahoo グループが代替サービスを探しています。明らかな選択肢は groups.io で、機能面で同等のサポートを提供し、グループコンテンツを自動的に移行してくれます。ただし、(1) 移行には初年度 220 ドルが必要で(その後はストレージ要件が 1 GB 未満であれば無料)、(2) 依然として Yahoo グループと同じメール中心の形式を採用しているという点があります。別のトピック(https://meta.discourse.org/t/yahoo-groups-to-discourse-migration/131587)で移行スクリプトの存在が言及されていましたが、現時点で確認できる範囲( admittedly 限定的ですが)では、メッセージの移行のみに対応しているようです。

Yahoo の変更によりグループが移行を余儀なくされる主な要因が、ファイルや写真の保存機能の喪失であることから、以下の 2 つの疑問が残ります。

  • Yahoo グループからアップロードされたコンテンツを Discourse インスタンスへ自動的に移行する方法はありますか?
  • Discourse 内でそのコンテンツを他のユーザーが利用・閲覧できるようにするオプションは何がありますか?現在確認できているのは、ユーザーがアップロードしたコンテンツを、そのユーザー自身による 1 つ以上のトピック(おそらく個別のカテゴリ)に配置する方法のみです。写真であれば比較的 straightforward ですが、グループにアップロードされた他のドキュメント(主に PDF、一部 .doc や .xls ファイル)の場合、ある程度の設定変更が必要になりそうです。ただし、他にも選択肢はあるでしょうか?

興味深いですね。Yahoo! グループがアップロードされたコンテンツを削除することになるとは知りませんでした。近所のために私がまだ管理している古い Yahoo! グループがあり、それを Discourse インスタンスに移行することを頭の片隅に置いていましたが、そろそろ本格的に取り組む時かもしれません。

移行の最も簡単な方法は、購読者リストを CSV としてエクスポートし、それを使って Discourse でユーザーベースを作成することだと思います。これは比較的 straightforward でしょう。

コンテンツについては、メールリストに送信されたメッセージの完全な履歴がメールに保存されていますか?もしそうなら、Thunderbird などのアプリを使ってすべてのメッセージをダウンロードし、MBOX 形式で保存できます。それさえあれば、インポート用のスクリプトがあります。このレシピが役立つと思います:Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc)

「アップロードされたコンテンツ」として説明されているものについては確信が持てません。私自身は Yahoo! グループをそのように使ったことがありません。それらを Yahoo! から取り出して Discourse で使えるようにするオプションが何があるかはわかりません。手作業になるかもしれません。そして、不要なものを整理して手放す良い機会かもしれません。

でも、Discourse は議論を重視しているため、すべてのコンテンツはトピックとして扱われます。トピックをウィキとして設定し、グループで維持管理できるようにすることは可能です。添付ファイルの追加や削除もできます。また、自分自身や厳選された他の人と会話するために使える個人メッセージもあり、そこでコンテンツを保持できるかもしれません。SSO を備えたファイル共有ツールを検討した方が簡単かもしれません。私のコミュニティでは、SSO を処理するプラグインがあり、非常にシームレスに動作する WordPress を使っています。多くのファイルを扱う場合は、Nextcloud インスタンスをセットアップすることもできます。

楽しんでください!

更新:ええと…移転の時期が来たことは確かですね。Yahoo! グループの有用性を制限するために、彼らは本当に劇的な措置を講じています。10 月 28 日(2 日後)からは新しいコンテンツの投稿ができなくなり、12 月 14 日にはコンテンツが削除されます。

私は持っておりません。というのも、私が対応しているリストのいずれかの管理者ではないからです。ただし、メッセージの移行については、discourse/script/import_scripts/yahoogroup.rb at main · discourse/discourse · GitHub および GitHub - jonbartlett/yahoo-groups-export: Export Yahoo Groups forum to file or database · GitHub で対応されているようです。また、グループ管理者であれば、メールアドレス付きでグループメッセージをエクスポートできます(一般ユーザーにはできません)。完全にワンクリックで簡単というわけではありませんが、現時点ではメッセージ自体が最も懸念される点ではないようです。

Yahoo グループは(提供していたのは)写真用(100 GB)およびその他のファイル用(2 GB)のストレージスペースを提供していました。私が所属しているグループでは、これらをメンバーの写真やグループに関心のあるアイテム、その他のさまざまなファイルの保存に利用しています。Y グループ内でメンバー間プライベートに送信されるようなものは、おそらくメールとして送られていたでしょうし、Y 側にはその記録は残らないはずです。それを移行することは可能だとは思いませんし、優先事項でもないと考えます。しかし、多くのグループにはそこに保存された大量の情報があり、移行時にそれを保存したいと考えているはずです。

そうかもしれません。繰り返しになりますが、AFAIK(私の知る限り)、Y グループの完全な置き換えとなるサイトは一つだけ存在し、それは Y グループの旧形式をわずかな変更のみで維持しています。いずれにしてもグループを移行する必要があるなら、より現代的なプラットフォームへ移行する方が良いのではないかと思っています。Discourse はまだメールとうまく連携しています(他の多くのフォーラムパッケージはそうではありません)。そのため、メールで受信し、メールで返信するという従来の方法に慣れている私のような人々でも、引き続きその方法を利用できます。また、少しのお金を節約できるのもありがたいことです。

さて、その後の進展についてです。このツール:

は、グループの内容を大量にダウンロードするのに非常にうまく機能しているようです。すべてのメッセージ、ファイル、添付ファイルなどが取得できます。メッセージはそれぞれ2つの.jsonファイルとしてダウンロードされ、1つは「raw」、もう1つはHTML形式です。前者は以下のようになります:

{
    "userId": 185744666,
    "authorName": "vhsproducts@aol.com",
    "from": "vhsproducts@...",
    "profile": "vhsproducts",
    "replyTo": "LIST",
    "senderId": "fc-T6L4xNaFRDleu_7gutRzgA_WWujKXanij68LOf7iz0WXh-BolDsmiqlo19adwRPTjwe0FpCYycg",
    "spamInfo": {
        "isSpam": false,
        "reason": "0"
    },
    "subject": "Re: [MicroTrak] Mint-Trak300 completed",
    "postDate": "1181013131",
    "msgId": 4,
    "canDelete": false,
    "contentTrasformed": false,
    "systemMessage": false,
    "headers": {
        "messageIdInHeader": "PGM3ZC5lNWZlOTFjLjMzOTYyZThiQGFvbC5jb20+"
    },
    "prevInTopic": 3,
    "nextInTopic": 6,
    "prevInTime": 3,
    "nextInTime": 5,
    "topicId": 3,
    "numMessagesInTopic": 4,
    "msgSnippet": "Outstanding work! I see you have the first gen of the Micro-Trak ( although we still sell them for people with TT3 SMT s) How long will a 9 volt run your GPS? ",
    "rawEmail": "Return-Path: <VHSProducts@...>\r\nX-Sender: VHSProducts@...\r\nX-Apparently-To: MicroTrak@yahoogroups.com\r\nReceived: (qmail 18487 invoked from network); 5 Jun 2007 03:13:19 -0000\r\nReceived: from unknown (66.218.67.36)\n  by m50.grp.scd.yahoo.com with QMQP; 5 Jun 2007 03:13:19 -0000\r\nReceived: from unknown (HELO imo-m23.mx.aol.com) (64.12.137.4)\n  by mta10.grp.scd.yahoo.com with SMTP; 5 Jun 2007 03:13:19 -0000\r\nReceived: from VHSProducts@...\n\tby imo-m23.mx.aol.com (mail_out_v38_r9.2.) id r.c7d.e5fe91c (29679)\n\t for <MicroTrak@yahoogroups.com>; Mon, 4 Jun 2007 23:12:11 -0400 (EDT)\r\nMessage-ID: <c7d.e5fe91c.33962e8b@...>\r\nDate: Mon, 4 Jun 2007 23:12:11 EDT\r\nTo: MicroTrak@yahoogroups.com\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; boundary="-----------------------------1181013131"\r\nX-Mailer: 9.0 Security Edition for Windows sub 5365\r\n(snip)"
}

一方、後者は以下のようになります:

{
    "userId": 185744666,
    "authorName": "vhsproducts@aol.com",
    "from": "vhsproducts@...",
    "profile": "vhsproducts",
    "replyTo": "LIST",
    "senderId": "oChpSVZSELyeHvFRyDX_nG5dfpdVZTLBKFMDvOg33fSsrDk5l-zpPohl42rhz6OhM9tFfSjAxxGsRg",
    "spamInfo": {
        "isSpam": false,
        "reason": "0"
    },
    "subject": "Re: [MicroTrak] Mint-Trak300 completed",
    "postDate": "1181013131",
    "msgId": 4,
    "canDelete": false,
    "contentTrasformed": false,
    "systemMessage": false,
    "headers": {
        "messageIdInHeader": "PGM3ZC5lNWZlOTFjLjMzOTYyZThiQGFvbC5jb20+"
    },
    "prevInTopic": 3,
    "nextInTopic": 6,
    "prevInTime": 3,
    "nextInTime": 5,
    "topicId": 3,
    "numMessagesInTopic": 4,
    "msgSnippet": "Outstanding work! I see you have the first gen of the Micro-Trak ( although we still sell them for people with TT3 SMT s) How long will a 9 volt run your GPS? ",
    "messageBody": "<div id=\"ygrps-yiv-810547383\">\n<html><head>\n \n</head> \n\n<font id=\"ygrps-yiv-810547383role_document\"\n face=\"Arial\" color=\"#000000\" size=\"2\">\n<div>Outstanding work! I see you have the first gen of the Micro-Trak ( although \nwe still sell them for people with TT3 SMT's) How long will a 9 volt run your \nGPS?</div>\n(snip)",
    "specialLinks": []
}

グループによっては、これらのファイルが数万、あるいは数十万に及ぶこともあります。ヤフーはヤフーらしく、通常のユーザーにはメールアドレスを隠しています。グループオーナーは確認できますし、モデレーターもできるかもしれませんが、それ以外の人は見られません。次に、これらのデータをDiscourseインスタンスに比較的簡単に一括インポートできるかどうか、あるいは前述のツールを使った方がよいのかを検討する必要があります。

このツールでは、ファイルや写真の他にも、アンケート、カレンダー、その他多くの項目もダウンロードされます。これらは私にはあまり関係ありませんが、他の人々には役立つでしょう。

もう一点、ヤフーのメッセージを注意深く読むと、ファイルや写真だけでなく、メッセージアーカイブも削除されることがわかります。これにより、アーカイブはもはや何の目的にも役立たなくなるでしょう。

Discourse への移行をお勧めします。

大手独占プラットフォームに依存する人を減らし、より多くの独立系ウェブサイトを増やす必要があります。

余談ですが、私は数年前に地元のコミュニティを Yahoo グループから Discourse に移行しました。それ以来、後悔したことはありません。共有コミュニケーションリソースに追加できる個人的なタッチはそれだけでも価値がありますが、追加機能はまさに付け加えの華です。

残念ながら、メールリストを除いては移行に関する実用的な経験を提供できません。私たちは単にゼロから始めました。なぜ古い Yahoo グループサイトをそのまま残してリンクを提供しないのでしょうか?本当に必要な添付ファイルはどれくらいありますか?最も重要なものだけをターゲットにすればよいのではないでしょうか?

幸運を祈ります。きっと大丈夫ですよ!

直接の決定権はありませんが、その方向に傾いています。私が最も懸念しているグループにとっては、ファイルや写真が大きな問題になるとは思っていません。すでにすべてダウンロード済みであり、数が少ないため、手動でトピックに追加しても大きな問題にはならないでしょう。

はい、まさに今、そのリスクの一端を目の当たりにしています。

なぜなら、6 週間後にはすべてのデータがそこから消えてしまうからです。

その JSON ファイルを読み込むインポーターを作成することはできますが、200 ドルとの競争はできません。通常、インポーターの作成と中規模フォーラム(数十万件の投稿)のインポートには、その10倍の料金を請求します。

つまり、私は次のものを使う方が良さそうです:

その後に:

…これらを理解すればですが。

(大きな編集あり–2 回目の試み)

Migrate from another forum to Discourse の手順に従って、メッセージのインポート処理に取り組んでいます。私の理解では、手順は以下のようになるはずです:

  • Install Discourse on Ubuntu or Debian for Development を使って開発環境をセットアップする
  • そのシステムに MongoDB をインストールする
  • そのシステム上で、Discourse を実行しているのと同じ非特権ユーザーとして、yahoo-group-export スクリプトを git clone する
  • 同じユーザーで gem install mechanizegem install mongo を実行する。その後、.config.yaml を編集して Yahoo の認証情報とグループ名を指定し、ruby bin/yg-export.rb を実行する
  • お好みの飲み物を 1 杯(あるいは 2 杯)飲む
  • yg-export が完了したら、Discourse ディレクトリ内で script/import_scripts/yahoogroup.rb を確認する。MONGODB_HOST(localhost)が正しいことを示すように編集する
  • discourse ディレクトリで bundle exec ruby script/import_scripts/yahoogroup.rb を実行する
  • 正しくインポートされたことを確認する
  • ライブサーバーにバックアップしてリストアする

ステップ 2〜4 は推測に基づいています。しかし、これは正しい手順でしょうか?これらが正しいと思い込んで進めました。ステップ 4 まで問題なく動作しました。yg-export.rb は約 1 時間実行され、すべてが SUCCESS と報告され、約 38k のメッセージが保存されました。データベース syncro には約 85MB のデータが含まれて存在しています。その時点で、VM のスナップショットを取得しました。

ただし、インポートスクリプトで問題が発生しています。bundle exec ruby script/import_scripts/yahoogroup.rb を実行すると、以下のようなエラーが表示されます:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Traceback (most recent call last):
script/import_scripts/yahoogroup.rb: Bootsnap::LoadPathCache::FallbackScan
        7: from script/import_scripts/yahoogroup.rb:4:in `<main>'
        6: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/kernel.rb:23:in `require'
        5: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:26:in `require'
        4: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:40:in `rescue in require'
        3: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
        2: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/loaded_features_index.rb:89:in `register'
        1: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': cannot load such file -- mongo (LoadError)

不思議ですね。すでに mongo gem をインストールしたと思っていたのですが。まあ、もう一度インストールしてみましょう:

dan@ubuntu:~/discourse$ gem install mongo
Successfully installed mongo-2.10.2
Parsing documentation for mongo-2.10.2
Done installing documentation for mongo after 4 seconds
1 gem installed

再度インポートスクリプトを実行しましたが、同じ結果です。システムレベルでインストールしても問題ないでしょうか?

dan@ubuntu:~/discourse$ sudo apt install ruby-mongo
[sudo] password for dan: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ruby-mongo is already the newest version (2.5.1-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

ますます不思議になってきました…

Gemfile に gem を追加し、bundle install を実行してください。そうしないと、bundle exec ruby script/import_scripts/yahoogroup.rb を実行しても gem が見つかりません。

それが私が欠かしていた部分でした。これでインポートが順調に進んでいます。ありがとうございます!

追記:OK、インポート処理は 75 分間実行され、投稿が現在表示されるようになりました。素晴らしいです。また、ユーザーも作成されました。これについては以前疑問に思っていました。しかし、ユーザーに関していくつかの問題が見受けられます。

  • Yahoo ユーザー名はすべて正しくインポートされたようです(リストのメンバーとして多くの名前を知っています)が、間違ったメッセージに紐付いてしまいました。これは一貫して起こっており、私が投稿したすべてのメッセージが、他の特定のユーザーによって投稿されたものとして表示されています。とはいえ、これは重大なエラーであり、手動で修正するのは非常に手間がかかります。
  • インポートされたすべてのユーザーは、今後 200 年間停止状態になっています。

これらの問題の両方は、Yahoo からダウンロードされたデータに有効なメールアドレスが含まれていないことに起因していると考えています。私がグループ管理者ではないことが明記されているため、後者の問題の原因はそれだとわかりますが、前者の問題も同様の原因かどうかはわかりません。ご意見をお聞かせください。

もしそれが原因であれば、調査する手掛かりは得られますが、同時に新たな問題も生じます。このグループには現在、2 人の存命するモデレーターがいることは知っていますが、所有者は過去 1 年以内に亡くなりました。誰かがその情報にアクセスできることを願っています…

こんにちは、

それに対応する新しいプラグインがあります。

開発版から Yahoo! のメッセージをすべてエクスポートし、以下のスクリプトを使ってカテゴリとしてインポートしました。
https://meta.discourse.org/t/topic-and-category-export-import/38930/38

その後、重複ユーザーや誤ったユーザーの問題が発生しました。
このプラグインを使用すると、Yahoo ユーザーを Discourse ユーザーと簡単にマージできます。

現在、残っている問題は Yahoo からの添付ファイルのみです。

それでは私の必要としていることが完全には解決できません。管理者ユーザー以外に、このインスタンスに存在するユーザーは Yahoo からインポートされたユーザーのみです。問題は、間違ったユーザー名が間違った投稿に紐付いていることです。私の投稿は(一貫して、私の知る限り)他の誰かのユーザー名に接続され、他の誰かの投稿が私のユーザー名に接続されています。

私は現在、このグループのモデレーター権限を付与されました。これにより、実際のメールアドレスが紐付いたメッセージをダウンロードすることが可能です。VM はそのために優れているので、再構築し、インポートをやり直して、これで問題が解決するか確認します。

こんにちは、なるほど、私の発見とは状況が異なりますね。私のコミュニティでは、インポートされた投稿は既存のコミュニティメンバーのいずれとも紐付いていませんでした。
リンクされたトピックに記載されている通りカテゴリをインポートした場合、ユーザーリストには重複したユーザー(あるいは新規ユーザー)しか表示されませんでした。

インポーターは投稿を誤ったユーザーに設定しましたが、その処理自体は正しい方法で行われていました。つまり、私がヤフーで書いた投稿が「Hans」と設定されていた場合、私のすべての投稿が「Hans」に設定されていたのです。

私のコミュニティフォーラムではユーザーID 1ですが、それは私が設定した開発用Discourseフォーラムの名前とは異なります。そのため、私のアカウントは上書きされず、同じ名前の別のアカウントが存在するだけでした。しかし、そのアカウントは誤った投稿と紐付いています。

現在、リンクされているプラグインを使用して、各ユーザーを私のフォーラム内の正しい人物に個別にマージしています。時間はそれほどかかりませんが、どの投稿がどのユーザーに属するかを特定するのは難しいです。

おそらく状況は異なるかもしれません。私の場合は「既存のコミュニティ」が存在しません。むしろ、すべてが Y グループからインポートされています。

OK、グループメッセージのダウンロード(完全なメールアドレスを含む)は取得できました。開発環境でいくつかの問題が発生しましたが、インポート作業を再開することができました。しかし、まだいくつかの問題が確認されています。

  • 誤ったユーザー名が誤った投稿に紐付いている問題は依然として残っています。
  • 上記の原因の1つとして、インポートされるユーザーの多くが「無効なメールアドレス」と判定されています。yahoo-export スクリプトによって生成された Mongo データベースでは、From 欄(インポートスクリプトがメールアドレスを読み取ろうとしている箇所)が、ほとんどのユーザーについて以下のように表示されています。
First Last &lt;user@domain.com&gt;

…これは Discourse が無効なメールアドレスとして拒否する形式です。その結果、ほとんどのユーザーには 5dc3e1b4f4d821bd7de3ce456eaf26d5@email.invalid のようなメールアドレスが割り当てられています。例外は、フルネームを添えずにメールを送信したユーザーのようです。

  • インポートされたメッセージには、クォート記号や大なり・小なり記号など、多くの HTML エンティティが含まれています。

  • 多くの(ただしすべてではありません)インポートされたメッセージには、件名にグループ名が含まれています:Re: [SpareOom] some subject。これらを削除できるとよいのですが。
    最後の3点については、データベース全体で単純な検索と置換を行うことで解決できるかどうか、また可能であれば、MongoDB を扱ったことがない私がどのように進めればよいか教えていただけますでしょうか。

  • 別の問題として、メッセージを指定されたカテゴリにインポートする方法です。yahoogroup.rb の冒頭にあるコメントによると、スクリプトを実行する前に export CATEGORY_ID=<CATEGORY_ID> とすることでこれを行えるようですが、<CATEGORY_ID> が何を指すかは示されていません。カテゴリの通常の名称や「カテゴリのスラッグ」(どちらも大文字小文字の違いのみ)を試してみましたが、どちらの場合もインポートスクリプトは以下のエラーで失敗しました。

         1: from /home/dan/discourse/lib/topic_creator.rb:36:in `create'
/home/dan/discourse/lib/topic_creator.rb:115:in `setup_topic_params': category (Discourse::InvalidParameters)

それは私の最初の mbox インポートと非常に似ていますね。私には数ヶ月かかりました。

はい、いくつかの置換で修正できる部分もあるかもしれません。

カテゴリ URL の末尾に .json を付けると、カテゴリ ID が取得できます。これは整数です。

ユーザー作成者が何識別子として使用しているか、そして投稿関数がユーザーを検索する際に何を使用しているかを確認する必要があります。あるいは、単に一致していないだけかもしれません。

yahoogroup.rb を確認すると、メッセージの From フィールドが単純なメールアドレスであることが必須であることが明確です。多くのユーザーはメールクライアントで名前も送信するように設定しているため(例:

Fred Flintstone <fred@flintstone.com>

)、これが問題 #1 です。少しググってみると、Mail gem を使用することでこの問題に対処できることがわかり、インポートスクリプトの該当行を以下のように変更する必要があります:

        email: Mail::ToField.new(user_info["ygData"]["from"]), # mandatory

これにより、メールアドレスのみが抽出されます。しかし、前述の通り、角括弧は HTML エンティティとして保存されているため、この方法は機能しません。さらに検索すると、HTMLEntities gem を使用すればこれを処理できることがわかり、以下のように試してみました:

        email: Mail::ToField.new(HTMLEntities.new.decode(user_info["ygData"]["from"])), # mandatory

しかし、downcase メソッドが存在しないためエラーが発生します。

編集:別のアプローチで回避を試みました。Nokogiri に関する多くの提案を目にしましたが、それらは角括弧のエンティティをデコードするものではなく、私の最も緊急なニーズに対応できませんでした。そのため、HTMLEntities に戻りました。Yahoo インポートスクリプトの先頭に require 'mail'require 'htmlentities' を追加し、75 行目(requires を追加する前は 73 行目)を上記のように変更しました。まだエラーが発生していますが、以前見落としていたのは、このスクリプトが 1 人のユーザーを正しく解析してインポートしてからエラーで終了するということです:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
(snip)
connected to db....

Importing from Mongodb....

Importing users
User created: user@host.tld
Traceback (most recent call last):
        8: from script/import_scripts/yahoogroup.rb:163:in `<main>'
        7: from /home/dan/discourse/script/import_scripts/base.rb:47:in `perform'
        6: from script/import_scripts/yahoogroup.rb:39:in `execute'
        5: from script/import_scripts/yahoogroup.rb:58:in `import_users'
        4: from /home/dan/discourse/script/import_scripts/base.rb:247:in `create_users'
        3: from /home/dan/discourse/script/import_scripts/base.rb:247:in `each'
        2: from /home/dan/discourse/script/import_scripts/base.rb:259:in `block in create_users'
        1: from /home/dan/discourse/script/import_scripts/base.rb:290:in `create_user'
/home/dan/discourse/script/import_scripts/base.rb:385:in `find_existing_user': undefined method `downcase' for #<Mail::ToField:0x00005575597e63b8> (NoMethodError)

(この出力のメールアドレスは伏せられていますが、ソースデータベースにはフルネームと角括弧のエンティティが含まれています。つまり、スクリプトへの変更は意図した通りに機能しているようです)。downcase はデフォルトで利用可能だと理解していたため、少し混乱しています。

編集 2:ユーザーの解析は成功しましたが、実際には Discourse インスタンスへのユーザーのインポートは行われていません。

メールの件は依然として手がかりがないのですが、当面はそれを横に置いて、HTMLEntities をトピックタイトルとメッセージ本文に適用できるか試すことにしました。yahoogroup.rb スクリプトの 110 行目を以下のように変更しました。

        topic_title = HTMLEntities.new.decode(topic_post["ygData"]["subject"])

さらに 116 行目も以下のように変更しました。

        raw: HTMLEntities.new.decode(topic_post["ygData"]["messageBody"]),

(上記で述べた 2 つの require 行を追加したため、元のスクリプトと比べて両方の行番号が +2 になっています。)
これで完璧に動作しました。ターミナルの出力は変わっていません(それは 105 行目で、実行を始めた後に気づきました)が、インポートされたインスタンス内のトピックタイトルとテキストは非常にきれいです。

つまり、この方法はトピックタイトルとメッセージ本文の整理には完璧に機能しているようですが、メールアドレスについては機能していません。その方面で何に注目すべきか、何かアイデアはありますか?そこでもう一度手がかりがつかめていません。

Yahoo グループからのデータインポートには、Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc) を使用した方が簡単かもしれません。mbox ファイルを使用するか、あるいはご指摘の JSON ファイルを、生メールテキストを含む個別の MSG ファイルに変換する方法もあります。

mbox インポートスクリプトは、mbox ファイルだけでなく個別ファイルに保存されたメールも処理できます。現在直面されている問題の多くは、すでに解決されている可能性があります。