M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2007年10月11日 20:17

gooブックマークにブックマークするPerlスクリプト

このエントリーをはてなブックマークに追加 mixiチェック

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

投稿 大野 義貴 [Perl] | |

トラックバック(1)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2246

gooブックマークは、ブックマークしようとしたページのmeta要素で、robotsによるロボ規制を「NOINDEX」にしていると、 meta name="robots" content="NOINDEX" ブックマーク時に、「非公開」しか選べなくなります。 ▲NOINDEX無しのページをgooブックマークでブックマークしたとき ▲NOINDEX有りのページをgooブックマークでブックマークしたとき 丁寧に作ってあるので、ラジオボタンの表示を「非公開」のみにしてくれます。 なんか処理させるものを作る場... 続きを読む

コメント(2)

(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]

これに対処するにはどうしたらいいんでしょうね。ネタだと思って試してみたらほんとだったし。単純な遷移ではカバーできないってことか。(このスクリプトでは対処するところまではやりたくないなあ)

コメントする