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