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));

続・tomblooでtumblrのpost先tumblelogを変更する

tomblooでtumblrのpost先tumblelogを変更する - zaknakの日記
やり方変えてvimperatorのpluginとして書いてみた。

:setchannelid [channel_id]

http://www.tumblr.com/tumblelog/private_123456 なら、
:setchannelid private_123456

デフォルトに戻すなら、
:setchannelid 0
(function(){
    const sv = Components.classes['@brasil.to/tombloo-service;1'].getService().wrappedJSObject;
    var channel_id = '0';

    sv.addBefore(sv.Tumblr,'appendTags', function(form,ps){
        if(channel_id != '0' || channel_id != ''){
            form.channel_id = channel_id;
        }
    });

    commands.addUserCommand(['setc[hannelid]'],
        'set tumblr channel_id',
        function(args){
            switch(args.length){
                case 0:
                liberator.echo(channel_id);
                break;

                case 1:
                channel_id = args[0];
                liberator.echo(channel_id);
                break;

                default:
                liberator.echoerr('too many args');
                break;
            }
        },{
            completer:function(context,args){
                context.title = ['channel_id'];
                context.completions = [
                    ['0','default'],
                    ['private_','prefix private tumblelog'],
                    ['private_123456','private tumblelog'],
                ];
            }
        }
    );
})();

tomblooでtumblrのpost先tumblelogを変更する

tumblrは一つのアカウントで複数のtumblelogを作ることが可能ですが、tomblooのpost先はデフォルトである my tumblelog に固定されています。そこで、アカウント内の別のtumblelogにpost出来るようにしてみようという試み。

//setPref('userConfig.tumblr.channel_id','');
addBefore(Tumblr,'appendTags', function(form,ps){
        var channel_id = getPref('userConfig.tumblr.channel_id');
        if(typeof channel_id == 'string' && channel_id != ''){
            form.channel_id = channel_id;
        }
});

post先は about:config に設定を作って指定。

extensions.tombloo.userConfig.tumblr.channel_id

という設定を作って、値にpost先とするtumbleleogのchannel_idを指定します。channel_idはpost先としたいtumblelogDashboardのurlから得ることが出来ます。

http://www.tumblr.com/tumblelog/private_123456

この場合は private_123456 がchannel_idとなります。post先をデフォルトに戻したいときは、設定自体を消すか、値に空文字を与えるかしてください。

vimperator使ってる人は、

:set! extensions.tombloo.userConfig.tumblr.channel_id=private_123456

で、post先を指定して、

:set! extensions.tombloo.userConfig.tumblr.channel_id=

で、post先をデフォルトにといった具合。

githubがuser pagesを作成出来るようになってた

http://pages.github.com/ に説明がある。"username.github.com"という名前でリポジトリを作るだけ。自分の場合だと "zaknak.github.com" となる。簡単。
http://github.com/zaknak/zaknak.github.com/tree/masterhttp://zaknak.github.com/

getCurrentUser()でuser名が取れない

models.Hatena.getCurrentUser()でuser名が取れない。多分、Myはてながリニューアルして http://www.hatena.ne.jp/my の構造が変わったせいっぽい。とりあえず、models.Hatena.getCurrentUser()の

'(//*[@class="username"]//strong)[1]/text()',

を、

'id("simple-header-body")/ul/li[@class="welcome"]/strong/a/text()',

としてみた。

09/05/10 追記

修正されました。

vimperatorからtomblooを利用してtumblrのアカウントを切り替える

vimperatorからtomblooのサービスを利用してtumblrはてなのアカウントを切り替えます。要tombloo かつ tombloo のアカウント切り替え機能が動作すること。
http://github.com/zaknak/vimperator/raw/master/plugin/logintumblr.js

コード貼ってあったけど省略 http://github.com/zaknak/vimperator/tree/master/plugin まで。

使い方

:logintumblr[!] [e-mail] [passwords]
:loginhatena[!] [id] [passwords]

 第1引数にログインしたいアカウントの e-mail または id を指定して実行します。タブ押下でログインマネージャに保存されているアカウントが補完リストに表示されるので、

通常は補完リストから引数を指定してください。パスワードはログインマネージャに保存されているパスワードが使用されますが、第2引数にて直接指定することも可能です。引数無しで現在ログイン中の e-mail または id を表示します。[!]で各動作後に dashboard または myはてな を開きます。

変更

  • 03/20
    • !指定で各動作後にdashboardを開くようにした。
  • 03/20 夜
  • 03/21 v0.1.3
    • 第2引数にパスワードを指定出来るようにした。