SSブログ

デスクトップ環境をperl便利にする!その3:クリップボードをHTMLデコード [perl]

perlでクリップボードのテキストをHTMLデコードし、結果をクリップボードに設定する。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
#!/usr/bin/perl
#----------------------------------------
# [Windows用]
# クリップボードのデータをHTMLデコードし、
# 結果をクリップボードに設定する。
use utf8;
use Encode;
use Win32::Clipboard;
use HTML::Entities;
my $clip = Win32::Clipboard();
exit 1 unless $clip->IsText(); # テキスト以外なら終了する
my $text = decode("cp932",$clip->GetText()); # テキスト取得
$text=HTML::Entities::decode_entities($text);
$clip->Set(encode("cp932",$text)); # テキスト設定
exit;
#----------------------------------------

上のコピペして、適当なところにclipboard_html_decode.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをhtmlデコードする。」
に変える。使い方は以下。
[1]htmlデコードしたいテキストをマウスで選択し、Ctrl+cでコピー。
[2]「clipboardをhtmlデコードする。」ショートカットをダブルクリック。
[3]Ctrl+vで貼り付け。

デスクトップ環境をperl便利にする!その2:クリップボードをHTMLエンコード [perl]

perlでクリップボードのテキストをHTMLエンコードし、結果をクリップボードに設定する。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
#!/usr/bin/perl
#----------------------------------------
# [Windows用]
# クリップボードのデータをHTMLエンコードし、
# 結果をクリップボードに設定する。
use utf8;
use Encode;
use Win32::Clipboard;
use HTML::Entities;
my $clip = Win32::Clipboard();
exit 1 unless $clip->IsText(); # テキスト以外なら終了する
my $text = decode("cp932",$clip->GetText()); # テキスト取得
$text=HTML::Entities::encode_entities($text);
$clip->Set(encode("cp932",$text)); # テキスト設定
exit;
#----------------------------------------

上のコピペして、適当なところにclipboard_html_encode.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをhtmlエンコードする。」
に変える。使い方は以下。
[1]htmlエンコードしたいテキストをマウスで選択し、Ctrl+cでコピー。
[2]「clipboardをhtmlエンコードする。」ショートカットをダブルクリック。
[3]Ctrl+vで貼り付け。

デスクトップ環境をperl便利にする!その1:クリップボードをユニークソート [perl]

perlでクリップボードのデータをユニークソートし、結果をクリップボードに設定する。
#windows端末で、perl環境が整っていることが前提ですので、ご注意を!
ソースは以下。
#!/usr/bin/perl
#----------------------------------------
# [Windows用]
# クリップボードのデータをユニークソートし、
# 結果をクリップボードに設定する。
use utf8;
use Encode;
use Win32::Clipboard;
my $clip = Win32::Clipboard();
exit 1 unless $clip->IsText(); # テキスト以外なら終了する
my $text = decode("cp932",$clip->GetText()); # テキスト取得
# 連想配列を使ってユニーク
my %hash=();
foreach $rec (split(/\n/,$text)){
    $rec=~s/\r//g;       # LFを削除
    next if($rec eq ""); # スペースは除外
    $hash{$rec}="";
}
$text="";
foreach $key (sort keys(%hash)){
    $text.=$key."\r\n";
}
$clip->Set(encode("cp932",$text)); # テキスト設定
exit;
#----------------------------------------

上のコピペして、適当なところにclipboard_sort_uniq.plという名前で保存する。
保存したファイルのショートカットをデスクトップに作成し、名前を「clipboardをuniq-sortする。」
に変える。使い方は以下。
[1]ユニークソートしたいデータ群をマウスで選択し、Ctrl+cでコピー。
[2]「clipboardをuniq-sortする。」ショートカットをダブルクリック。
[3]Ctrl+vで貼り付け。

Redmine REST APIをいじりたおす。 [perl]

