M.C.P.C.

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


| トップページ |

2006年6月23日 00:31

ニフティクリップβにクリップするPerlスクリプト(2):複数Tag対応

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

前回のは、Tag が1つしか入らない(なぜなら、ニフティクリップβのクリップ登録画面の Tag 欄は、デフォルトで1個しかなくて、JavaScript で DOM 書き換えやら何やらで Tag 欄を増やしているからです)ので、なんだかがっくしでしたが、WWW::Mechanize では、取得した HTML を書き換えることによって、(フォーム改変して)を入力欄を増やすことが出来るので、それを使ってみて、複数 Tag に対応できるようにしてみました。

WWW::Mechanize - Perlオブジェクト中のハンディWebブラウザ [perldoc.jp] の、$mech->update_html( $html )メソッド を参考にしました。

あと、use utf8; にて積極的な UTF-8 ハンドリングと、Tag 芸が出来るように、Tag の入力順番を工夫しました(正順にいれると、実際には逆の順番で登録される仕様があるみたい)。

UTF-8 で保存してください! $username と $password は適宜設定してください!

#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use utf8;
use Encode;
 
# ID/Password
 
my $username = 'ABC01234',
my $password = 'xxxxxxxx',
 
# Clip Entry
 
my $title   = 'ニフティクリップβにクリップするPerlスクリプト(2):複数Tag対応';
my $url     = 'http://blog.dtpwiki.jp/dtp/2006/06/perl2tag_8383.html';
my $comment = 'ニフティクリップβへPerlスクリプトでブックマークします。複数Tag対応。要WWW::Mechanize';
my @taglist = ('Perl', 'niftyclipbeta', 'ニフティクリップβ');
my $public_flag = 1; # 0->Private 1->Public
 
 
# WWW:Mechanize スタート
#
 
my $mech = WWW::Mechanize->new();
my $mechurl = 'http://clip.nifty.com/create';
$mech->get($mechurl);
 
 
# $mechurl から https://clip.nifty.com/login に遷移
# ログインフォーム入力
 
$mech -> submit_form (
  form_name=>'login-form',
  fields => {
    username => $username,
    password => $password,
  },
);
 
 
# ログイン後 https://clip.nifty.com/loginから $mechurl に遷移
# input:tagname を増やす
 
my $rep = '';
my $taginputhtml = '
  <input class="tagname" name="tagname" type="text" />';
my $tag_n = scalar(@taglist);
for (my $i = 0; $i < $tag_n; $i++) {
  $rep .= $taginputhtml;
}
my $html = $mech->content;
$html =~ s|<div class="tag-form">.+?</div>|$rep|isg;
$mech -> update_html( $html );
 
# Form にクリップ項目入力
 
$mech -> form_name('savingForm');
$title   = Encode::encode('utf8',$title);
$comment = Encode::encode('utf8',$comment);
$mech -> set_fields (
  title   => $title,
  url     => $url,
  comment => $comment,
);
for (my $i = 0; $i < $tag_n; $i++) {
  $mech -> set_fields( 
    tagname =>
      [ Encode::encode('utf8',pop(@taglist)), $i+1 ] 
  ) ;
}
$mech -> untick('public_flag','on') unless $public_flag;
$mech -> submit(); 

投稿 大野 義貴 [Perl] | |

トラックバック(0)

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

コメントする