Courseraに日本語字幕をつけよう! > つぶやきCoursera和訳 > サーバーサイドの仕様

まずjsonengineを使用しています。
http://jxck.bitbucket.org/jsonengine-doc-ja/build/html/HowToUse.html

appengineのidはsubtitleliketweets。

docTypeは3種類:

srt { srtTitle: "some title", srtUrl: "http://url-to-video" }

この_docIdをsrtのidとして使います。

areaMap { textNum: 123, srtId:"xxxyyyzzz", a1: ["e", "", 1234567], a2: ["a", "abc@gmail.com", 12345577], .... }

srtIdはsrtの_docId。textNumはこのsrtに含まれるテキストの数。
a1, a2, a3,はそれぞれエリアを表している。エリアとは20個の文を含んだ範囲の事。
つまり、123文あるなら1+(123-1)/20 = 7エリアとなる。
それぞれのエリアが排他制御の単位。
a1: [,,,]
のそれぞれは、先頭が"e", "d", "a"のどれかの文字でそれぞれempty, done, assignedを表す。
a1: [,,,]の第二要素は現在assigneされてるユーザーのアカウント名。最初の文字が"a"の時だけ中が入ってる。
基本""かnullが入っている(アップロードのスクリプトで空にしといたら""にならなくて、面倒なのでそのまま放置してある…)

最後はいつ更新されたかを表すlongの値。1970年あたりからのミリセカンド。JSのnew Date()と同じ感じだと思う。
現時点では1時間以上立ってたらaの値は無視して"e"と思う事にしている(予約したままクラッシュした場合など)


text {srtId: "xxxyyyzzz", target: "日本語訳", original: "Origina english text", textId: 12, header:"00:14:35,959 --> 00:14:42,009" }

実際の翻訳したテキストが入ってる。一文1エントリ。targetが""じゃなければ訳した、とみなしている。
textIdはそのsrtの何番目の文か。最初は1。
本来cond=srtId.eq."xxxxyyzzz"&cond=textId.lt.20とかで取りたいのだが、jsonengineの制限で複数フィールドのクエリが出来ないので、今はtextIdのrangeリクエストで全部取ってからsrtIdはAndroid側でフィルタリングしている。

headerはexportする時に使うけど普段は気にしなくてオーケー。

areaMapのa1はtextIdの1〜20が、a2はtextIdの21〜40を担当している。

例えばtextIdが30の文を変更する場合:

1. areaMapを以下 a2:["a", yourname@gmail.com, 11223344] で更新。最後は現在時刻のlong値。
2. srtIdが対象としているsrtの_docIdでtextIdが30の文をget
3. 2でとったエントリの_docIdに対してtargetを変更してpost。

という感じ。
終了する時はareaMapの"a"を"e"に戻して下さい。
なお、"d"にするのは終わった時では無く、そこのエリアを予約した人が作業しようとした時に更新してます。


作業開始の探し方:

1. areaMapから自分のaccountか、1時間以上前か、"e"のエントリを探す
2. 上記エントリのtextを取得sいてみる
3. 全部targetが""じゃなければareaMapを"d"に更新して1に戻る
4. targetが""な文があったらareaMapを"a"に変更して作業開始(排他制御的には"a"に先にすべきだが)

こんな感じ。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年11月25日 21:07
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。