仕事上、Redmineでタスク管理することにしたため、REST APIをごにょごにょするためのperlスクリプトを作成した。当初、その辺に転がっていたシェルをダウンロードして動かしてみたが、まったく動作しなかったので、自作することに。。。
結構完成度のたかいものができたので、皆様に展開します。
[位置情報]Redmine_ticket_control.pl
使い方は以下。
使用法: Redmine_ticket_control.pl [get|add|chg|del] [url] [jsonファイル名|json value]
 新規: new http://redmine/issues.json?key=[apikey]\&project_id=[id] [jsonファイル名|json value]
 変更: chg http://redmine/issues/[id].json?key=[apikey] [jsonファイル名|json value]
 削除: del http://redmine/issues/[id].json?key=[apikey]
 参照: get http://redmine/issues.json?key=[apikey]
      get http://redmine/issues.json?key=[apikey]\\&project_id=1
        get http://redmine/issues.json?key=[apikey]\\&project_id=1\\&set_filter=1\\&f%5B%5D=created_on\\&op%5Bcreated_on%5D=\\>\\<\\&v%5Bcreated_on%5D%5B%5D=2012-12-23\\&v%5Bcreated_on%5D%5B%5D=2012-12-23
      get http://redmine/issues/[id].json?key=[apikey]
   ※[apikey]
     redmineにログインし、右上の個人設定をクリック。
     APIアクセスキー欄にある表示を押すと確認できる。
   ※[json value例]
     トラッカー => \\{\\"issue\\":\\{\\"tracker_id\\":\\"2\\"\\}\\}
     ステータス => \\{\\"issue\\":\\{\\"status_id\\":\\"2\\"\\}\\}
     題名    => \\{\\"issue\\":\\{\\"subject\\":\\"てすとでーす\\"\\}\\}
     説明    => \\{\\"issue\\":\\{\\"description\\":\\"てすと\\\\r\\\\nでーす\\"\\}\\}
     担当者   => \\{\\"issue\\":\\{\\"assigned_to_id\\":\\"1\\"\\}\\}



Redmineによるタスクマネジメント実践技法

Redmineによるタスクマネジメント実践技法

  • 作者: 小川 明彦
  • 出版社/メーカー: 翔泳社
  • 発売日: 2010/10/13
  • メディア: 大型本



入門Redmine 第3版

入門Redmine 第3版

  • 作者: 前田 剛
  • 出版社/メーカー: 秀和システム
  • 発売日: 2012/08
  • メディア: 単行本



初めてのPerl 第6版

初めてのPerl 第6版

  • 作者: Randal L. Schwartz
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/07/25
  • メディア: 大型本


CGIでExec format error [perl]

cygwinで作成したCGIをUbuntuのapache2.2サーバーにおいたところ「Exec format error」なるものがerror.logに出力され、うまくうごかない。

Google先生に助けをもとめ試行錯誤をくりかえしようやく解決案にたどり着いた。
まえに、perlはutf-8で書け!とBlogにかいたが、正確には、「utf-8n」だった。
これからは、「utf-8n」をデフォルトにしようっと!!
ちなみに改行コードは「LF」だね。


Ubuntu上級活用マニュアル

Ubuntu上級活用マニュアル

  • 作者: 阿久津 良和
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/02/05
  • メディア: 単行本(ソフトカバー)



xyzzy設定 [perl]

perlスクリプトを作成するには、UTF-8で保存できるテキストエディタは必要不可欠。筆者は、昔からemacs信者であるため、Windowsであたかもemacsのように操作できるxyzzyを使用している。
ここからダウンロードできる。
インストールは、解凍して適当にフォルダに格納すればよい。
カスタマイズするには、環境変数XYZZYHOMEを設定する必要がある。
コンピュータのプロパティをひらき、環境変数ボタンをクリックし、ユーザ環境変数に変数名「XYZZYHOME」、変数値に「インストールしたフォルダ」を設定しよう。
これでカスタマイズの準備は完了。カスタマイズは、さっき環境変数に設定したインストールフォルダ配下に、「.XYZZY」ファイルを作成し行う。
筆者の.XYZZYファイルを以下にさらしておく。参考になるかもね。
;;====================================================================================
;; xyzzy セッティング
;;------------------------------------------------------------------------------------
; 文字コードしか変えられないけど(デフォルトではMule2.3風にC-x C-k f)
(global-set-key '(#\C-x #\RET #\f) 'change-fileio-encoding) 
; 改行コードの変更
(global-set-key '(#\C-x #\RET #\n) 'change-eol-code)

(load-library "isearch")

