pixivのイラストをブックマークするのをブックマーク追加画面に遷移せずに行いたい
イラスト表示画面でjQueryを使うにあたっての注意点
なぜか$(/*何がし*/)でindex:0に全件分のa要素が入ったjQueryオブジェクトが返ってくる件調査(jQuery AOPを使ってみた。) - 文殊堂で調べたが、
script.aculo.usとjQuery1.2.6のバッティング問題があり、
jQueryによる要素の取得が正しく行えないので、
jQuery本体が修正されるまではjQuery.makeArrayに以下のようにパッチを当ててやらないといけない。
jQuery.makeArray=function( array ) { var ret = []; if( array != null ){ var i = array.length; //the window, strings and functions also have 'length' if( i == null || array.split || array.setInterval || array.apply ) ret[0] = array; else while( i ) ret[--i] = array[i]; } return ret; };
今開いているイラストをブックマークする
とりあえずのたたき台
- 公開設定:公開
- コメント:無し
- グループ:引数dataのgroupに半角スペース区切りで設定
illust_idはURLから取得してくる
(function(data){ var originalData = data; data = {}; $.each(location.search.slice(1).split('&'),function(i,n){ var keyValue = n.split('='); if(keyValue[0] == 'illust_id'){ $.extend(data,{id:keyValue[1]}); } }); $.extend(data,{ mode:'add' ,type:'illust' ,restrict:'0' ,comment:'' },originalData); $.ajax({ type:'POST' ,url:'http://www.pixiv.net/bookmark_add.php' ,data:data }); })({group:'東方 咲夜 レミリア'});
グループ一覧の取得
http://www.pixiv.net/bookmark_group_setting.phpからスクレイピングする。
Twittelienと同じように空divのinnerHTMLにHTMLを代入するのは上手く行かなかった。
var temp = $('<div/>'); temp.get(0).innerHTML = html;
なので、↓のグリモンの101〜105行目を参考に、HTMLからDocumentオブジェクトを作ってみた。
http://d.hatena.ne.jp/Sybian/20071217/p1
これはoAutoPagerizeのコードが元のようだ。
これ以降2008/10/15修正
$.ajax({ type:'GET' ,url:'http://www.pixiv.net/bookmark_group_setting.php' ,success:function(html){ var frag = html.replace(/^([\n\r]|.)*?<html.*?>|<\/html([\r\n]|.)*$/ig,""); var htmlDoc=document.implementation.createDocument(null,"html",null); var r=document.createRange(); r.setStartAfter(document.body); htmlDoc.documentElement.appendChild(r.createContextualFragment(frag)); groups = $('#mypixiv_list>div[class^=bg_] a',htmlDoc).map(function(i,n){ return $(n).text(); }).get(); groups.pop(); console.info(groups); } });
mapメソッドとか使わないで以下のようなコードを使っているのは、
なぜか$(/*何がし*/)でindex:0に全件分のa要素が入ったjQueryオブジェクトが返ってくるため。
ブックマーク登録ページだと普通にindex:0〜nに各a要素が入ったjQueryオブジェクトが返ってくる。
謎だ。
解決したのでコードも修正した。
これ以降2008/10/15追記
タイトル・コメント・登録タグ一覧取得
title = $('title').text(); comment = $('#illust_comment').text(); tags = $('#tags a').map(function(i,n){ return $(n).text(); }).get();
タイトル・コメント・登録タグ一覧にあるグループを絞り込む
tagPattern= new RegExp(tags.join('|'),'g'); $.grep(groups,function(n){ if(tagPattern.test(n))return true; var groupPattern = new RegExp(n,'g'); return groupPattern.test(title) || groupPattern.test(comment) ; });
TODO
- 肝心のブックマーク登録用のDialogを出す
- グループ一覧をクライアント側でキャッシュ
- マッチの際の表記揺れ*1対応の為の辞書登録機能
- グリモン化