저는 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이므로 이는 놀라운 일이 아닙니다.