;(setq c-indent-level 2)
;(setq c-brace-imaginary-offset 0)
;(setq c-brace-offset -2)
;(setq c-label-offset -2)
;(setq c-argdecl-indent 0)
;(setq c-label-offset -2)
;;====================================================================================
;;個人カスタマイズ
;;------------------------------------------------------------------------------------
;;undo
(global-set-key '(#\C-/) 'undo) 
;;ime on/off
(global-set-key '(#\C-\\) 'toggle-ime) 
;;マウスコピーペースト
(defun mouse-right-press ()
  (interactive)
;;  (mouse-left-press)
  (paste-from-clipboard)) 
(global-set-key #\LBtnUp 'copy-selection-to-clipboard) 
(global-set-key #\MBtnDown 'mouse-right-press)
(global-set-key #\RBtnUp 'mouse-menu-popup)

;;------------------------------------------------------------------------------------
;; ファンクションキー設定
(global-set-key '(#\F1) 'overwrite-mode)
(global-set-key '(#\F2) 'kill-rectangle)
(global-set-key '(#\F3) 'yank-rectangle)
(global-set-key '(#\F4) 'goto-line)

;;------------------------------------------------------------------------------------
;;バッファを削除できるようにする
(setq *kill-buffer-kills-scratch* t)

;;------------------------------------------------------------------------------------
;;モードラインフォーマット
(setq-default mode-line-format "[%i] <%k:%l> (%M) - %f -") 

;;------------------------------------------------------------------------------------
;;タイトルバーフォーマット
(setq-default title-bar-format "%b")

;;------------------------------------------------------------------------------------
;;ステータスバー関連
(setq *status-bar-format* "p")
;;------------------------------------------------------------------------------------
;;Diff関連
(defun my-filer-diff-file ()
  (let ((file1 (ed::filer-fetch-file nil nil))
        (file2 (ed::filer-fetch-file nil t)))
    (unless (and file1 file2)
      (error "diffするファイルを指定して"))
    (diff file1 file2)
    (and (find-buffer ed::*diff-new-buffer-name*)
         (find-buffer ed::*diff-old-buffer-name*)
         (filer-cancel))))
(define-key filer-keymap #\M-f 'my-filer-diff-file)

;;------------------------------------------------------------------------------------
;;ミニバッファのIMEをOFFではじめる
(defvar *start-minibuffer-toggle-ime* nil)

(defun start-minibuffer-ime-off-1 (buf his)
  (when (get-ime-mode)
    (toggle-ime) (setq *start-minibuffer-toggle-ime* t)))

(defun start-minibuffer-ime-off-2 (buf his)
  (when *start-minibuffer-toggle-ime*
    (toggle-ime) (setq *start-minibuffer-toggle-ime* nil)))

(add-hook '*enter-minibuffer-hook* 'start-minibuffer-ime-off-1)
(add-hook '*exit-minibuffer-hook* 'start-minibuffer-ime-off-2)

;;------------------------------------------------------------------------------------
;; 辞書設定
(defvar *dictionary-eijiro-path* (merge-pathnames "edict/eijiro/" (si:system-root)))
(defvar *dictionary-gene-path* (merge-pathnames "edict/gene/" (si:system-root)))
;; メニュー定義
(setq *my-dictionary-popup-menu*
      (define-popup-menu
        (:popup nil "英和(&E)"
         (:item nil "英辞郎(&E)"
          #'(lambda ()
              (interactive)
              (setq *edict-dictionary-path* *dictionary-eijiro-path*))
          #'(lambda ()
              (if (path-equal *edict-dictionary-path* *dictionary-eijiro-path*)
                  :check)))
         (:item nil "GENE(&G)"
          #'(lambda ()
              (interactive)
              (setq *edict-dictionary-path* *dictionary-gene-path*))
          #'(lambda ()
              (if (path-equal *edict-dictionary-path* *dictionary-gene-path*)
                  :check)))
         )))
;; フローティングポップアップメニュー
;;(defun init-dictionary ()
;;  (interactive)
;;  (track-popup-menu *my-dictionary-popup-menu*))

;;------------------------------------------------------------------------------------
;; オート英単語翻訳 M-x autolookup-mode
(require "autolookup")

