うごメモPPM仕様まとめ(1) 作者IDと作品ID

うごメモ仕様まとめ一覧 - NoMeaning

作者ID

世界中のDSiを一意に識別するIDです。DSiID、うごメモIDと呼ばれることもあります。初期化などでIDは変化します。
長さは8byteで文字列で表す場合は大文字の16進法で表記します。
うち後半4byteは本体のMACアドレスの末尾4byteです。これはDSi固有のもので初期化しても変わりません。
MACアドレスの末尾がかぶる可能性はたぶん40億分の1ぐらいなのであんまりかぶらないです。
前半4byteはランダムです。
ユーザーのマイルームは http://ugomemo.hatena.ne.jp/(ID)@DSi/ という形式になります。

うごメモのファイル内にはバイナリで入っています。

作品ID

作品を一意に識別するIDです。

3つのセクションに分かれており、それらを「_」でつなげます。
PPMファイルの中にも同様のデータがあるのでそれをつなぎ合わせて作品IDを作ることができます。

場所 説明 PPMファイル内の扱い ID文字列への変換法
先頭6桁 DSiMACアドレスの末尾3byte。DSi固有ですが1600万分の1ぐらいの確立でかぶります。作者IDのMACアドレスの後ろ3byteとも一致します。 バイナリ 16進に変換
中央13桁 作品ごとに違うランダムな16進文字列。なぜか13桁という半端な桁数。1byteでも削るべきなのに生文字で保存しているところを見ると将来的な拡張の可能性があるかもしれない 普通に文字 ASCII文字列としてそのまま使う
末尾3桁 作品の更新回数で同じ作品を識別するために使われる。255を超える場合を必ず考慮する バイナリ 2byteを10進法の3桁(ゼロ埋め)に

アップロードされていれば「http://ugomemo.hatena.ne.jp/作者ID@DSi/movie/作品ID」でその作品のページに行くことができます。

SDカードにメモを入れる

SDカードにメモを入れる場合、以下のフォルダにPPMファイルを入れてください。

(SDカード)/private/ds/app/4B47554A

(4B47554Aは日本のリージョンのようなので、海外では違うかもしれません)
PPMファイルはたぶん正しい名前(作品ID)である必要があります。
作品IDが不明な場合でもPPMファイル中のデータから作品IDを求めることができます。

また、PPMの後ろについているチェックサムが一致しない場合、メモが改ざんされていると判定されうごメモで開こうとした地点で強制的に削除されます。
チェックサムは1024bitなのでRSA-1024っぽいですが、鍵がわからないと求まらないと思われます。

作者IDと作品IDを抜き出す正規表現

この作者ID+作品IDの組み合わせは作品ページ以外にPPMファイルやサムネイル画像などにも使われており、それらから作者IDと作品IDをとりたい場合があります。

どんな形式でも抜き出せるようにするためには正規表現を使うのが手っ取り早いでしょう。

現在私が利用している正規表現は以下です。

/([0-9A-F]{16})(?:@DSi)?/.*?([0-9A-F]{6}_[0-9A-F]{13}_[0-9]{3})

もっとよい方法があれば随時変えていっています。

投稿作品ID

追記です。
作品には、うごメモ内で「作品ID」と表記される、投稿した順番に振られるIDが存在します。
紛らわしいので、こちらのほうは「投稿作品ID」と呼びます。投稿されていないメモも含めたID(上のやつ)は「作品ID」と呼ぶことにします。

投稿作品IDは早いメモだとIDが1桁や2桁のものも存在します。
現在では3000万台に達しているようです。

たぶん、メモごとに全部違う作品IDだと長すぎるので、こちらをデータベースの主キーに使っているのでしょう。
シアターでは書いてあるのですが、残念ながらパソコン版などではなかなか見られません。
通報ページに書いてある程度です。通報ページはIDのある人しか見れないので、実質使い物になりません。


3/28 作品IDとSDカードについての記述を一部追加