復帰。
月曜日, 12月 19th, 2005サーバのperlのバージョンあげた影響でMovableTypeがちゃんと動かなくなってた(ちと特殊な環境なので)んですが、動くように修正が先日完了したのでちょっと書き込みをば。
しかし、よくよく見たら去年の7月ですか、最後のエントリ(汗
mixiもなんか人数ふえすぎて、はっきりいってピンポイントでしか活動してないのでこっちをメインに復帰ということで。
年末年始に予定ないしから書くことないけどなッ……orz
サーバのperlのバージョンあげた影響でMovableTypeがちゃんと動かなくなってた(ちと特殊な環境なので)んですが、動くように修正が先日完了したのでちょっと書き込みをば。
しかし、よくよく見たら去年の7月ですか、最後のエントリ(汗
mixiもなんか人数ふえすぎて、はっきりいってピンポイントでしか活動してないのでこっちをメインに復帰ということで。
年末年始に予定ないしから書くことないけどなッ……orz
会員数100万人突破とか聞いて、そろそろmixiどうでもいいなぁという気分がかなりあるんですが、うっかり自サイトのMovableType(以下MT)を動かなくしてしまったので、適当な思い付きをこっちに書き散らすことにします。最近やってること。[RagnarokOnline(以下RO)]ROをはじめて以来、初の支援プリ(INT=VIT>DEXのSW10/サンク7型予定)を育成中。[ウェブ関係]ROの現所属ギルドのメンバー専用サイト開発。で、開発完了の実装済み機能一覧1.メンバー管理機能(基本認証情報を一括管理)2.経費処理機能(申請画面、支払い状況&費用管理)3.装備品のレンタル状況4.やっつけ仕事の掲示板(オマケ)全部、Perl5.8.4+CGI+DBI(DBD::SQLite)で作成のCGI。いちいち考えるのがかったるいから文字コードはUTF-8。とりあえずレンタル状況は改良しようと思っている。あとは何がいるかなあ。……そだ、出席予定表つくってみっかな。#かんぺき独り言だな、これ。
…
……
………
あー……VBScript、かったるいー。
(そういやサーバにもActivePerl入ってるからPerScriptで書いてもよかったのか……<独り言)
とか思いながらも、WSHはいくつか過去に作ってきてるので、ときどき苦戦しつつもコンピュータ名、OSバージョン+SPバージョン、NIC、IPアドレス、MACアドレス、インストール日を取得するWSHがまず完成。
CSCRIPT /NOLOGO
が勝利のカギだ(?)
よし、次のステップだってことでコイツの拡張を考える。
とりあえず作成できたプログラムだと指定されたPC1台の情報を取得することができるだけなので一気に複数台を処理できるように改造をおこなう。
○ ワ ン ポ イ ン ト ○
同一ドメインに参加してる全コンピュータはドメインコントローラであるWindowsServerのAdministratorで情報をWMIで取得することができる。
な の で、
この状況を有効活用すれば管理が相当お気軽にできるわけだ。
ドメインに参加しているコンピュータ名のリストを格納したテキストファイルを作成。
このテキストファイルを読み込んで情報を取得するPCを指定できるように……
できたー。
あ、バグあるし……。
あ、定時だし……。
んー。
帰ろ。
明日はバグ取りをしようっと……。
と、思ったので探してみる。動機はRSSが提供されてて更新があったか確認できるんだから有効活用しますか、ってことです。サイトをうろうろしていると「bulknews.jp」にRSS取得に使用されているユーザエージェントのランキング50位があったのでこれを参考にすることに。データは9月26日の15時のものだそうです。1位、2位で独走してる「RabbitTicker」というソフトが目立ちますね。よく見るとバージョン違いも何気にランクインしてるので、実質これがRSSリーダとしてスタンダードとなっているのでしょう。3位のMozillaはThunderbird(Mozillaのメールクライアント)のRSSリーダ機能だと想像するんですが違うかな。あと、気づくところといえば、curlとかPHPとかlibwww-perlとかJavaとかプログラムを作ってRSS取ってきて利用してる人が何気に多いですね。これは、RSSはまだ技術者系の人がどう取り扱っておもしろく(一般的な意味では有用に)していくかの段階なのかなーと感じなくも無い。とりあえず、シェアからして定番と思われるRabbitTickerをしばらく使ってみようかな。#と、いいつつThunderbirdを今ダウンロードしてるんですけど。
1. RabbitTicker (2372: 18.6%)2. RabbitTicker-iMi (1946: 15.3%)3. Mozilla (865: 6.8%)4. RssBar (837: 6.6%)5. Desktop Sidebar v1.04.75.0 (657: 5.2%)6. Headline-Reader [t] (www.infomaker.jp) (376: 3.0%)7. SharpReader (320: 2.5%)8. ParabolicMini (318: 2.5%)9. Miech (313: 2.5%)10. curl (295: 2.3%)11. Samurize Client Script http: (289: 2.3%)12. RabbitTicker-SEGA (239: 1.9%)13. glucose (237: 1.9%)14. Headline-Deskbar(www.infomaker.jp) (231: 1.8%)15. NetNewsWire (213: 1.7%)16. RabbitTicker-Seesaa (194: 1.5%)17. MagpieRSS (187: 1.5%)18. Opera (185: 1.5%)19. RSSGate (161: 1.3%)20. NewsFire (151: 1.2%)21. NewzCrawler (138: 1.1%)22. RThReader (127: 1.0%)23. PHP (122: 1.0%)24. Desktop Sidebar v1, 04, 63, 0 (91: 0.7%)25. RssReader (88: 0.7%)26. Heimdallr 1.05a (83: 0.7%)27. Desktop Sidebar v1, 04, 66, 0 (80: 0.6%)28. RSSReader (78: 0.6%)29. FeedDemon (77: 0.6%)30. Microsoft-ATL-Native (72: 0.6%)31. Desktop Sidebar v1, 04, 59, 0 (65: 0.5%)32. lwp-trivial (63: 0.5%)33. PukiWiki (57: 0.4%)34. Desktop Sidebar v1, 04, 68, 0 (54: 0.4%)35. Java (51: 0.4%)36. Desktop Sidebar v1.04.74.0 (49: 0.4%)37. mt-rssfeed (47: 0.4%)38. KNewsTicker v0.2 (47: 0.4%)39. Heimdallr 1.05 (41: 0.3%)40. HepCat: http: (39: 0.3%)41. RabbitTicker-fj (37: 0.3%)42. Snoopy v1.01 (34: 0.3%)43. libwww-perl (33: 0.3%)44. Wget (33: 0.3%)45. RssBandit (31: 0.2%)46. Feedreader (30: 0.2%)47. Mynews (27: 0.2%)48. Snoopy v0.94 (26: 0.2%)49. RabbitTicker-bk1 (24: 0.2%)50. Desktop Sidebar v1.04.72.0 (24: 0.2%)
手間考えるとやっぱり5.6.1系に戻れってことかなあ。
5.8.4系だとアイコンがコモドドラゴンってところには惹かれるのだが。
WWW::Mechanizeを利用することで日記の新規投稿は解決を見た。(対症療法的なのは仕方ない……)こうなるとやはりコメントの投稿も解決したいなあと。軽い気持ちでつくり始めたんですが、処理自体はあっさり完成したのでアップしてしまいます。プログラムの基本部分は、塚本さんが公開されています日記投稿プログラムを参考にさせていただきました。どうやらコミュニティへの投稿もちょっといじればできる雰囲気なのでそのうちやろうかな。日記のコメントは日記のid単位で処理をしないといけないので、そこをどう解決するか。という課題があったんですが、これはプログラムに日記ページのURLを渡して処理をすることで対応。で、w3mの外部ブラウザにこのプログラムを指定すると任意の日記ページを閲覧中にMを押下すればコメントの投稿ができてはっぴー(私的に)。注意として、投稿を実行する前にcomment.txtを作成するという手順は守る必要がありますけどね。そんなわけで私の今の運用はこんな感じになっております。w3mで日記閲覧→^Zでw3mをバックグラウンドに→comment.txt作成→fgでw3mに戻る→M押下して投稿実行ソースですが、mixiの仕様でインデントがばっさり落とされるので、邪道だけど全角スペースでインデント。実際に試してみようという奇特な方はvim上で開いて「%s/ /\t/g」とかしてください。あと、$mailと$passは言うまでも無く、修正必須。
#!/usr/bin/perl
# comment.pluse strict;
use WWW::Mechanize;
use Data::Dumper;
$Data::Dumper::Indent = 1;
my $url = 'http://
my $pass = ‘yourpasswd’;
$diary_url =~ /view_diary.pl?id=([0-9]+)$/;
my $diary_id = $1;
sub message{ print @_ }sub abort{ message(@_);
exit 8}if( $diary_id !~ /[0-9]+/ ){ abort(”日id記が指定されていません\n”);}
my $comment_file = ‘./comment.txt’;
abort(”$comment_fileがありません”) unless (-f $comment_file);
message(”$comment_file読み込み中\n”);
open(IN,$comment_file);
my $comment;
read(IN,$comment,-s $comment_file);
close(IN);
# トップページの取得
message(”トップページ取得中\n”);
my $mech = WWW::Mechanize->new();
my $res = $mech->get( $url );
abort(Dumper($res)) unless ($mech->success);
# ログイン
message(”ログイン中\n”);
$mech->form_number(1);
$mech->set_fields(’email’ => $mail, ‘password’ => $pass);
$res = $mech->submit;
abort(Dumper($res)) unless ($mech->success);
while( $res->header(’refresh’)){ my $refresh = $res->header(’refresh’);
message(”リフレッシュ$refreshの処理中\n”);
if( $refresh =~ /url=([^\s;]+)/){ $res = $mech->get(URI->new($1,$mech->uri)); $refresh = $mech->uri; }else{ $res = $mech->reload; } abort(Dumper($res)) unless ( $mech->success);}
# コメントする日記ページに移動
message(”指定idの日記ページへ移動中\n”);
$res = $mech->get(URI->new($diary_url, $mech->url));abort( Dumper($res)) unless ($mech->success);
# コメント本文をセットして確認画面へ
# 自分の日記の場合は削除機能部分を考慮
message(”コメント送信中\n”);
if( !defined( $mech->form_number(2)) ){ $mech->form_number(1);}
$mech->set_visible($comment);
$res = $mech->submit;abort(Dumper($res)) unless ( $mech->success);# 投稿message(”コメントを投稿中\n”);$res = $mech->form_number(1)$res = $mech->click_button(’value’ => ‘ は い ‘);abort(Dumber($res)) unless ($mech->success);# 終了message(”終了\n”);
で、最近はCPANモジュールのリリースとか追っかけてなかったのでWWW::Mechanizeの存在とか知りませんでした……(^^;
丁度いい機会なんでここぞとばかりにいじってみましたけど、面白いですねこのモジュール。かなり悪質なこともできてしまうので使い方を問われる一品という面もありますが。
個人的にラグナロクオンラインのBOT通報フォームが数多く投稿するのをできないように意図的に作ってあってむかついたのでWWW::Mechanizeを利用してもっと簡単に一度に複数の通報をできるページを作ろうかと考え中。ソロでローグをプレイしてるとそれだけでBOT扱いされるので、さすがに耐えれなくなってきたのです。
さすがに悪戦苦闘するのイヤになったのでXML関連のモジュール使わないのを結局、作った。
コンセプトは「ASINサーチが使えればそれで良いや」ですので機能は貧弱貧弱ゥなプラグイン。MTの日本語パッチ(UTF8版)動いてれば動くでしょう。
[code]
# Poor man’s aws.pl
# (C)2004 MDR
# patched MovableType 2.661(Japanse utf-8)
# this plugin doesn’t need XML::* modules.
# ASIN search
# amazon.co.jp
package MT::Plugin::Pmaws;
use MT::Template::Context;
use LWP::Simple;
use Jcode;
my %q;
$q{’dev-t’} = “Your Developer’s token”
$q{’t'} = ‘objblo-22′;
my @pmaws_tags = qw(url ImageUrlSmall ImageUrlMedium ImageUrlLarge ProductName Asin Manufacturer Availability ListPrice OurPrice );
MT::Template::Context->add_container_tag( Pmaws => \&pmaws );
foreach my $tag ( @pmaws_tags ){
MT::Template::Context->add_tag( ‘Pmaws’.$tag => sub { my $ctx = shift; detail($ctx, $tag)});
}
MT::Template::Context->add_tag( PmawsAssociateUrl => \&associateurl );
sub pmaws
{
my $ctx = shift;
my $arg = shift;
my $res = ”;
my $builder = $ctx->stash(’builder’);
my $tokens = $ctx->stash(’tokens’);
my %detail;
$q{keyword} = $arg->{keyword};
$q{mode} = $arg->{mode};
my $url = ‘http://xml.amazon.co.jp/onca/xml3?’;
$url .= sprintf(”t=%s&dev-t=%s&AsinSearch=%s&type=lite&f=xml&locale=jp”,$q{’t'}, $q{’dev-t’}, $q{’keyword’}, $q{’mode’} );
my $xml = LWP::Simple::get($url);
my $f=0;
foreach my $line ( split /\n/, $xml ){
if( $line =~ /
if( $f == 1){
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
if( $line =~ /
}else{;}
if( $line =~ /< \/Details>/ ){$f = 0;}
}
foreach my $tag ( @pmaws_tags ){
$ctx->stash($tag, $detail{$tag});
}
if($q{t}){$ctx->stash(’AssociateUrl’,”http://www.amazon.co.jp/exec/obidos/ASIN/$q{keyword}/$q{t}”)};
defined( my $out = $builder->build( $ctx, $tokens )) or return $ctx->error($ctx->errstr);
$res .= $out;
return $res;
}
sub detail
{
my $ctx = shift;
my $key = shift;
return $ctx->stash($key);
}
sub associateurl
{
my $ctx = shift;
return $ctx->stash(’AssociateUrl’) || ”;
}
1;
[/code]
使い方ー。
$q{dev-t}にDeveloper’s tokenを書き込んで保存。
Pmaws.plとしてpluginディレクトリに入れればOK.
で↓みたいにテンプレートに書く。でRebuild
[code]
< $MTPmawsProductName$>
Posted in Hack? | No Comments »