pixivのブックマークに対応させてみる

11/7/13 追記
メンテしてないし低機能なので、pixivからブックマークと同時にPOSTできるTomblooパッチがサムネイル対応 | 圧縮電子精神音楽浮遊構造体を利用されることをおすすめします。追記終わり。



tomblooでpixivのブックマークに追加できる様にしてみるテスト。イラストを表示しているページ上でphoto及びlinkにて動作。当然、追加できるのはpixivのイラストのみということになります。

models.register({
    name : 'pixiv',
    ICON : 'http://www.pixiv.net/favicon.ico',
    check : function(ps){
        return (/(photo|link)/).test(ps.type) && ps.pageUrl.match(/^http:\/\/www\.pixiv\.net\/member_illust\.php/);
    },
    post : function(ps){
        return request('http://www.pixiv.net/bookmark_add.php', {
            sendContent  : {
                mode     : 'add',
                id       : ps.pageUrl.match(/illust_id=(\d+)/)[1],
                type     : 'illust',
                restrict : 0,        //1 で非公開
                tag      : ps.tags ? ps.tags.join(' '): '',
                comment  : joinText([ps.body, ps.description], ' ', true),
            },
        });
    }
});

10/03/01追記

トークンが必要になったので修正というかコピペ。
http://gist.github.com/318137

models.register(update({
    name : 'pixiv',
    ICON : 'http://www.pixiv.net/favicon.ico',
    check : function(ps){
        return (/(photo|link)/).test(ps.type) && ps.pageUrl.match(/^http:\/\/www\.pixiv\.net\/member_illust\.php/);
    },
    getToken : function(){
        var status = this.updateSession();
        switch (status){
        case 'none':
            throw new Error(getMessage('error.notLoggedin'));
        case 'same':
            if(this.token)
                return succeed(this.token);
        case 'changed':
            var self = this;
            return request('http://www.pixiv.net/bookmark.php').addCallback(function(res){
                    return self.token = $x(
                    '//form[@id="f"]/input[@name="tt"]/@value',
                    convertToHTMLDocument(res.responseText));
            });
        }
    },
    getAuthCookie : function(){
        //ログイン状態の判別が出来てない。仮で。
        return getCookieString('pixiv.net', 'PHPSESSID');
    },
    post : function(ps){
        return this.getToken().addCallback(function(token){
                return request('http://www.pixiv.net/bookmark_add.php', {
                    sendContent  : {
                        mode     : 'add',
                        tt       : token,
                        id       : ps.pageUrl.match(/illust_id=(\d+)/)[1],
                        type     : 'illust',
                        restrict : 0,        //1 で非公開
                        tag      : ps.tags ? ps.tags.join(' '): '',
                        comment  : joinText([ps.body, ps.description], ' ', true),
                    },
                });
            });
    }
}, AbstractSessionService));