tombloo の tumblr post で form データをどう扱っているか
ここら辺りかなあ。
getForm
/** * ポストフォームを取得する。 * reblogおよび新規エントリーのどちらでも利用できる。 * * @param {Object} url フォームURL。 * @return {Deferred} */ getForm : function(url){ return request(url).addCallback(function(res){ var doc = convertToHTMLDocument(res.responseText); var form = formContents(doc); delete form.preview_post; form.redirect_to = Tumblr.TUMBLR_URL+'dashboard'; if(form.reblog_post_id){ Tumblr.trimReblogInfo(form); // Tumblrから他サービスへポストするため画像URLを取得しておく if(form['post[type]']=='photo') form.image = $x('id("edit_post")//img[contains(@src, "media.tumblr.com/") or contains(@src, "data.tumblr.com/")]/@src', doc); } return form; }); },
appendTags
/** * フォームへタグとプライベートを追加する。 * * @param {Object} url フォームURL。 * @return {Deferred} */ appendTags : function(form, ps){ return update(form, { 'post[tags]' : (ps.tags && ps.tags.length)? joinText(ps.tags, ',') : '', 'post[is_private]' : ps.private==null? form['post[is_private]'] : (ps.private? 1 : 0), }); },
favor
/** * reblogする。 * Tombloo.Service.extractors.ReBlogの各抽出メソッドを使いreblog情報を抽出できる。 * * @param {Object} ps * @return {Deferred} */ favor : function(ps){ // メモをreblogフォームの適切なフィールドの末尾に追加する var form = ps.favorite.form; items(Tumblr[ps.type.capitalize()].convertToForm({ description : ps.description, })).forEach(function([name, value]){ if(!value) return; form[name] += '\n\n' + value; }); Tumblr.appendTags(form, ps); return this.postForm(function(){ return request(ps.favorite.endpoint, {sendContent : form}) }); },