;;------------------------------------------------------------------------------------
;; ミニバッファの補完候補リストをチップヘルプにする
;;(setq *print-completion-list-hook*
;;'(lambda (list prefix &optional string)
;;(popup-string (format nil "Possible completions are ~D
;;  items:\n~{\n~A~}" (length list) list) (point))))

;;------------------------------------------------------------------------------------
;; Grep結果をダブルクリックで開く
(defun grep-mouse-left-press ()
  "grep結果をダブルクリックでファイルopen"
  (interactive)
  (let ((click (mod *last-mouse-click-count* 6)))
  (if (= click 2)
  (first-error)
  (mouse-left-press))))

  (defvar *grep-map* nil)
  (unless *grep-map*
  (setq *grep-map* (make-sparse-keymap))
  (define-key *grep-map* #\LBtnDown 'grep-mouse-left-press))
  (add-hook 'ed::*grep-hook* #'(lambda () (use-keymap *grep-map*)))
  (add-hook 'ed::*grepd-hook* #'(lambda () (use-keymap *grep-map*)))

;;------------------------------------------------------------------------------------
;; ファイラーでごみ箱を使って削除
(setq *filer-use-recycle-bin* t)

;;------------------------------------------------------------------------------------
;; 辞書引きモードにする
;;(setq *default-buffer-mode* 'edict-mode)

(global-set-key '(#\M-%) 'query-replace)

(export 'ed::html+-mode "ed")
(autoload 'html+-mode "html+-mode" t)
(pushnew '("\\.s?html?$" . html+-mode) *auto-mode-alist* :test 'equal)
(setq c-indent-level 4)


入門xyzzy

入門xyzzy

  • 作者: 山本 泰三
  • 出版社/メーカー: オーム社
  • 発売日: 2005/03
  • メディア: 単行本



Windows7でCygwin [perl]

今までXPモードにCygwinをインストールして使っていたが、いちいちXPモードを起動するのが、面倒になってきた。そこで、Windows7にCygwin環境を整えてみる。インストールはいたって簡単だ。
[1]Cygwinをインストールするフォルダを作成する。(例:C:\Cygwin)
[2]setup.exeをここからダウンロードして、1で作成したフォルダに保存する。
[3]インストール手順はXPと変わらない。本ブログの過去記事にかいているので、参考にしてほしい。

以降は私の備忘録になる。私はtcshを常用しているので、それ用の設定をかいておく。bashを使っている人には、参考にならないので、読み飛ばしてほしい。
[位置情報]タイムゾーンの設定。これをやらないとログイン時、tzset: command not found.とかいわれる。
[1]デスクトップのコンピュータアイコンを右クリックし、プロパティを選択。
[2]システムの詳細設定をクリックし、システムのプロパティを開く。
[3]詳細設定タブの環境変数ボタンをクリックする。
[4]ユーザー環境変数の新規ボタンをクリックする。
[5]変数名に「TZ」、変数値に「JST-9」を入れてOKをクリックする。

[位置情報]その他環境変数の設定
[1]デスクトップのコンピュータアイコンを右クリックし、プロパティを選択。
[2]システムの詳細設定をクリックし、システムのプロパティを開く。
[3]詳細設定タブの環境変数ボタンをクリックする。
[4]ユーザー環境変数の新規ボタンをクリックする。
[5]変数名に「Path」、変数値に「%Path%;C:\Cygwin\bin」を入れてOKをクリックする。
  ※C:\Cygwin\binはCygwinをインストールしたフォルダに読み替えてね
  ※これやらないとmintty起動したときにcommand not foundとかいわれる
[6]変数名に「SHELL」、変数値に「/bin/tcsh」を入れてOKをクリックする。

[位置情報].tcshrcの設定 ※Shift-JISで作成する必要がある。なんで!?
#--------------------------------------------------
# tcshrc
set path=(/usr/local/bin $path)
# プロンプト設定
set prompt="%m->%B[%~]%b "
# ターミナルのタイトルバー設定
printf "\033]2;${PWD}\007"
#--------------------------------------------------
# alias
alias ls        'ls --color -F'
alias h         'history'
alias rm        '/bin/rm -i'
alias purg      '/bin/rm -i *~ .*~ #*# .saves-*'
alias lpurg     '/usr/bin/find -name \*~ -exec rm -i {} \;'
alias less      'nkf -w \!* | /bin/less -r'
alias cd        'cd \!*;printf "\033]2;${PWD}\007"'
alias pushd     'pushd \!*;printf "\033]2;${PWD}\007"'
alias popd      'popd \!*;printf "\033]2;${PWD}\007"'
#--------------------------------------------------
# Windows Application
alias ne 'run /cygdrive/c/Tools/xyzzy/xyzzy "`cygpath -aw \!*`"'
alias e  'run /cygdrive/c/WINDOWS/explorer "`cygpath -aw \!*`"'

[位置情報]minttyの設定
[1]minttyを起動し、右クリックでメニューを表示
[2]Textをクリックし、Selectボタンでフォントを「MS ゴシック,9-point」に変更。
[3]Localeで「ja_JP」を選択。Character setで「UTF-8」を選択し、OKをクリック。

以外と簡単に動くなぁ・・・。Windows7 64bitなのに・・・。進歩したねぇ~Cygwin。

WindowsユーザーのためのUNIX入門―Windowsで使えるUNIX環境「Cygwin」で試して覚える

WindowsユーザーのためのUNIX入門―Windowsで使えるUNIX環境「Cygwin」で試して覚える

  • 作者: 藤森 水絵
  • 出版社/メーカー: 新紀元社
  • 発売日: 2004/02
  • メディア: 単行本



Windows 7 Professional 通常版 Service Pack 1 適用済み

Windows 7 Professional 通常版 Service Pack 1 適用済み

  • 出版社/メーカー: マイクロソフト
  • メディア: DVD-ROM



perlでIE操作-技集 [perl]

前回はperl上でIEを操作し、Google検索を実施するGoogleSearch.plスクリプトを作成した。その中で使用している技は、以下だ。
[1]IE起動
[2]フォームにテキスト入力
[3]ボタンクリック
の3つだ。今回は上記を含めて、ほかにどういう操作ができるかまとめてみる。
[位置情報]まずは、基本のモジュール宣言とIE起動。きほんきほん・・・
use utf8;
use Encode;
use Win32::OLE;
#Internet Explorerを起動
$ie=Win32::OLE->new('InternetExplorer.Application') or die Win32::OLE->LastError;

#Internet Explorerを見えるようにする
$ie->{Visible}=1;

[位置情報]目的のホームページ表示と表示待ち。
#Google を表示
$ie->Navigate("http://www.google.co.jp");
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}

[位置情報]フォームにテキストを入力する。入力したいテキストフォームのID(例:q)を指定しよう。※必ずWindows用の文字コードでencodeしよう。
#検索キーワード入力 ※うまくいかない場合はidを「q」「lst-ib」に変更してネ
$ie->document->getElementById("q")->{value}=encode("cp932","設定する文字列");

[位置情報]ボタンクリック。押したいボタンのID(例:btnG)を指定しよう。
$ie->document->getElementById("btnG")->click();
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}

[位置情報]IEを閉じる
$ie->Quit();

[位置情報]IEを見えなくする
$ie->{Visible}=0;

[位置情報]ホームページを見る
$ie->GoHome();
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}

[位置情報]履歴をもどったり、すすんだり。
#すすむ
$ie->GoForward();
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}
#もどる
$ie->GoBack();
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}

[位置情報]番外編:上の方をみて気づく人もいると思うが、テキストボックスなり、ボタンなりを操作する場合、idを指定する必要がある。JavaScriptを書いたことがある人は、知っていると思う。このidはどうやって調べるか?てっとりばやいのは、ホームページのソースを表示し、HTMLを解読することだ。以下に一応、例を記載しておく。詳しくは、JavaScriptの本とかみるとよくわかる。
■テキストボックスのHTML例(idはinput1)
<input type=text id=input1>
■ボタンのHTML例(idはBtn1)
<input type=button id=Btn1 value="ボタン">

[位置情報]番外編:HTMLのソースをみるのは、結構おっくうだ。とくに見やすくかいてないサイトなんかいっぱいある。で、めんどくさいので、操作できるHTMLオブジェクトのid一覧を表示するスクリプトを書いてみた。これをieObjlook.plというファイル名でutf-8で保存してほしい。
#!/usr/bin/perl
use utf8;
use Encode;
use Win32::OLE;

if($ARGV[0] eq ""){
    $title="";
}
else{
    $title=decode("utf8",$ARGV[0]);
}
$ie=0;
$sh=Win32::OLE->new('Shell.Application') or die Win32::OLE->LastError;
for(my $i=0;$i<$sh->Windows->Count;$i++){
    $class=Win32::OLE->QueryObjectType($sh->Windows($i));
    next if($class ne "IWebBrowser2");
    my $fullname=decode("cp932",$sh->Windows($i)->FullName);
    $fullname=~tr/[a-z]/[A-z]/;
    next if($fullname !~ /.+\\IEXPLORE.EXE$/);
    $wintitle=decode("cp932",$sh->Windows($i)->document->title);
    if($title ne ""){
        if($wintitle eq $title){
            $ie=$sh->Windows($i);
            last;
        }
        else{
            next;
        }
    }
    else{
        printf("class[%s] title[%s]\n",
               encode("utf8",$class),
               encode("utf8",$wintitle));
    }
}
exit if($title eq "");
die "Internet Explorer is not found." if($ie==0);
print "========================================\n";
printf("class[%s] title[%s]\n",
       encode("utf8",$class),
       encode("utf8",$wintitle));
print "========================================\n";
for($i=0;$i<$ie->document->getElementsByTagName("form")->{length};$i++){
    my $action=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{action});
    my $method=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{method});
    my $id=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{id});
    my $name=decode("cp932",$ie->document->getElementsByTagName("form")->$i->{name});
    printf("form(%d) action[%s] method[%s] id[%s] name[%s]\n",
           $i,
           encode("utf8",$action),encode("utf8",$method),
           encode("utf8",$id),encode("utf8",$name));
}
for($i=0;$i<$ie->document->getElementsByTagName("input")->{length};$i++){
    my $id=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{id});
    my $name=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{name});
    my $type=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{type});
    my $value=decode("cp932",$ie->document->getElementsByTagName("input")->$i->{value});
    printf("input(%d) type[%s] id[%s] name[%s] value[%s]\n",
           $i,
           encode("utf8",$type),
           encode("utf8",$id),
           encode("utf8",$name),
           encode("utf8",$value));
}
for($i=0;$i<$ie->document->getElementsByTagName("textarea")->{length};$i++){
    my $id=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{id});
    my $name=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{name});
    my $type=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{type});
    my $value=decode("cp932",$ie->document->getElementsByTagName("textarea")->$i->{value});
    printf("textarea(%d) id[%s] name[%s] type[%s] value[%s]\n",
           $i,encode("utf8",$id),encode("utf8",$name),
           encode("utf8",$type),encode("utf8",$value));
}
for($i=0;$i<$ie->document->getElementsByTagName("select")->{length};$i++){
    my $id=decode("cp932",$ie->document->getElementsByTagName("select")->$i->{id});
    my $name=decode("cp932",$ie->document->getElementsByTagName("select")->$i->{name});
    my $type=decode("cp932",$ie->document->getElementsByTagName("select")->$i->{type});
    my $selectedIndex=decode("cp932",
                             $ie->document->getElementsByTagName("select")->$i->{selectedIndex});
    printf("select(%d) id[%s] name[%s] type[%s] selectedIndex[%d]\n",
           $i,encode("utf8",$id),encode("utf8",$name),
           encode("utf8",$type),
           encode("utf8",$selectedIndex));
    for($j=0;$j<$ie->document->getElementsByTagName("select")->$i->options->{length};$j++){
        my $value=
          decode("cp932",$ie->document->getElementsByTagName("select")->$i->options->$j->{value});
        my $text=
          decode("cp932",$ie->document->getElementsByTagName("select")->$i->options->$j->{text});
        printf("select(%d)\toptions(%3d) value[%s] text[%s]\n",$i,$j,
               encode("utf8",$value),encode("utf8",$text));
    }
}
for($i=0;$i<$ie->document->getElementsByTagName("a")->{length};$i++){
    my $id=decode("cp932",$ie->document->getElementsByTagName("a")->$i->{id});
    my $name=decode("cp932",$ie->document->getElementsByTagName("a")->$i->{name});
    my $href=decode("cp932",$ie->document->getElementsByTagName("a")->$i->{href});
    printf("a(%d) id[%s] name[%s] href[%s]\n",
           $i,
           encode("utf8",$id),
           encode("utf8",$name),
           encode("utf8",$href));
}

