Yahoo! Groups에서 마이그레이션

저는 mbox 파일이 없고, 이를 얻을 수 있는 방법도 알지 못합니다. Yahoo에서는 mbox 파일을 다운로드할 수 있도록 허용하지 않습니다. JSON을 mbox로 변환하는 도구가 있는지 알고 계신가요? 구글 검색을 해보니 반대 방향(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 파일이 제공된다는 사실은 어디에도 언급되어 있지 않습니다. Yahoo에는 “내 데이터 가져오기” 도구가 있습니다. 해당 페이지로 가서 로그인하고 요청을 제출한 후, 통보를 받을 때까지 기다리면 됩니다(제 경우 약 1주가 걸렸습니다). URL이 포함된 이메일을 받게 되며, 해당 URL로 가서 .zip 파일을 다운로드할 수 있습니다. 이 파일에는 제가 가입된 모든 그룹의 콘텐츠 대부분이 포함된 것으로 보이지만(사진은 누락된 것으로 보입니다). 다소 놀랍게도, .mbox 파일에는 제가 관리자가 아닌 그룹의 경우에도 전체 이메일 주소가 포함되어 있습니다.

따라서 @gerhard님, 제안을 무시한 것은 성급했던 것 같습니다. 죄송합니다.

수정: 네, .mbox 프로세스가 훨씬 더 잘 작동하는 것 같습니다. 일부 메시지는 건너뛰어집니다(예: 날짜가 없어 보이는 경우 약 100개), 하지만 38,000개 이상의 메시지 중 거의 모든 것이, 모든 사용자가(무작위 검증을 통해 모든 사용자가 올바른 게시글과 연결되어 있는 것으로 확인됨) 올바른 이메일 주소와 함께 성공적으로 가져와졌습니다. 주제(토픽)를 하나로 묶어 두는 데는 완벽하지는 않지만(다른 스크립트도 그랬습니다), 상당히 잘 작동하고 있습니다. 그리고 보너스로, 제가 시도했던 것보다 문서화하기가 훨씬 더 간단한 방법입니다. 지금까지 발견한 유일한 단점은 Yahoo가 내 데이터를 다운로드할 수 있도록 준비하는 데 걸리는 지연 시간입니다.

와! 꽤 놀랍네요. 아마도 이미 목록에 가입되어 있다면 이메일 주소를 이미 가지고 있을 것이라고 생각하는 것 같습니다.

좋은 소식입니다 - 방금 다운로드를 마쳤는데, 제가 보관하고 싶은 yahoogroup의 메시지에 대해 꽤 포괄적인 아카이브를 가지고 있는 것 같습니다. 게다가 편리하고 휴대하기 좋은 mbox 형식이니 정말 좋습니다!