ホーム > 技術情報 > はてなダイアリーコンフィギュレータ(略称:はてダコ) | 検索 | 更新情報 |
|
|
はてなダイアリーコンフィギュレータ(略称:はてダコ)は、 ローカルファイルの内容を元に、 はてなダイアリーの詳細設定を行うコマンドラインツールです。
一言でいえば、 「はてダラ」の「詳細設定」版と思ってください。
使い方は次の通り。
perl hatedako.pl style.txt
以下の内容をコピーしてhatedako.plという名前のファイルにしてください。
注意: このスクリプトは無保証です。あなたの自己責任でご利用ください。
#!/usr/bin/perl # # hatedako.pl - Hatena Diary Configurator. # # Copyright (C) 2004 by Hiroshi Yuki. # <hyuki@hyuki.com> # http://www.hyuki.com/techinfo/hatedako.html # # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # use strict; my $VERSION = "0.0.0"; use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Cookies; use Data::Dumper; # Prototypes. sub login(); sub logout(); sub configure_it($); sub read_configuration(); sub print_debug(@); sub print_message(@); sub error_exit(@); my $debug = 0; # Hatena user id (if empty, I will ask you later). my $username = ''; # Hatena password (if empty, I will ask you later). my $password = ''; # Proxy setting. my $http_proxy = ''; # Hatena URL. my $hatena_url = 'http://d.hatena.ne.jp'; # Option for LWP::UserAgent. my %ua_option = ( agent => "HatenaDiaryConfigurator/$VERSION", # "Mozilla/5.0", timeout => 180, ); # Other variables. my $cookie_jar; my $user_agent; # Style file. my $style_file = $ARGV[0]; unless ($style_file) { error_exit("Usage: perl hatedako.pl style-file"); } # Start. &main; # no-error exit. exit(0); # Main sequence. sub main { # Login if necessary. login() unless ($user_agent); # Read configuration. my $formref = read_configuration(); # Configure it. configure_it($formref); # Logout if necessary. logout if ($user_agent); } # Login. sub login() { $user_agent = LWP::UserAgent->new(%ua_option); $user_agent->env_proxy; if ($http_proxy) { $user_agent->proxy('http', $http_proxy); print_debug("login: proxy: $http_proxy"); } # Ask username if not set. unless ($username) { print "Username: "; chomp($username = <STDIN>); } # Ask password if not set. unless ($password) { print "Password: "; chomp($password = <STDIN>); } my %form; $form{key} = $username; $form{password} = $password; print_message("Login to $hatena_url as $form{key}."); my $r = $user_agent->simple_request( HTTP::Request::Common::POST("$hatena_url/login", \%form) ); print_debug("login: " . $r->status_line); if (not $r->is_redirect) { error_exit("Login: Unexpected response: ", $r->status_line); } print_message("Login OK."); print_debug("login: Making cookie jar."); $cookie_jar = HTTP::Cookies->new; $cookie_jar->extract_cookies($r); print_debug("login: \$cookie_jar = " . $cookie_jar->as_string); } # Logout. sub logout() { return unless $user_agent; my %form; $form{key} = $username; $form{password} = $password; print_message("Logout from $hatena_url as $form{key}."); $user_agent->cookie_jar($cookie_jar); my $r = $user_agent->get("$hatena_url/logout"); print_debug("logout: " . $r->status_line); if (not $r->is_redirect and not $r->is_success) { error_exit("Logout: Unexpected response: ", $r->status_line); } print_message("Logout OK."); } sub configure_it($) { my ($formref) = @_; print_debug("configure_it: ", Dumper($formref)); $user_agent->cookie_jar($cookie_jar); my $r = $user_agent->simple_request( HTTP::Request::Common::POST("$hatena_url/$username/configdetail", $formref) # Content_Type => 'form-data', # Content => [ # %$formref, # ] # ) ); print_debug("configure_it: " . $r->as_string); print_debug("configure_it: " . $r->status_line); if (not $r->is_success) { error_exit("Post: Unexpected response: ", $r->status_line); } # Success. return 1; } # Read configuration. sub read_configuration() { my %form; my $multiline = undef; open(FILE, $style_file) or error_exit("read_configuration: $!: $style_file"); while (<FILE>) { chomp; if ($multiline) { if (/^$multiline:end$/) { $multiline = undef; } else { $form{$multiline} .= "$_\n"; } } else { if (/^$/) { next; } elsif (/^#/) { next; } elsif (/^(\w+):begin$/) { $multiline = $1; } elsif (/^(\w+)=(.*)/) { my ($name, $value) = ($1, $2); if (defined($form{$name})) { # Multiple values. if (ref($form{$name}) eq "ARRAY") { push(@{$form{$name}}, $value); } else { my @values; push(@values, $form{$name}, $value); $form{$name} = \@values; } } else { $form{$name} = $value; } } else { error_exit("read_configuration: Invalid line: $_"); } } } close(FILE); if (defined($multiline)) { error_exit("read_configuration: Missing '$multiline:end' line."); } return \%form; } # Debug print. sub print_debug(@) { if ($debug) { print "DEBUG: ", @_, "\n"; } } # Print message. sub print_message(@) { print @_, "\n"; } # Error exit. sub error_exit(@) { print "ERROR: ", @_, "\n"; exit(1); }
「はてダコ」用の入力ファイルです。
以下の内容をコピーしてstyle.txtというファイル名で保存してください。
# ★設定の仕方 # ・基本的に行単位の処理 # ・行頭に # がある行はコメント(または無効にしたいキーワード) # ・通常は「キーワード=値」の形式で指定 # ・複数行の場合には「キーワード:begin」という行から「キーワード:end」という行までの範囲 # ■モード(固定) mode=enter # ■タイトル title=日記 # ■日記の公開(0=パブリック, 1=プライベート) permission=0 # ■閲覧許可ユーザー(tarou|hanako) allowuser= # ■プライベート用メッセージ privateheader:begin privateheader:end # ■テーマ(最新の名前は http://d.hatena.ne.jp/help#theme ) # 3minutes, 3pink, 270b, 270g, 270or, 270pk, 90, alfa, # another_blue, aoikuruma, aqua, asterisk-blue, asterisk-orange, asterisk-pink, # arrow, autumn, babypink, bill, bistro_menu, black-lingerie, # black_mamba, blackbox, blue-border, blue-feather, bluegrad, bluely, book, # book2-feminine, book3-sky, bright-green, britannian, brown, bubble, candy, # cards, cassis, cat, check, cherry, chiffon_leafgreen, chiffon_pink, # chiffon_skyblue, choochoo, christmas, citrus, city, clover, cool_ice, cosmos, # cross, darkness-pop, darkwhite, date, deepblue, default, delta, # desert, diamond_dust, dice, dog, dot, dot-lime, dot-orange, dot-sky, # double, earth-brown, easy, emboss, fine, flower, fluxbox, fluxbox2, # fluxbox3, fri, futaba, garden, gardenia, gear, germany, gingham-blue, # gingham-gray, gingham-green, gingham-purple, gingham-yellow, giza, glass, # gold, grape, gray, gray-note, gray2, green-border, green-tea, # greentea3, ha, happa, haru, hatena, value=, hellali, himawari, husen, # hydrangea, iris, kaeru, kaizou, kaki, kanban, kanshin, kasumi, # kitchen-natural, kotatsu, kurenai, kurotokage, light-blue, lightning, lime, # line, line-orange, loose-leaf, lovely, lovely_pink, lr, madrascheck, # magic, marguerite, maroon, matcha, memo, memo2, memo3, menu, metal, # midnight, mintblue, mirage, momonga, mono, monotone, moo, nachtmusik, # nahanaha, nande-ya-nen, narrow, natural_gray, navy, nebula, nenga, # nippon, noel, note, ocha, old-pavement, orange, orange-blue, # orange-border, orangegrad, pain, pale, paper, pastelpink, pearl, petith, # petith-b, pettan, pict, pink-border, pinkgrad, piyo-family, plum, # pokke-blue, pokke-orange, pool_side, pudding, puppy, purple_sun, # quiet_black, query000, query011, query101, query110, query111or, rain, # rainy-season, rasuta, rectangle, redgrid, repro, right, rim-daidaiiro, # rim-fujiiro, rim-mizuiro, rim-sakurairo, rim-tanpopoiro, rim-wakabairo, # russet, s-blue, s-pink, sagegreen, sakana, sakura, savanna, scarlet, # seam-line, sepia, sidelight, silver, silver2, simple, simpleblack, sky, # smoking_black, smoking_gray, smoking_white, snake, snow_man, snowy, soda, # spring, starlight, stripe, subdued, summer_wave, sunset, tag, tdiary1, # teacup, thin, tile, tinybox, tinybox_green, town, triple_gray, tuki, # utsusemi, w2k_button, wall1, wall2, wall3, wall4, wall5_tatami, white, # white-lingerie, whiteout, will, windowz, wine, winter, wood, xmas, xmastree, # xxx, yukon, theme=hatena # ■ヘッダの色(de, dg, gr, pr, br, rd, sp, pk, te, lg, lb, wh, or, li, bl) ucolor=de # ■日記へのコメント(0=なし(表示しない), 1=ユーザー(はてなユーザーのみ), 2=ゲスト(誰でも)) allowcomment=1 # ■コメント拒否ユーザー(idを|で区切る) denycommentuser= # ■コメントが登録時のメール通知(0=指定なし, 1=自分のアドレスへ通知) sendmail=0 # ■トラックバックの表示(0=コメントページに, 1=なし, 2=日記ページ・コメントページの両方に) hidetrackback=2 # ■日記のリンク元を公開しない(1=公開しない) # hidereferer=1 # ■日付指定がない日記へのリンクは記録しない(1=記録しない) # ignoretopref=1 # ■リンク元の記録(0=最新の日付の日記, 1=リンク先の日付の日記, 2=最新とリンク先の両方の日付の日記) referto=0 # ■日記更新時にpingを送信する(1=送信する) # sendping=1 # ■ページビューをリセットする(1=リセットする) # countreset=1 # ■携帯電話番号 mobilephone= # ■1ページの表示日数 diarylimit=5 # ■日付の書式 # %Y(2003)、%y(03)、%m(01..12)、%c(1..12)、%d(00..31)、%e(0..31)、%a(Sun..)、%W(Sunday..) dateformat=%Y-%m-%d # ■日付の変わる時刻 delaytime=6 # ■新しい書き込みの追加方向(0=下, 1=上) direction=0 # ■キーワードの自動リンク(不要なものをコメントする) # 読書 linkcname=book # 音楽 linkcname=music # 映画 linkcname=movie # ウェブ linkcname=web # コンピュータ linkcname=elec # 動物 linkcname=animal # アニメ linkcname=anime # 食 linkcname=food # スポーツ linkcname=sports # ゲーム linkcname=game # マンガ linkcname=comic # アイドル linkcname=idol # 地理 # linkcname=geography # アート linkcname=art # はてな linkcname=hatena # はてなダイアリークラブ linkcname=club # ■自動リンクするキーワードの最低スコアを指定する linkscore=0 # ■ページのヘッダ(HTMLタグ利用可) uheader:begin uheader:end # ■ページのフッタ(HTMLタグ利用可) ufooter:begin ufooter:end # ■スタイルシート style:begin span.highlight { color: black; background-color: yellow; } img.photo { float: right; margin: 10px; border: 0; } a.keyword { text-decoration: none; border-bottom: 1px solid gray; } style:end
あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。