[位置情報]使い方は、こうだ。まず、IEを起動して、以下コマンドを入力するとIEのクラスとタイトルが表示される。
$ perl ieObjlook.pl
class[IWebBrowser2] title[Google]

[位置情報]次に表示されたタイトルを指定して、オブジェクト一覧を表示する。具体的にはこうだ。
$perl ieObjlook.pl "Google"
========================================
class[IWebBrowser2] title[Google]
========================================
form(0) action[/search] method[get] id[] name[f]
input(0) type[hidden] id[] name[hl] value[ja]
input(1) type[hidden] id[] name[source] value[hp]
input(2) type[text] id[] name[q] value[]
input(3) type[submit] id[] name[btnG] value[Google 検索]
input(4) type[submit] id[] name[btnI] value[I'm Feeling Lucky]
input(5) type[hidden] id[gbv] name[gbv] value[2]
input(6) type[hidden] id[] name[oq] value[]
input(7) type[hidden] id[] name[aq] value[]
input(8) type[hidden] id[] name[aqi] value[]
input(9) type[hidden] id[] name[aql] value[]
input(10) type[hidden] id[] name[gs_sm] value[]
input(11) type[hidden] id[] name[gs_upl] value[]
textarea(0) id[csi] name[] type[textarea] value[]
a(0) id[gb_1] name[] href[http://www.google.co.jp/webhp?hl=ja&tab=ww]
a(1) id[gb_2] name[] href[http://www.google.co.jp/imghp?hl=ja&tab=wi]
a(2) id[gb_12] name[] href[http://video.google.co.jp/?hl=ja&tab=wv]
a(3) id[gb_8] name[] href[http://maps.google.co.jp/maps?hl=ja&tab=wl]
a(4) id[gb_5] name[] href[http://news.google.co.jp/nwshp?hl=ja&tab=wn]
a(5) id[gb_6] name[] href[http://www.google.co.jp/shopping?hl=ja&tab=wf]
a(6) id[gb_23] name[] href[https://mail.google.com/mail/?tab=wm]
a(7) id[] name[] href[http://www.google.co.jp/intl/ja/options/]
a(8) id[gb_51] name[] href[http://translate.google.co.jp/?hl=ja&tab=wT]
a(9) id[gb_10] name[] href[http://books.google.co.jp/bkshp?hl=ja&tab=wp]
a(10) id[gb_9] name[] href[http://scholar.google.co.jp/schhp?hl=ja&tab=ws]
a(11) id[gb_13] name[] href[http://www.google.co.jp/blogsearch?hl=ja&tab=wb]
a(12) id[gb_36] name[] href[http://www.youtube.com/?tab=w1&gl=JP]
a(13) id[gb_24] name[] href[https://www.google.com/calendar?tab=wc]
a(14) id[gb_31] name[] href[http://picasaweb.google.co.jp/home?hl=ja&tab=wq]
a(15) id[gb_25] name[] href[https://docs.google.com/?tab=wo]
a(16) id[gb_38] name[] href[https://sites.google.com/?tab=w3]
a(17) id[gb_3] name[] href[http://groups.google.co.jp/grphp?hl=ja&tab=wg]
a(18) id[gb_32] name[] href[http://www.google.co.jp/reader/?hl=ja&tab=wy]
a(19) id[] name[] href[http://www.google.co.jp/intl/ja/options/]
a(20) id[] name[] href[http://www.google.co.jp/url?sa=p&pref=ig&pval=3&q=http://www.google.co.jp/ig%3Fhl%3Dja%26source%3Diglk&usg=AFQjCNEmQuNg1ivauCid9lXp5yYSx6AHXw]
a(21) id[] name[] href[http://www.google.com/history/optout?hl=ja]
a(22) id[] name[] href[]
a(23) id[gb_70] name[] href[https://accounts.google.com/ServiceLogin?hl=ja&continue=http://www.google.co.jp/]
a(24) id[] name[] href[http://www.google.co.jp/preferences?hl=ja]
a(25) id[] name[] href[http://www.google.co.jp/advanced_search?hl=ja]
a(26) id[] name[] href[http://www.google.co.jp/language_tools?hl=ja]
a(27) id[] name[] href[http://www.google.co.jp/mgyhp.html]
a(28) id[] name[] href[http://www.google.co.jp/intl/ja/ads/]
a(29) id[] name[] href[http://www.google.co.jp/intl/ja/services/]
a(30) id[] name[] href[http://www.google.co.jp/intl/ja/about.html]
a(31) id[] name[] href[http://www.google.com/ncr]
a(32) id[] name[] href[http://www.google.co.jp/intl/ja/privacy.html]

現状は、form,input,textarea,select,aのタグのIDを一覧で表示できる。それぞれのオブジェクトに対する操作は、JavaScriptを解説しているサイトが役にたつだろう。これ便利でしょ・・・・w

ゼロからわかる Perl言語超入門

ゼロからわかる Perl言語超入門

  • 作者: 高橋 順子
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/02/23
  • メディア: 大型本



JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで

JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで

  • 作者: 山田 祥寛
  • 出版社/メーカー: 技術評論社
  • 発売日: 2010/11/27
  • メディア: 大型本



perlでGoogle検索(改) [perl]

前回、ブログに書いたGoogle検索スクリプトだが、あのままだと、「ガリガリ君」しか検索できないので、キーワードを指定できるように改造する。
[位置情報]キーワードの指定は、おなじみの「ARGV配列」を使用する。具体的にはこうだ。
#!/usr/bin/perl
use utf8;
use Encode;
use Win32::OLE;

#コマンド引数を検索キーワードに設定
if($ARGV[0] ne ""){
    $title=decode("utf8",$ARGV[0]);
}
else{
    print encode("utf8","キーワードを指定してください!"),"\n";
    exit;
}

#Internet Explorerを起動
$ie=Win32::OLE->new('InternetExplorer.Application') or die Win32::OLE->LastError;

#Internet Explorerを見えるようにする
$ie->{Visible}=1;

#Google を表示
$ie->Navigate("http://www.google.co.jp");
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}

#検索キーワード入力 ※うまくいかない場合はidを「q」「lst-ib」に変更してネ
$ie->document->getElementById("q")->{value}=encode("cp932",$title);

#「Google 検索」ボタン押下
$ie->document->getElementById("btnG")->click();

[位置情報]上記内容をコピーしてutf-8でファイルに保存してほしい。ファイル名はGoogleSearch.plでいいだろう。使い方は、こうだ。
$ perl GoogleSearch.pl "ガリガリ君"

ちょっとはなにかにつかえるかなぁ・・・。

できるポケット Google スマートに使いこなす基本&活用ワザ 180 [グーグルの便利ワザ160 改訂新版]

できるポケット Google スマートに使いこなす基本&活用ワザ 180 [グーグルの便利ワザ160 改訂新版]

  • 作者: 渥美 祐輔
  • 出版社/メーカー: インプレスジャパン
  • 発売日: 2011/09/26
  • メディア: 単行本(ソフトカバー)



perlでGoogle検索 [perl]

これまでブログに記載した内容で、perlによるInternet Explorerの起動、もしくは、起動中のInternet Explorerをperlの制御下にすることができる。今回は、実際のその技を使用して、ブラウザを制御してみる。
[位置情報]とりあえず以下のスクリプトをコピーし、utf-8で保存後、perlで起動してほしい。
#!/usr/bin/perl
use utf8;
use Encode;
use Win32::OLE;

#Internet Explorerを起動
$ie=Win32::OLE->new('InternetExplorer.Application') or die Win32::OLE->LastError;

#Internet Explorerを見えるようにする
$ie->{Visible}=1;

#Google を表示
$ie->Navigate("http://www.google.co.jp");
#表示待ち
while($ie->{ReadyState}!=4 || $ie->{Busy}){
    sleep(1);
}

#検索キーワード入力 ※うまくいかない場合はidを「q」「lst-ib」に変更してネ
$ie->document->getElementById("q")->{value}=encode("cp932","ガリガリ君");

#「Google 検索」ボタン押下
$ie->document->getElementById("btnG")->click();

[位置情報]上記は、IE起動し、Googleで「ガリガリ君」を検索するスクリプトだ。みてもわかるように、こんなに簡単に、Google検索アプリが作成できる。JavaScriptを知っている人は、察していると思うが、記載方法は若干異なるものの、HTML内のオブジェクト操作は、JavaScriptのそれと同じである。つまり、JavaScriptで可能なブラウザ操作は、perlでも可能ということだ。今後は引き続きperlでどこまでブラウザを制御できるか探ってみたい。

初めてのPerl 第5版

初めてのPerl 第5版

  • 作者: Randal L. Schwartz
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2009/10/26
  • メディア: 大型本



パーフェクトJavaScript (PERFECT SERIES 4)

パーフェクトJavaScript (PERFECT SERIES 4)

  • 作者: 井上 誠一郎
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/09/23
  • メディア: 大型本



この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。