gooブックマークにブックマークするPerlスクリプト
スポンサードリンク
gooブックマーク [bookmark.goo.ne.jp] にブックマークします。livedoor Clip [clip.livedoor.com] と構造がそっくりでしたw
WWW::Mechanizeの習作としてみてくれればと思います。なるべく WWW::Mechanizeは新しいものを使うように。古いのだと、自動遷移した後のURLが正しく取れない不具合があるので、うまく動きません。
use strict; use warnings; use WWW::Mechanize; use utf8; use Encode; # ID/Password my $username = 'abc01234'; my $password = 'xxxxxxxx'; # WWW:Mechanize スタート # my $mech = WWW::Mechanize->new(); my $mechurl = 'http://bookmark.goo.ne.jp/add'; $mech->get($mechurl); # $mechurl から https://login.mail.goo.ne.jp/certify-cgi # /login.cgi?site=bookmark.goo.ne.jp&success= # http%3A%2F%2Fbookmark.goo.ne.jp%2Fadd に遷移 # ログインフォーム入力 $mech -> submit_form ( form_name=>'f1', fields => { uname => $username, pass => $password, }, ); # ログイン後 https://login.mail.goo.ne.jp/certify-cgi # /login.cgi?site=bookmark.goo.ne.jp&success= # http%3A%2F%2Fbookmark.goo.ne.jp%2Fadd から $mechurl に遷移 # Bookmark Entry my $title = 'M.C.P.C.: gooブックマークにブックマークするPerlスクリプト', my $url = 'http://blog.dtpwiki.jp/dtp/2007/10/gooperl_a537.html', my $comment = 'gooブックマークへPerlスクリプトでブックマークします。要WWW::Mechanize。', my @taglist = ('Perl', 'goobookmark', 'gooブックマーク'); my $point = 2; # 評価(1-5) my $publicno = 0; # 公開設定 0->公開 1->友達まで公開 2->非公開 # 明示的に移動。ループで使うために (my $tmpurl = $url) =~ s|\+|%2b|g; $mechurl = "http://bookmark.goo.ne.jp/add/detail/?url=$tmpurl"; $mech->get($mechurl); # Form にブックマーク項目入力 $title = Encode::encode('utf8', $title); $comment = Encode::encode('utf8', $comment); my $tags = join(',', @taglist); $tags = Encode::encode('utf8', $tags), # 公開ブックマーク禁止URLをブックマークしようとしたときに非公開を選択して処理 $publicno = 2 unless ( decode('utf8', $mech->content() ) =~m|r0">公開</label>|); # 新規追加URLに遷移した場合 if ($mech->uri() =~m|^http://bookmark.goo.ne.jp/add/detail|) { $mech -> form_name('boomarkEdit'); $mech -> set_fields ( title => $title, keywordlist => $tags, point => $point, comment => $comment, publicno => $publicno, ); $mech -> click('addDetail'); } # 編集URLに遷移した場合 if ($mech->uri() =~m|^http://bookmark.goo.ne.jp/add/edit/|) { $mech -> form_name('boomarkEdit'); $mech -> set_fields ( #title => $title, #タイトルは全ユーザ共通 keywordlist => $tags, point => $point, comment => $comment, publicno => $publicno, ); $mech -> click('editEdit'); } exit 0;
(2007-10-12 18.27追記)
M.C.P.C.: gooブックマークはロボよけでNOINDEXを指定していると非公開ブックマークしかできない を受けて、公開ブックマークが禁止されているURLをブックマークしたときには、非公開でブックマークするように変更しました。
<ins># 公開ブックマーク禁止URLをブックマークしようとしたときに非公開を選択して処理</ins>
<ins>$publicno = 2 unless ( decode('utf8', $mech->content() ) =~m|r0">公開</label>|);</ins>
(2007-10-12 20.17追記)
http://bookmark.goo.ne.jp/add/detail/?url=
の後ろにURLを付ければブックマーク画面に遷移するのですが、URLに「+」を含む場合、エラー画面に遷移していて、うまく動かなかったので、とりあえず+だけパーセントエンコーディングしておきました。
<ins>(my $tmpurl = $url) =~ s|\+|%2b|g;</ins>
$mechurl = "http://bookmark.goo.ne.jp/add/detail/?url=$<ins>tmp</ins>url";
スポンサードリンク
トラックバック(1)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2246
gooブックマークは、ブックマークしようとしたページのmeta要素で、robotsによるロボ規制を「NOINDEX」にしていると、 meta name="robots" content="NOINDEX" ブックマーク時に、「非公開」しか選べなくなります。 ▲NOINDEX無しのページをgooブックマークでブックマークしたとき ▲NOINDEX有りのページをgooブックマークでブックマークしたとき 丁寧に作ってあるので、ラジオボタンの表示を「非公開」のみにしてくれます。 なんか処理させるものを作る場... 続きを読む
(my $tmpurl = $url) =~ s|\+|%2b|g;
$mechurl = "http://bookmark.goo.ne.jp/add/detail/?url=$tmpurl";
のは正規表現でやらずに
use URI;
#....
my $uri = URI->new('http://bookmark.goo.ne.jp/add/detail/');
$uri->query_form(
url => $url,
);
$mechurl = $uri->as_string;
でいけそげ。
はてなからのインポータにいただいたコード組み込んでみたら問題なく動きました!
でも、
オンラインブックマーク登録禁止! の同人サイトにも優しい配慮のgooブックマーク [ekken.blog1.fc2.com]
これに対処するにはどうしたらいいんでしょうね。ネタだと思って試してみたらほんとだったし。単純な遷移ではカバーできないってことか。(このスクリプトでは対処するところまではやりたくないなあ)